Go语言高并发与微服务实战朱荣鑫,黄迪璇,张天 pdf下载

Go语言高并发与微服务实战百度网盘pdf下载

作者:
简介:Go语言高并发与微服务实战朱荣鑫,黄迪璇,张天
出版社:
出版时间:2020-04
pdf下载价格:9.00¥


预览


内容介绍

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

内容简介

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