[套装书]Go微服务实战+GO语言公链开发实战(2册)

作者
刘金亮 郑东旭 杨明珠 潘盈瑜 翟萌
丛书名
架构师书库
出版社
机械工业出版社
ISBN
9782102101142
简要
简介
内容简介书籍计算机书籍 ---------------------------Go微服务实战--------------------------- 全书共分21章。分为四篇进行介绍:语言基础篇、语言进阶篇、微服务知识篇、微服务实战篇。 第 一篇包括6章:Go程序基础、基本数据类型、字符串及复合数据类型、函数、方法、接口及反射、并发。通过本篇的开发,可以让不是很熟悉Go语言的工程师掌握语法基础。 第二篇包括3章:Go Web编程、并发编程模式、分布式系统。通过本篇的学习可以让读者了解使用Go语言如何进行Web开发、Go并发模式如何设计、分布式系统使用Go如何设计。 第三篇包括5章:微服务介绍、Linux基础、Docker、Kubernetes、Go常用微服务框架。本篇是用Go进行微服务开发的基本知识储备,知识面教光,避免读者查阅多本资料,整篇学习完就可以达到微服务开发的技能入门水平。 第四篇包括7章:生产环境Docker及Kubernetes安装、基于Docker及Goland的开发测试环境搭建、测试驱动开发和IM系统核心功能的微服务化、持续化交付、事件驱动架构、日志和监控、安全。本篇是微服务实战,以IM系统为例,从系统安装、如何测试、如何迭代、如何运维都进行了介绍。 ---------------------------GO语言公链开发实战--------------------------- 本书系统地介绍区块链设计原理和开发技术,包含公链的整体架构和开发细节,主要内容包括:第1章介绍公链设计架构;第2~4章介绍比原链的交互工具、核心进程bytomd,以及API Server实现原理和接口设计。第5章和第6章详细介绍区块链核心部分,包括区块、区块链、交易的核心数据结构,以及UTXO模型、隔离见证、交易脚本、验证等技术概念的实现。第7章和第8章讲解比原链智能合约以及智能合约在BVM虚拟机上运行的过程。第9章和第10章介绍区块链钱包的设计与交易流程,包括密钥、账户、资产管理、交易管理等,还详解了区块链P2P分布式网络实现原理。第11~13章介绍数据存储、共识算法,以及挖矿相关的概念和流程。第14章展望了区块链技术未来的发展趋势。
目录



---------------------------Go微服务实战---------------------------


前言
第一部分 Go语言基础
第1章 Go语言程序基础 2
1.1 Hello,World! 2
1.2 变量、指针及赋值 5
1.2.1 变量和常量 5
1.2.2 指针 8
1.2.3 赋值 9
1.3 包及作用域 10
1.4 选择和循环 12
1.5 垃圾回收 13
1.6 小结 15
第2章 基本数据类型 16
2.1 整型 17
2.1.1 整型取值范围 17
2.1.2 运算符 18
2.2 浮点型 19
2.3 复数和布尔类型 21
2.4 格式化说明符 22
2.5 小结 22
第3章 字符串与复合数据类型 23
3.1 字符串和数组 23
3.1.1 字符串 24
3.1.2 数组 26
3.2 slice 27
3.2.1 结构定义 27
3.2.2 基本操作 28
3.2.3 append 30
3.2.4 copy 31
3.2.5 其他 32
3.3 map 33
3.3.1 定义 33
3.3.2 基本操作 33
3.4 struct 35
3.4.1 结构定义 36
3.4.2 基本操作 37
3.4.3 组合 38
3.5 JSON 40
3.6 小结 40
第4章 函数、方法、接口和反射 41
4.1 函数 41
4.1.1 函数的定义 41
4.1.2 闭包 42
4.1.3 作用域 43
4.1.4 多返回值及变长参数 45
4.1.5 defer关键字 46
4.2 方法 46
4.3 接口 50
4.4 反射 54
4.5 小结 57
第5章 并发编程 59
5.1 协程 59
5.1.1 核心概念 60
5.1.2 goroutine的基本使用 60
5.1.3 sync.WaitGroup 62
5.2 通道 64
5.2.1 channel写入数据 64
5.2.2 channel接收数据 65
5.2.3 以channel作为函数参数 66
5.2.4 缓存channel 67
5.2.5 select 70
5.2.6 超时检查 71
5.3 pipeline 74
5.4 小结 76
第6章 包和代码测试 77
6.1 包及Go工具 77
6.1.1 包导入 78
6.1.2 Go工具 79
6.2 代码优化 84
6.2.1 Go代码的优化 84
6.2.2 性能分析 84
6.3 测试 90
6.3.1 功能测试函数 91
6.3.2 基准测试函数 93
6.3.3 示例函数 96
6.4 小结 98
第7章 综合实战案例 99
7.1 案例需求 99
7.2 通信协议 100
7.3 服务器端 104
7.4 客户端 109
7.5 小结 116
第二部分 Go语言进阶
第8章 并发编程进阶 118
8.1 竞态与并发模式 118
8.1.1 数据竞态 118
8.1.2 并发原理 123
8.2 sync包 126
8.2.1 sync.Mutex互斥锁 126
8.2.2 sync.RWMutex多读写锁 128
8.2.3 sync.Once 130
8.2.4 sync.Cond 131
8.2.5 sync.Pool 134
8.2.6 sync.Map 136
8.3 context包 138
8.3.1 应用场景 138
8.3.2 定义 139
8.3.3 继承 141
8.3.4 示例 142
8.4 工作池 145
8.5 小结 151
第9章 Go Web编程 152
9.1 net/http包 152
9.1.1 Go Web工作的基本原理 152
9.1.2 http详解 156
9.2 Web框架 162
9.2.1 选择框架 162
9.2.2 httprouter框架 163
9.3 Web底层服务 165
9.3.1 Scoket简介 165
9.3.2 TCP Socket 166
9.3.3 UDP Socket 169
9.3.4 WebSocket 171
9.4 中间件 174
9.4.1 基本用法 174
9.4.2 进阶用法 176
9.5 数据库访问 179
9.5.1 database/sql接口 180
9.5.2 sqlx 182
9.6 小结 183
第10章 综合案例 184
10.1 案例需求 184
10.2 项目代码布局 186
10.3 配置和日志 187
10.3.1 配置 188
10.3.2 日志 190
10.4 模型 191
10.5 gin框架 193
10.6 小结 196
第三部分 微服务理论
第11章 微服务 198
11.1 微服务简介 198
11.1.1 什么是微服务 198
11.1.2 微服务的由来 198
11.1.3 微服务与微服务架构 199
11.2 系统架构的演进 199
11.2.1 单体架构 200
11.2.2 垂直架构 201
11.2.3 SOA 201
11.2.4 微服务架构 202
11.3 小结 205
第12章 微服务化策略 206
12.1 微服务架构风格 206
12.1.1 每个服务都拥有独立的数据库 206
12.1.2 基于API的模块化 207
12.2 微服务化进程中的重点问题 207
12.2.1 微服务的通信 207
12.2.2 事务管理的一致性 208
12.2.3 微服务数据查询 208
12.2.4 微服务部署 208
12.2.5 微服务生产环境监控 209
12.2.6 微服务的自动化测试 209
12.3 微服务的拆分 209
12.3.1 拆分的指导原则 210
12.3.2 依据业务能力拆分 210
12.3.3 依据领域驱动设计拆分 211
12.3.4 服务API的定义 213
12.4 小结 214
第13章 微服务中的进程间通信 215
13.1 微服务中的进程间通信概述 215
13.1.1 交互模式 215
13.1.2 API定义 217
13.2 protobuf格式 217
13.2.1 protobuf简介 217
13.2.2 protobuf的简单使用 217
13.3 gRPC包 219
13.3.1 net/rpc包 219
13.3.2 gRPC简介 221
13.3.3 Go语言实现gRPC调用 222
13.4 微服务发现:consul 224
13.5 小结 226
第14章 微服务中的分布式事务管理 227
14.1 微服务下的事务管理 227
14.1.1 面临的难题 227
14.1.2 SRP的折衷 228
14.2 微服务中处理事务的几种方式 229
14.2.1 避免跨微服务的事务 229
14.2.2 基于XA协议的两阶段提交协议 229
14.2.3 最终一致性和补偿 231
14.3 Saga模式 234
14.3.1 Saga模式介绍 234
14.3.2 编排模式 235
14.3.3 编配模式 237
14.4 Saga模式的Go语言示例 238
14.4.1 Saga对象的Go语言实现 238
14.4.2 中央协调器的Go语言实现 239
14.5 小结 243
第15章 领域驱动设计的Go语言实现 244
15.1 聚合模式介绍 244
15.2 使用聚合模式 247
15.2.1 聚合拥有明确的边界 247
15.2.2 聚合的规则 248
15.2.3 聚合颗粒度 250
15.2.4 使用聚合设计业务逻辑 250
15.3 领域事件 251
15.4 Go语言领域模型的模拟实现 252
15.4.1 聚合 253
15.4.2 实体和值对象 253
15.4.3 服务 255
15.5 小结 257
第16章 微服务中的测试 258
16.1 测试金字塔 258
16.2 单元测试 260
16.3 依赖注入和mock测试 263
16.4 行为驱动开发 266
16.5 使用Docker Compose测试 272
16.6 小结 275
第17章 微服务运行环境:Docker 276
17.1 Docker介绍 276
17.1.1 Docker引擎 276
17.1.2 守护进程 277
17.1.3 镜像及容器 277
17.1.4 仓库 278
17.1.5 数据卷 278
17.2 运行第一个Docker容器 279
17.2.1 Docker安装 279
17.2.2 HelloWorld程序示例 279
17.2.3 运行复杂一点的容器 280
17.3 Docker数据持久化 282
17.3.1 数据卷 282
17.3.2 bind mount 284
17.4 Docker网络 285
17.4.1 桥接驱动及自定义bridge 285
17.4.2 Host模式、Overlay模式及None模式 288
17.5 小结 289
第18章 Go语言基于ES-CQRS的微服务实践 290
18.1 理论介绍 290
18.1.1 事件溯源 290
18.1.2 命令查询职责分离 291
18.2 ES-CQRS在Go语言中的实现示例 292
18.2.1 需求 293
18.2.2 分析与设计 293
18.2.3 核心实现 296
18.3 小结 299
第四部分 微服务实战
第19章 生产环境的微服务安全 302
19.1 加密和签名 302
19.1.1 对称密钥加密 302
19.1.2 公钥密码 303
19.1.3 X.509数字证书 303
19.1.4 TLS/SSL 304
19.2 外部安全 304
19.2.1 防火墙 304
19.2.2 页面应用的防火墙 305
19.2.3 API网关 305
19.2.4 DDoS保护 306
19.3 应用安全 307
19.3.1 攻击者如何绕过防火墙 308
19.3.2 输入校验 308
19.3.3 TLS 310
19.3.4 在rest中进行数据保护 313
19.3.5 JWT 314
19.3.6 大消息的非对称加密 315
19.4 运维安全 316
19.4.1 修补容器 316
19.4.2 软件更新 317
19.4.3 修补应用程序代码 317
19.4.4 日志 317
19.5 小结 317
第20章 日志和监控 318
20.1 日志最佳实践 319
20.2 指标 319
20.2.1 指标数据类型 320
20.2.2 命名约定 320
20.2.3 存储和查询 322
20.2.4 Grafana 323
20.3 日志记录 326
20.3.1 具有关联ID的分布式跟踪 326
20.3.2 ElasticSearch、Logstash和Kibana 327
20.3.3 Kibana 328
20.4 异常 330
20.5 小结 332
第21章 持续交付 333
21.1 持续交付简介 333
21.1.1 手动部署 334
21.1.2 持续交付的好处 334
21.1.3 持续交付面面观 335
21.1.4 持续交付的过程 337
21.2 容器编排的选项和基础架构 338
21.3 Terraform 339
21.3.1 提供者 340
21.3.2 Terraform配置入口点 341
21.3.3 VPC模块 342
21.3.4 输出变量 346
21.3.5 创建基础架构 348
21.4 应用范例 348
21.4.1 持续部署的工作流程 349
21.4.2 构建 352
21.4.3 测试 353
21.4.4 基准测试 354
21.4.5 静态代码测试 354
21.4.6 集成测试 355
21.4.7 部署 356
21.4.8 冒烟测试 357
21.4.9 监控和预警 357
21.5 小结 359
第22章 使用Go kit框架构建微服务 360
22.1 创建服务 361
22.1.1 测试 361
22.1.2 Go语言中的构造函数 362
22.1.3 使用bcrypt进行Hash处理并验证密码 363
22.2 使用请求和响应对方法调用进行建模 364
22.2.1 Go kit中的端点 365
22.2.2 为服务方法设定终点 366
22.2.3 不同级别的错误 366
22.2.4 将端点包装到服务实现中 367
22.3 使用Go kit实现一个HTTP服务器 368
22.4 Go kit中的gRPC服务器 368
22.5 创建服务器命令 371
22.5.1 使用Go kit端点 373
22.5.2 运行HTTP服务器 373
22.5.3 运行gRPC服务器 373
22.5.4 防止main函数突然终止 374
22.5.5 通过HTTP使用服务 374
22.6 构建一个gRPC客户端 375
22.6.1 使用服务的命令行工具 376
22.6.2 在CLI中解析参数 377
22.7 服务中间件的速率限制 378
22.7.1 Go kit中的中间件 378
22.7.2 速率限制 380
22.8 小结 380
附录 Go语言中的关键字 381



---------------------------GO语言公链开发实战---------------------------


推荐序一
推荐序二
前言
第1章 公链设计架构 1
1.1 概述 1
1.2 公链总体架构 2
1.3 比原链各模块功能 2
1.3.1 用户交互层 2
1.3.2 接口层 4
1.3.3 内核层 4
1.3.4 钱包层 6
1.3.5 共识层 6
1.3.6 数据存储层 7
1.3.7 P2P分布式网络 8
1.4 编译部署及应用 9
1.5 本章小结 12
第2章 交互工具 13
2.1 概述 13
2.2 bytomcli交互工具 13
2.2.1 bytomcli命令flag参数 13
2.2.2 使用bytomcli查看节点状态信息 15
2.2.3 bytomcli运行案例 16
2.3 dashboard交互工具 21
2.3.1 使用dashboard发送一笔交易 22
2.3.2 使用dashboard开启挖矿模式 22
2.4 本章小结 24
第3章 守护进程的初始化与运行 25
3.1 概述 25
3.2 bytomd守护进程初始化流程及命令参数 25
3.3 bytomd守护进程的初始化实现 27
3.3.1 Node对象 28
3.3.2 配置初始化 29
3.3.3 创建文件锁 32
3.3.4 初始化网络类型 33
3.3.5 初始化数据库(持久化存储) 35
3.3.6 初始化交易池 35
3.5.7 创建一条本地区块链 36
3.3.8 初始化本地钱包 37
3.3.9 初始化网络同步管理 37
3.3.10 初始化Pprof性能分析工具 38
3.3.11 初始化CPU挖矿功能 38
3.4 bytomd守护进程的启动方式和停止方式 39
3.5 本章小结 40
第4章 接口层 41
4.1 概述 41
4.2 实现一个简易HTTP Server 41
4.3 API Server创建HTTP服务 42
4.3.1 创建API对象 42
4.3.2 创建路由项 43
4.3.3 实例化http.Server 44
4.3.4 启动API Server 45
4.3.5 接收并响应请求 45
4.4 HTTP请求的完整生命周期 47
4.5 比原链API接口描述 48
4.6 API接口调用工具 50
4.6.1 使用curl命令行调用API接口 50
4.6.2 使用Postman调用API接口 50
4.7 比原链HTTP错误码一览 51
4.8 本章小结 52
第5章 内核层:区块与区块链 53
5.1 概述 53
5.2 区块 53
5.2.1 区块的数据结构 53
5.2.2 区块头的数据结构 54
5.2.3 区块标识符 55
5.2.4 创世区块 56
5.2.5 生成创世区块 57
5.2.6 区块验证 58
5.2.7 计算下一个区块的难度目标 60
5.2.8 孤块管理 60
5.3 区块链 63
5.3.1 区块链的数据结构 63
5.3.2 区块上链 64
5.3.3 区块连接 65
5.3.4 链重组 66
5.3.5 主链的状态 69
5.4 本章小结 70
第6章 内核层:交易 71
6.1 概述 71
6.2 交易的概念 71
6.2.1 现实生活中的交易 71
6.2.2 虚拟世界中的交易 72
6.3 核心数据结构 72
6.3.1 普通交易核心数据结构 73
6.3.2 Coinbase交易核心数据结构 78
6.3.3 交易Action数据结构 81
6.3.4 MUX交易类型 85
6.4 BUTXO模型 86
6.4.1 BUTXO模型原理 87
6.4.2 MUX结构 88
6.5 交易的流程 89
6.5.1 构建交易 89
6.5.2 签名交易 93
6.5.3 提交交易 95
6.6 隔离见证 97
6.7 交易脚本 97
6.7.1 支付到公钥 98
6.7.2 支付到脚本 99
6.7.3 资产上链 100
6.7.4 资产销毁 102
6.7.5 见证脚本 102
6.7.6 栈语言 103
6.8 交易验证 105
6.8.1 标准交易 105
6.8.2 交易验证流程 106
6.9 交易费 108
6.9.1 估算交易手续费 108
6.9.2 计算交易手续费 110
6.10 交易池 111
6.11 默克尔树 112
6.12 本章小结 115
第7章 内核层:智能合约 116
7.1 概述 116
7.2 基础知识 116
7.2.1 智能合约 116
7.2.2 图灵完备的智能合约 117
7.2.3 UTXO模型和Account模型 117
7.3 合约层设计 118
7.4 智能合约语言 119
7.4.1 Equity语言 119
7.4.2 Equity合约组成 119
7.5 基于UTXO模型合约开发实战 122
7.5.1 编写合约 123
7.5.2 编译合约 123
7.5.3 部署合约 125
7.5.4 解锁合约 129
7.6 本章小结 132
第8章 内核层:虚拟机 133
8.1 概述 133
8.2 BVM介绍 134
8.2.1 虚拟机的栈 134
8.2.2 具有图灵完备性的BVM 135
8.2.3 equity & vm代码结构 135
8.3 virtualMachine对象 136
8.4 栈实现 137
8.5 BVM操作指令集 139
8.6 智能合约在BVM上的运行过程 141
8.6.1 智能合约数据结构 141
8.6.2 合约编译流程与原理 142
8.6.3 合约程序字节码示例 156
8.6.4 合约程序字节码的执行 157
8.6.5 合约程序字节码的执行示例 159
8.7 BVM指令集 160
8.8 本章小结 165
第9章 钱包层 166
9.1 概述 166
9.2 钱包对象 167
9.3 密钥管理 167
9.3.1 密钥对生成 169
9.3.2 密钥对生成算法 170
9.3.3 密钥加密存储 172
9.4 账户管理 174
9.4.1 账户创建 175
9.4.2 账户地址 176
9.4.3 账户余额 178
9.5 资产管理 179
9.5.1 初始默认资产 179
9.5.2 发行资产 180
9.6 交易管理 182
9.6.1 筛选交易 182
9.6.2 筛选UTXO 183
9.6.3 UTXO花费选择算法 184
9.7 钱包管理 186
9.7.1 数据更新 186
9.7.2 备份 187
9.7.3 恢复 188
9.8 本章小结 188
第10章 P2P分布式网络 189
10.1 概述 189
10.2 P2P的四种网络模型 189
10.3 网络节点初始化 191
10.3.1 SyncManager初始化 191
10.3.2 P2P Switch初始化 194
10.4 节点发现机制 196
10.4.1 种子节点 196
10.4.2 Kademlia算法 197
10.4.3 UPnP协议 203
10.4.4 RLPX网络协议 205
10.5 节点发现代码实现 206
10.5.1 节点发现初始化 206
10.5.2 路由表实现 207
10.5.3 Kademlia通信协议 212
10.5.4 邻居节点发现实现 212
10.6 节点状态机 219
10.7 区块同步 223
10.7.1 区块同步流程 223
10.7.2 快速同步算法 225
10.7.3 普通同步算法 230
10.7.4 区块数据请求与发送 231
10.8 交易同步 233
10.9 快速广播 235
10.9.1 新交易快速广播 236
10.9.2 新区块快速广播 238
10.10 节点管理 239
10.10.1 TCP连接数管理 240
10.10.2 Outbound连接数管理 240
10.10.3 动态节点评分机制DynamicBanScore 241
10.11 本章小结 245
第11章 数据存储 246
11.1 概述 246
11.2 为什么使用键值数据库 246
11.3 LevelDB常用操作 247
11.3.1 增删改查操作 247
11.3.2 迭代查询 248
11.3.3 按前缀查询 249
11.3.4 批量操作 249
11.4 存储层缓存 250
11.4.1 缓存淘汰算法 250
11.4.2 比原链缓存实现 252
11.5 存储层持久化 254
11.5.1 比原链数据库 254
11.5.2 持久化存储接口 255
11.5.3 持久化key数据前缀 255
11.5.4 持久化存储区块过程 256
11.6 Varint变长编码 257
11.7 本章小结 258
第12章 共识算法 259
12.1 概述 259
12.2 PoW和PoS 259
12.3 实现一个简易PoW共识算法 261
12.4 比原链PoW共识算法 266
12.4.1 PoW hash值 266
12.4.2 难度动态调整 267
12.4.3 Tensority算法 268
12.5 本章小结 278
第13章 矿池及挖矿流程 279
13.1 概述 279
13.2 与矿池相关的基本概念 279
13.3 矿池总架构 280
13.4 挖矿流程解析(矿池视角) 282
13.5 挖矿流程解析(矿机视角) 283
13.6 拒绝数与拒绝率 286
13.7 矿池的收益分配模式 286
13.8 交易打包至区块 287
13.8.1 Coinbase交易奖励 288
13.8.2 交易手续费Gas 289
13.9 矿池优化建议 290
13.10 本章小结 291
第14章 展望 292
14.1 概述 292
14.2 跨链 293
14.2.1 打通链与链的连接 293
14.2.2 BTC、ETH与BTM的跨链资产交换 293
14.3 闪电网络 294
14.4 子链 295
14.5 本章小结 296

推荐

车牌查询
桂ICP备20004708号-3