首页>参考读物>计算机科学与技术>软件与程序设计

Go微服务实战
作者 : 刘金亮
丛书名 : 架构师书库
出版日期 : 2021-01-27
ISBN : 978-7-111-67412-2
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 393
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

全书共分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语言知识、微服务理论,以及Go语言实现微服务模式的方法,手把手带领读者走上Go语言微服务之道。

图书前言

当今世界,软件的规模越来越大、功能越来越复杂,研发团队的规模也变得越来越大,运维人员和研发人员之间的工作交集越来越多。在这个大前提下,微服务模式在大型项目中开始风靡。
本书对使用Go语言进行微服务开发做了全面细致的介绍,包括微服务的基础知识、微服务的拆分、微服务进程间通信(IPC)、微服务的分布式事务管理、领域驱动设计(DDD)、微服务中的测试、基于ES-CQRS的微服务实践、微服务生产环境和持续交付等。本书比较全面地对微服务进行了介绍,而且对于每个知识点都给出了技术实现和实例代码,比如微服务进程间通信部分重点介绍了gRPC,ES-CQRS部分则给出了Go语言的具体实现。在介绍完知识点之后,本书给出了一些综合性的案例,比如第10章、第22章等,并通过GitHub提供了完整的可运行的代码,可帮助有基本Go语言语法知识的读者尽快了解、掌握微服务模式。
不同的语言对于微服务的实现都不相同。为了让读者更深入地了解Go语言的微服务实现模式,本书前6章深入介绍了Go语言的语法知识,包括Go语言程序基础,基本数据类型,字符串与复合数据类型,函数、方法、接口和反射,并发编程,包和代码测试等。对于已经熟练掌握Go语言的读者来说,前6章可以略过,或者快速浏览一遍。
本书目的
本书是为Go语言开发者和希望进入Go微服务开发领域的读者准备的,它不是一本仅介绍微服务的书,有一半的篇幅是在介绍Go语言的知识,所以特别适合有Java、Python等其他编程基础而希望转到Go语言编程的读者阅读。
本书除了详细地介绍相应的理论知识以外,还配备了示例代码,所有代码均已在GitHub上开源,读者可以边读书边实践。希望通过这种方式让更多的工程师受益,帮助他们将所学知识尽快转化为生产力。
本书内容
本书分为四个部分,完整涵盖了从Go语言到微服务的各个方面。每一部分都提供了示例代码或实战项目,读者可以边学习边动手练习。
第一部分是Go语言基础(第1~7章),包括Go语言的基础语法、Go语言的基本特性和Go语言的实战项目。Go语言的基础语法部分包括变量、基本数据类型、垃圾回收机制、字符串和复合类型等。对于字符串的介绍,重点讲解了Go语言字符串的特点及存储方式。另外,第一部分还介绍了Go语言里的slice如何存储、如何操作。Go语言对slice的使用非常频繁,而struct是在Go语言没有类的情况下对封装的具体体现,struct是数据类型的核心。Go语言的基本特性部分包括Go语言的基本函数、方法、接口、反射及并发等内容。Go语言没有类,它如何实现面向对象的诸多特性呢?比如封装、多态等。函数和goroutine相结合又会出现什么情况?读者学习本部分内容后对Go语言的灵活性会有所理解。Go语言的并发通过goroutine和channel实现,语法很简单,但理论知识需要清楚理解。Go语言的实战项目部分主要介绍了Go语言自带的测试工具和一个实战项目。这个模拟项目对本部分前面的知识进行了总结和复习。
第二部分是Go语言进阶(第8~10章),主要内容是Go语言的并发编程进阶、Go语言的Web编程以及综合实战。并发编程进阶及Web编程部分分别介绍了可以承担高负载的线程池实现以及Go语言里的Web编程。Go语言的并发性能非常强,只要把goroutine用好,结合设计模式,就可以设计出优秀的高并发服务。而Go语言的Web编程就更为方便,甚至只使用标准模块就可以写出Web程序。另外,本部分还会介绍一个综合案例,不仅对第一部分及第二部分所学的知识进行总结和复习,同时还介绍了Web编程常用的gin框架。
第三部分是微服务理论(第11~18章),主要内容包括微服务模式的理论基础、微服务的进程间通信、微服务的分布式事务管理、领域驱动设计(DDD)、微服务测试、Docker及ES-CQRS策略。在微服务模式的理论基础部分,详细介绍了各种模式的演变,并且给出了具体的示例代码。进程间通信部分主要介绍了Go语言中的常用进程通信方式—protobuf、gRPC和consul,是微服务的技术入门。在微服务的分布式事务管理部分对分布式事务管理的方式进行了探讨,对不同拆分方式的优缺点进行了对比,其中重点介绍了Saga,并且给出了代码实现。领域驱动设计(DDD)部分介绍了其在Go语言中的实现,并给出了相关的概念,比如聚合、聚合的模式,此外,还展示了一个模拟实现。微服务测试部分介绍了测试的基本方法,建议结合第一部分中Go代码测试进行阅读。Docker部分重点介绍了Docker的基本原理及使用方法。Docker一般是由运维人员操作的,不过工程师也需要对Docker有一定的了解,以便于开发微服务。最后,本部分介绍了微服务中的知名策略—ES-CQRS在Go语言中的实现。
第四部分是微服务实战(第19~22章),包括微服务的生产环境、日志和监控、持续交付、实战项目。生产环境部分重点介绍了生产环境的安全,以及应用、运维和外部安全等内容,这是工程师在实战中必须了解的知识。日志和监控是微服务开发必须关注的内容,一旦微服务处于运行状态,工程师就可以通过日志和监控工具来诊断服务。持续交付,或者说DevOps,是微服务开发和部署过程中必不可少的知识领域,它是一个非常大的话题,本书站在Go语言的角度对其进行了介绍,并给出了实践案例,目的是让开发人员更好地理解持续交付。实战项目使用Go kit框架进行模拟。Go kit框架是Go语言领域非常著名的框架,所以本书选择结合此框架对前面介绍的知识进行实战应用。
本书适合的读者
本书适合有其他语言编程经验或者Go编程基础的读者阅读,如果完全没有编程基础,建议首先阅读D&K的The Go Programming Language(《Go程序设计语言》)。
本书有助于有其他语言编程基础(比如Java、Python、C++)的工程师转到Go语言的微服务实现项目中。
此外,对于对Go语言和微服务感兴趣的在读大学生来说,本书也是不错的选择,书中丰富的案例不仅能帮助学生学习知识,也能让学生提前了解工程项目的代码架构、测试工具等。
代码约定规范
为了读者阅读方便,特规定书中的代码格式如下:
book/chapter0/sample.go
1. package main
2. import (
3. "fmt"
4. )
5. func main() {
6. fmt.Println("Go代码示例!")
7. }
1)代码段上方会给出源码的具体路径,读者可以参考练习,这样也方便读者在本书配套的源码中查找对应的源码。
2)为了解释方便,代码大都提供了行号,如果需要特别说明,会以行号为索引进行说明。
3)如果因为排版问题代码出现了换行,行号不会增加。换言之,每个行号严格对应编辑器内的一行代码。
1. $go version
2. go version go1.12.6 darwin/amd64
1)命令行的输入也是带有行号的。
2)命令行统一以$开始,不含有$的一般是命令执行结果。
对于特别重要的地方,笔者会单独给出说明(有“说明”或“注意”的提示内容)。
更多信息
为了更好地使用本书,建议读者准备一台电脑,配备Windows、MacOS或者Linux操作系统均可。本书前两部分的代码笔者在Mac环境中测试过,其他操作系统下使用这些代码也没有问题。书中后面两部分的源码均是笔者在Mac电脑上开发、在CentOS7.6系统上测试过的,为避免不必要的bug,建议读者的微服务环境也使用CentOS7.6系统。

上架指导

计算机\程序设计

封底文字

随着互联网和软件的大型化、复杂化,研发团队的规模越来越大,运维和研发人员的工作交集越来越多,软件的迭代速度也越来越快。在这个大前提下,微服务模式在大型项目中开始风靡。Go语言因其简洁的语法、高效的开发效率和优秀的性能等诸多天然优势广泛应用于互联网公司。越来越多的高并发应用使用Go语言进行开发。本书以实践的角度全方位介绍如何通过Go语言实现微服务模式。

本书的主要内容和特色
面向所有工程师,即便是没有Go语言基础的Java、PHP、Python工程师也可以直接上手使用,书中对Go语言进行了全面精炼的介绍。“给小白的Go语言微服务实战书籍”是本书贯穿始终的写作目的,书中代码注释详细、理论解释形象。
对于微服务模式,书中并未直接给出框架,而是从理论层面入手进行了探讨,让读者“知其然,知其所以然”。
包含大量案例,对于重要的内容都给出了案例及相关分析,且每一部分都有一个案例从0开始分析、构建,指导读者从使用的角度去思考如何活学活用,并在GitHub上提供了可运行的完整代码。
本书自始至终都围绕Go语言、微服务和实战这三大特色,全书从Go语言的基础引入,到Go语言的进阶、微服务的理论,再到最后的微服务实战,都给出了技术实现和实例代码,让有编程基础的读者可以深入浅出地学习和实践。

作者简介

刘金亮:

图书目录

第1章: Go程序设计基础
估计页数:20
通过本章读者可以了解以下内容;
用Go完成两种Hello World,通过这个例子介绍变量、指针及赋值;
然后探讨包与作用域以及编译器和垃圾回收。

1.1 Hello,World
1.2 变量、指针及赋值
1.3 包与作用域
1.4 顺序、选择、循环
1.5 编译器和垃圾回收
1.6 defer
1.7 小节

第2章:基本数据类型
估计页数:15
通过本章读者能够了解Go的基本数据类型;

2.1 整数
2.2 浮点数
2.3 复数
2.4 布尔
2.5 常量
2.6 小节

第3章: 字符串及复合数据类型
估计页数:21
本章会介绍字符串以及复合数据类型,复合数据类型是Go与其他语言有较大差别的部分,正是这些差别让Go在开发的时候性能比较高、代码比较简洁。本章会进行详细介绍,让读者阅读后能够明白其中原理。

3.1 字符串和数组
3.2 slice
3.3 map
3.4 struct
3.5 JSON
3.6 小结

第4章: 函数、方法、接口及反射
估计页数:25
本章是Go语言基础部分比较核心的内容,Go里面的函数和方法与其他语言有哪些区别,接口和反射又有什么特性,都会进行详细介绍。
? 4.1 函数
? 4.2 方法
? 4.3 接口
? 4.4 反射
? 4.5 小结


第5章: 并发
估计页数:12
并发是Go的亮点,也是核心,Go的并发设计完全不同于Java、Python,这是Go性能的保障,很大程度也是我们选择Go的原因,本章单独立一章进行详细介绍。
? 5.1 goroutine
? 5.2 channel
? 5.3 小结

第6章: 测试、错误及异常
估计页数:15
本章会对Go的测试、错误及异常处理进行介绍。
? 6.1 go test

? 6.2 go错误处理
? 6.3 panic
? 6.4 小结

第7章:Go Web编程
估计页数:20
Go作为Web的后端编程重要语言,本篇将会全面的介绍Go如何处理从请求到数据存储的全过程,并且会介绍灰度发布和A/B测试,还会介绍高效Go Web框架gin。
? 7.1 Web编程简介
? 7.2 请求路由及校验
? 7.3 中间件
如何将一些通用的处理以中间件的形式提供,与请求绑定。
? 7.4 数据访问
数据库访问及相关处理
7.5 接口及表驱动
如何在Web项目使用接口,表如何处理更为合理
7.6 灰度发布及A/B测试
7.7 gin框架介绍
7.8 小结

第8章: 并发编程模式
估计页数:15
我们介绍了goroutine和channel,但是并发编程放到一个项目中我们有哪些模式,要面对哪些真实的问题,本章会专门进行介绍。
? 8.1 非阻塞io
? 8.2 net包介绍
? 8.3 抢占式调度
? 8.4 小结

第9章: 分布式系统
估计页数:30
分布式系统是微服务模式之前的一种设计模式,或者说分布式的理念还会在微服务模式当中得到应用,所以我们单独再介绍一下Go语言的分布式系统实现。
? 9.1 分布式简介
? 9.2 分布式锁
? 9.3 负载均衡
? 9.4 分布式管理配置
? 9.5 小结

第10章: 微服务介绍
估计页数:10
本章会介绍微服务的基本概念,特别是微服务与云原生的区别与联系。同时还会完成一个简单的微服务,让读者有一个直观的认识。
? 10.1 微服务简介
? 10.2 云原生与微服务
? 10.3 完成一个最简单的微服务
? 10.4 总结

第11章: Linux基础
估计页数:15
无论是后面的Docker还是Kubernetes,都需要读者有一定的Linux知识。虽然Linux是最火爆的服务器操作系统,但是不得不承认国内的大学的操作系统课程只介绍理论,都不会开始Linux课程。所以哪怕是有几年工作经验的工程师,很多时候对于Linux的认识还是非常片面的。本章会介绍Linux的基础知识,作为后续Docker和Kubernetes的前置知识。
? 11.1 Linux和Unix介绍
? 11.2 文件系统
? 11.3 一切皆文件
? 11.4 常用Linux命令
? 11.5 小结

第12章: Docker
估计页数:18
Docker作为当前最流行的容器,是当今微服务如此火爆的重要因素。本章会对微服务开发所需要的Docker基础知识进行介绍。并且在最后用一个访问Oracle数据库的例子,让读者感觉多个容器如何协同、网络如何配置、开发环境如何使用Docker等知识。
? 12.1 Docker介绍
? 12.2 Docker运行第一个容器
? 12.3 Docker数据持久化

? 12.4 Docker网络
12.5 Docker Compose
12.6 Docker内用Go访问Oracle数据库的例子
12.7 小结
第13章: Kubernetes
估计页数:18
介绍了Docker,本章就介绍集群管理的Kubernetes。对于Kubernetes的介绍包括了架构、原理、网络、集群管理、服务发现和存储。对于工程师进行微服务开发,本章只是是必须的,而且书中只是会结合minicube的本地实操进行介绍。
? 13.1 Kubernetes介绍
? 13.2 Kubernetes架构
? 13.3 Kubernetes网络
? 13.4 Pod
? 13.5 集群管理
? 13.6 控制器与服务发现
? 13.7 存储
? 13.8 小结
第14章: Go常用微服务框架
估计页数:15
微服务是一种模式,市场上已经有一些比较流行的框架,本章会对三个最流行的框架进行介绍。后续的微服务实战会选择gRPC框架。
? 14.1 Go Micro
? 14.2 Go Kite
? 14.3 gRPC
? 14.4小结
第15章: 生产环境微服务环境搭建
估计页数:15
生产环境的Kubernetes和Docker的安装是需要专门学习的,虽然我们在自己的本地以minicube为例进行学习,但是生产环境一般都是linux的,而且是集群。本章会对生产环境的搭建进行全面介绍。
? 15.1 Dockerfile
? 15.2 Kubernetes安装及测试
? 15.3 Kubernetes Master节点
? 15.4 Kubernetes DashBoard
15.5 小结
第16章: 基于Docker及Goland的开发测试环境搭建
估计页数:15
微服务有很多优势,但是测试恐怕不能称得上优势。所以本章会进行专门的介绍如何使用远程的接口,如何基于Docker进行Debug。而且在本章会开发IM系统的一个小接口。
? 16.1 Docker在开发环境的使用
? 16.2 Goland与Docker的Debug
? 16.3 Docker内访问远程API
? 16.4小结
第17章: 测试驱动开发和IM核心功能
估计页数:15
本章是微服务开发的核心章节,其实微服务的开发模式开发反而简单,因为微服务对于接口进行了细致的拆分,所以单独开发一个会比较容易。但是微服务非常强调测试,本章会介绍测试驱动的概念。
? 17.1 测试驱动开发介绍
? 17.2 IM核心功能
? 17.3 IM的微服务化
? 17.4测试迭代
17.5 小结
第18章: 持续化交付
估计页数:15
持续化交付(CI)是目前比较火的概念,当微服务足够细致的时候,开发一个接口会非常简单。这时候完全可以把运维和开发放在一起,遇到问题及时进行开发。本章会介绍相关概念,并结合前面的例子进行实战演练。
? 18.1 持续化交付简介
? 18.2 容器编排
? 18.3 容器编排的选项
? 18.4小结
第19章: 事件驱动架构
估计页数:15
事件驱动结合测试驱动往往是微服务运维和开发体系的重要支撑。本章会介绍事件驱动架构,结合实战进行实操演练。
? 19.1 同步和异步处理的差异
? 19.2 异步消息的种类
? 19.3 域驱动设计
? 19.4 事件驱动在软件设计的应用
? 19.5 小结
第20章: 日志和监控
估计页数:15
项目开发完成后,就是偏重运维。但是,微服务其实强大开发运维的一体化,所以我们也对读者介绍日志和监控。
? 20.1 日志最佳实践
? 20.2 性能
? 20.3 日志
? 20.4 异常
? 20.5 小结
第21章: 安全
估计页数:15
本书的最后会介绍微服务的安全,包括加密签字,外部与应用本身的安全,以及运维。
? 21.1 加密及签字
? 21.2 外部安全
? 21.3 应用安全
? 21.4 运维
? 21.5 小结

教学资源推荐
作者: (美)Maurice Herlihy 布朗大学 Nir Shavit 麻省理工学院 著
作者: 曹青 邱李华 郭志强
参考读物推荐
作者: Julie C. Meloni
作者: 华为Docker实践小组 著
作者: [德]延斯·古斯泰特(Jens Gustedt) 著
作者: 校宝在线 肖伟宇 翁琳鼎 王斌 厉红兵 编著