Go语言高并发与微服务实战朱荣鑫,黄迪璇,张天著中国铁道
更新日期:2024-07-11 00:59:58
书店:辽宁音像出版社图书专营店
出版时间:2020-04
浏览量:57
价格:0.0¥

书籍下载

内容介绍

基本信息

书名:Go语言高并发与微服务实战

定价:89元

作者:朱荣鑫,黄迪璇,张天 著

出版社:中国铁道出版社

出版日期:2020-04-01

ISBN:9787113266622

字数:

页码:408

版次:

装帧:平装

开本:16开

商品重量:

编辑推荐


深入Go语言和微服务框架,提供高并发场景下Go微服务应用实战案例

内容提要


近年来云原生技术发展迅猛,帮助开发者在云上快速和频繁地构建、发布和部署应用,以提高开发效率和快速定位故障。 微服务作为开展云原生技术落地的核心,它将复杂的单体应用按照业务划分并进行有效地拆分,每个微服务都可以进行独立部署和开发,大大提升了应用开发效率。Go语言作为新生代的编译型编程语言,具备语法简单、高并发性能良好和编译速度快等特点,是微服务架构落地实践的绝妙利器。

目录


篇 云原生与微服务 n
云原生与微服务分别是什么,它们之间有什么关系呢?本部分围绕云原生与微服务的概 念展开介绍,我们透过云计算的历史和系统架构的演进,具体了解这两个概念的意义及其背 后的技术发展。 n
第 1 章 云原生架构 n
1.1 云计算的历史 1 n
1.1.1 云计算的基础:虚拟化技术 1 n
1.1.2 基于虚拟机的云计算 3 n
1.1.3 容器的横空出世和容器编排大战 5 n
1.1.4 云计算演进总结 6 n
1.2 云原生是什么 7 n
1.2.1 云原生出现的背景 7 n
1.2.2 云原生的定义 8 n
1.2.3 云原生与 12 因素 9 n
1.3 云原生的基础架构 11 n
1.3.1 微服务 11 n
1.3.2 容器 12 n
1.3.3 服务网格 13 n
1.3.4 DevOps 14 n
1.4 小结 15 n
第 2 章 微服务概述 n
2.1 系统架构的演进 16 n
2.1.1 单体架构 16 n
2.1.2 垂直分层架构 17 n
2.1.3 SOA 面向服务架构 17 n
2.1.4 微服务架构 19 n
2.1.5 云原生架构 21 n
2.2 常见的微服务框架 22 n
2.2.1 Java 中的 Spring Cloud 与 Dubbo 框架 22 n
n
2.2.2 Go 语言中的 Go Kit 与 Go Micro 框架 24 n
2.3 微服务设计的六大原则 27 n
1.高内聚,低耦合 27 n
2.高度自治 27 n
3.以业务为中心 28 n
4.弹性设计 28 n
5.日志与监控 28 n
6.自动化 28 n
2.4 领域驱动设计 28 n
2.4.1 设计微服务的困境 28 n
2.4.2 解困之法:领域驱动设计(DDD) 29 n
2.4.3 DDD 的应用领域 30 n
2.4.4 DDD 领域划分 31 n
2.4.5 微服务架构中的团队组织和管理 33 n
2.5 小结 34 n
n
第二篇 Go 语法基础与特性功能 n
在正式进入微服务组件的学习之前,我们要巩固一下 Go 语言的基础,包括容器、原生 数据类型、函数与接口、结构体和方法等常用的语法基础;其次是 Go 语言的特性功能:反 射与并发模型,介绍 Go 语言协程、通道、多路复用和同步的具体实践; 后是 Golang Web 的相关介绍,一起构建一个完整的 Go Web 服务器。 n
第 3 章 Go 语言基础 n
3.1 Go 语言介绍 35 n
3.2 环境安装 36 n
3.2.1 Go 开发包安装 36 n
3.2.2 个 Go 语言程序 38 n
3.2.3 编译工具 40 n
3.3 基本语法 41 n
3.3.1 变量的声明与初始化 41 n
3.3.2 原生数据类型 43 n
【实例 3-1】分别以 byte 和 rune 的方式遍历字符串 44 n
3.3.3 指针 45 n
【实例 3-2】使用 flag 从命令行中读取参数 47 n
3.3.4 常量与类型别名 48 n
3.3.5 分支与循环控制 49 n
3.4 Go 中常用的容器 50 n
n
3.4.1 数组 50 n
3.4.2 切片 51 n
【实例 3-3】切片的动态扩容 53 n
3.4.3 列表与字典 54 n
3.4.4 容器遍历 57 n
【实例 3-4】对给出的数组 nums、切片 slis 和字典 tmpMap 分别进行遍历 57 n
3.5 函数与接口 58 n
3.5.1 函数声明和参数传递 58 n
3.5.2 匿名函数和闭包 59 n
【实例 3-5】使用回调函数处理字符串 59 n
【实例 3-6】用闭包的特性实现一个简单的计数器 60 n
3.5.3 接口声明和嵌套 61 n
3.5.4 函数体实现接口 62 n
3.6 结构体和方法 62 n
3.6.1 结构体的定义 63 n
3.6.2 结构体的实例化和初始化 63 n
3.6.3 方法与接收器 64 n
【实例 3-7】为 Perso结构体添加修改姓名和输出个人信息两个方法 65 n
3.6.4 结构体实现接口 66 n
【实例 3-8】使用一个结构体同时实现 Cat 和 Dog 接口 66 n
3.6.5 内嵌和组合 67 n
【实例 3-9】内嵌不同结构体表现不同行为 68 n
3.7 小结 69 n
第 4 章 进阶——Go 语言高级特性 n
4.1 依赖管理 70 n
4.1.1 包管理 70 n
4.1.2 GOPATH 72 n
4.1.3 Go Modules 73 n
4.2 反射基础 73 n
4.2.1 reflect.Type 类型对象 74 n
4.2.2 类型对象 reflect.StructField 和 reflect.Method 76 n
4.2.3 reflect.Value 反射值对象 78 n
【实例 4-1】使用反射调用接口方法 80 n
4.3 并发模型 82 n
4.3.1 并发与并行 82 n
4.3.2 CSP 并发模型 82 n
4.3.3 常见的线程模型 83 n
4.3.4 MPG 线程模型概述 85 n
n
4.4 并发实践 87 n
4.4.1 协程 goroutine 87 n
4.4.2 通道 channel 89 n
【实例 4-2】协程使用 channel 发送和接收数据 90 n
【实例 4-3】使用带缓冲区的 channel 91 n
【实例 4-4】使用 switch 从多个 channel 中读取数据 92 n
4.4.3 sync 同步包 94 n
【实例 4-5】使用 sync.Mutex 控制多 goroutine 串行执行 94 n
【实例 4-6】sync.RWMutex 允许多读和单写 95 n
【实例 4-7】sync.WaitGroup 阻塞主 goroutine 直到其他 goroutine 执行结束 97 n
【实例 4-8】使用 sync.Map 并发添加数据 98 n
4.5 小结 99 n
第 5 章 构建 Go Web 服务器 n
5.1 Web 的工作原理 100 n
5.1.1 协议详解 100 n
5.1.2 访问 Web 站点的过程 103 n
5.2 使用 Go 语言构建服务器 104 n
【实例 5-1】快速搭建一个 Go Web 服务器 104 n
5.3 接收和处理请求 105 n
5.3.1 Web 工作的几个概念 106 n
5.3.2 处理器处理请求 107 n
5.3.3 解析请求体 109 n
【实例 5-2】Go Web 请求体解析 109 n
5.3.4 返回响应体 111 n
【实例 5-3】返回响应体实践 112 n
5.4 实践案例:Golang Web 框架 Gi实践 113 n
5.5 服务端数据存储 116 n
5.5.1 内存存储 116 n
【实例 5-4】服务端基于内存的存储方式实践 116 n
5.5.2 database/sql 接口 118 n
5.5.3 关系数据库存储(MySQL) 118 n
【实例 5-5】服务端基于 MySQL 的存储方式实践 119 n
5.5.4 Nosql 数据库存储(MongoDB) 120 n
【实例 5-6】服务端基于 MongoDB 的存储方式实践 121 n
5.6 Golang ORM 框架 beego 实践 122 n
5.7 小结 125 n
n
n
n
第三篇 微服务核心组件 n
本部分是全书的核心,介绍微服务中各个核心组件的原理和实践应用,包括分布式配置 中心、服务注册与发现、微服务网关、微服务的容错、微服务中的通信与负载均衡、统一认 证与授权、微服务中的链路追踪。通过组件原理的介绍、组件的选型对比以及组件的实践应 用,吃透每一个微服务组件。 n
第 6 章 服务注册与发现 n
6.1 服务注册与发现的基本原理 126 n
6.1.1 服务注册与发现中心的职责 126 n
6.1.2 服务实例注册服务信息 127 n
6.1.3 CAP 原理 127 n
6.2 常用的服务注册与发现框架 128 n
6.2.1 基于 Raft 算法的开箱即用服务发现组件 Consul 128 n
6.2.2 基于 协议的分布式 key/Value 存储组件 Etcd 130 n
6.2.3 重量级一致性服务组件 Zookeeper 131 n
6.2.4 服务注册与发现组件的对比与选型 132 n
6.3 Consul 安装和接口定义 133 n
6.3.1 Consul 的安装与启动 133 n
6.3.2 Go-kit 项目结构 134 n
6.3.3 服务注册与发现接口 135 n
6.3.4 项目的总体结构 135 n
6.4 实践案例:直接使用 的方式和 Consul 交互 140 n
6.4.1 服务注册与健康检查 142 n
6.4.2 服务注销 144 n
6.4.3 服务发现 146 n
6.5 实践案例:借助 Go-kit 服务注册与发现包和 Consul 交互 147 n
6.5.1 服务注册与健康检查 148 n
6.5.2 服务注销 149 n
6.5.3 服务发现 150 n
6.5.4 服务实例信息缓存 150 n
6.5.5 MyDiscoverClient 和 KitDiscoverClient 的比较 153 n
6.6 实践案例:基于服务注册与发现的 string-service 153 n
6.6.1 项目结构 153 n
6.6.2 各层构建 154 n
6.7 小结 162 n
n
n
n
n
第 7 章 远程过程调用 RPC n
7.1 RPC 机制和实现过程 164 n
7.1.1 RPC 机制 164 n
7.1.2 传递参数 167 n
7.1.3 通信协议制定 168 n
7.1.4 出错和超时处理 170 n
7.1.5 通用 RPC 接口 171 n
7.2 简易的 Go 语言原生 RPC 172 n
7.2.1 实践案例:Go 语言 RPC 过程调用实践 172 n
7.2.2 服务端注册实现原理分析 175 n
7.2.3 服务端处理 RPC 请求原理分析 178 n
7.2.4 客户端发送 RPC 请求原理分析 182 n
7.2.5 资源重用 187 n
7.3 高性能的 gRPC 188 n
7.3.1 gRPC 的安装 189 n
7.3.2 实践案例:gRPC 过程调用实践 190 n
7.3.3 流式编程 193 n
【实例 7-1】gRPC 流式请求 193 n
7.4 便捷的 Go-kit RPC 196 n
7.4.1 Go-kit 简介 196 n
7.4.2 实践案例:Go-kit 过程调用实践 197 n
7.5 小结 202 n
第 8 章 分布式配置中心 n
8.1 如何管理分布式应用的配置 203 n
8.2 常见分布式配置中心开源组件 204 n
8.2.1 Spring Cloud Config. 204 n
8.2.2 Apollo 205 n
8.2.3 Disconf 208 n
8.2.4 分布式配置中心的对比 210 n
8.3 应用 Spring Cloud Config 统一管理配置 210 n
8.3.1 搭建 Spring Cloud Config Server 210 n
8.3.2 Viper 介绍 213 n
【实例 8-1】Viper 实现读取本地配置信息 214 n
8.3.3 实战案例:动手实现 Spring Cloud Config 的 Go 语言客户端 216 n
8.4 实践案例:实现配置的热更新 219 n
8.4.1 如何实现热更新 219 n
8.4.2 Go 语言客户端改进 220 n
n
8.4.3 结果验证 223 n
8.5 配置信息的加密解密 224 n
8.5.1 JCE 环境安装 225 n
8.5.2 对称加密与解密 225 n
8.5.3 非对称加密与解密 226 n
8.6 小结 227 n
第 9 章 微服务网关 n
9.1 微服务网关介绍与功能特性 228 n
9.2 实践案例:自己动手实现一个网关 231 n
9.2.1 实现思路 231 n
9.2.2 编写反向代理方法 232 n
9.2.3 编写入口方法 233 n
9.2.4 运行 235 n
9.2.5 测试 235 n
9.3 API 网关选型 235 n
9.3.1 标配组件:Nginx 网关 236 n
9.3.2 Java 前置网关服务选型:Netflix Zuul 237 n
9.3.3 高可用服务网关:Mashape Kong 239 n
9.3.4 三种常用 API 网关组件的指标对比 240 n
9.4 Kong 接入 240 n
9.4.1 为什么使用 Kong 240 n
9.4.2 Kong 安装实践 241 n
【实例 9-1】Docker 方式安装 Kong 242 n
9.4.3 创建服务 244 n
9.4.4 创建路由 245 n
9.5 安装 Kong 插件 246 n
9.5.1 跨域身份验证:JWT 认证插件 246 n
9.5.2 系统监控报警:Prometheus 可视化监控插件 248 n
9.5.3 实时链路数据追踪:Zipki插件 250 n
9.5.4 进阶应用:自定义 Kong 插件 252 n
【实例 9-2】自定义鉴权插件 token-auth 252 n
9.6 小结 257 n
第 10 章 微服务的容错处理与负载均衡 n
10.1 服务熔断 258 n
10.1.1 分布式系统中的服务雪崩 258 n
10.1.2 服务熔断保障系统可用性 260 n
10.1.3 断路器 261 n
n
10.2 负载均衡 262 n
10.2.1 负载均衡类型 262 n
10.2.2 负载均衡算法 262 n
10.3 实践案例:服务熔断和负载均衡使用 263 n
10.3.1 负载均衡器 263 n
10.3.2 服务编写 264 n
10.3.3 使用 Go-kit Hystrix 中间件 270 n
【实例 10-1】使用 Go-kit Hystrix 中间件修饰 Endpoint 270 n
10.4 Hystrix 详解 271 n
10.4.1 Hystrix 基本使用 272 n
10.4.2 运行流程 273 n
10.4.3 常用参数配置 274 n
10.5 Hystrix 监控面板 275 n
10.5.1 获取 Hystrix 命令调用信息 275 n
10.5.2 使用 Hystrix Dashboard 可视化面板 277 n
10.6 实践案例:在网关中添加 Hystrix 熔断和负载均衡 279 n
10.7 小结 282 n
第 11 章 统一认证与授权 n
11.1 微服务安全的挑战和现状 283 n
11.2 常见的认证与授权方案 283 n
11.2.1 当前行业授权标准 OAuth2 283 n
11.2.2 数据共享的分布式 Sessio287 n
11.2.3 安全传输对象 JWT 288 n
11.3 实践案例:基于 OAuth2 协议和 JWT 实现一套简单 的认证和授权系统 290 n
11.3.1 系统整体架构 290 n
11.3.2 授权服务器 291 n
1.用户服务和客户端服务 292 n
2.TokenGrant 令牌生成器 294 n
3.TokenService 令牌服务 296 n
4.TokenStore 令牌存储器 300 n
5./oauth/toke和/oauth/check_toke303 n
6.请求访问令牌和刷新令牌 306 n
11.3.3 资源服务器 311 n
1.令牌认证 311 n
2.鉴权 312 n
3.访问受限资源 313 n
11.4 小结 317 n
n
第 12 章 分布式链路追踪 n
12.1 诊断分布式系统的问题 318 n
12.1.1 为什么需要分布式链路追踪 318 n
12.1.2 什么是分布式链路追踪 319 n
12.1.3 分布式链路追踪规范:OpenTracing 320 n
12.1.4 分布式链路追踪的基础概念 321 n
12.2 几种流行的分布式链路追踪组件 323 n
12.2.1 简单易上手的 Twitter Zipki323 n
12.2.2 云原生链路监控组件 Uber Jaeger 324 n
12.2.3 探针性能低损耗的 SkyWalking 326 n
12.2.4 链路统计详细的 Pinpoint 327 n
12.2.5 4 种分布式链路追踪组件的指标对比 328 n
12.3 实践案例:应用 Zipki追踪 Go 微服务 329 n
12.3.1 微服务中集成 zipkin-go 330 n
12.3.2 Go-kit 微服务框架集成 Zipki实现链路追踪 337 n
1. 调用方式的链路追踪 338 n
2.gRPC 调用方式的链路追踪 342 n
12.4 小结 346 n
n
第四篇 综合实战 n
本部分是商品秒杀系统的实战项目,综合难度相对较高,我们通过分析业务系统的领域 设计,将系统划分成具体的微服务,整合各个微服务组件, 终实现一个高并发的商品秒杀 系统。 n
第 13 章 综合实战:秒杀系统的设计与实现 n
13.1 秒杀系统简介 347 n
13.2 项目架构简介 350 n
13.2.1 项目简述 350 n
13.2.2 架构信息 350 n
13.2.3 流程简介 352 n
13.3 整合升级:各个微服务脚手架的组装 353 n
13.3.1 服务注册和发现 353 n
13.3.2 负载均衡策略 357 n
13.3.3 RPC 客户端装饰器 360 n
13.3.4 限流 362 n
13.3.5 Go 语言 Redis 使用简介 364 n
n
13.3.6 Zookeeper 集成 366 n
13.3.7 Go-kit 开发利器 Truss 367 n
13.4 秒杀核心逻辑 368 n
13.4.1 秒杀业务系统 370 n
13.4.2 秒杀核心系统 380 n
13.4.3 秒杀管理系统 384 n
13.5 性能压测 386 n
13.5.1 查看服务的配置文件 386 n
13.5.2 压测实验 387 n
13.6 小结 390

作者介绍


朱荣鑫 n
软件工程硕士,微服务早期实践者,微服务方面技术专家,对高并发、分布式有多年深入的实践经验。掘金作者,CSDN博客专家。公众号“aoho求索”的作者。 n
n
黄迪璇 n
毕业于南京大学,目前就职于一线互联网公司,曾就职于字节跳动、腾讯,具有多年服务端开发经验,技术极客,热衷于新技术的研究和实践。 n
n
张天 n
服务端技术专家,精耕于微服务、分布式、数据库和性能调优等后端开发领域。著有《Spring Cloud微服务架构进阶》,CSDN博客专家。公众号“程序员历小冰”的作者。

序言