写作背景 Go语言在云计算时代大放异彩。 进入互联网时代,尤其是移动互联网时代之后,这个大环境面临新的挑战,一方面在功能性方面要求越来越高:除了简单功能快速实现之外,还有对性能、安全、稳定性、高可用和可扩展性的诸多要求,而且越来越苛刻;另一个方面,更多的需求来自对效率的追求:包括开发、测试、部署、维护和迭代变更的效率,以及对成本的要求。 快速迭代是传统企业的硬伤,这不是通过加班就能解决的。在满足各种功能性的前提下,易用性的提升不仅仅满足了企业的需求,也极大地改善了开发体验。 对效率的追求,推动了云计算的产生和发展,以及云原生理念和架构的产生,我们熟知的容器技术、微服务架构以及新生的Service Mesh架构都由此诞生,不可变基础设施和声明式API的理念也在实践中被总结出来,并为后续的云原生架构提供理论指导。云计算的发展以及云原生的推出,为云和云上产品带来了除功能性之外的易用性特征。由于大部分维护工作由云承担,因此降低了对于维护的工作量,开发人员和应用服务更加关注与业务实现,而非业务实现的内容应该由云和云上产品提供。 对效率的追求,催生了云和云原生架构,带来了易用性的提升,改善了开发体验,从而进一步提升了效率。这个过程会持续发生,架构的演进不是一蹴而就的,而是一个长期发展的过程,因此云原生架构也会持续演进。在过去几年间,云原生架构中的容器/微服务等架构都是在这个循环中不断完善和普及的。 技术背景 微服务架构是云原生架构中的关键技术点,也是本书主要的关注点。微服务的话题,近几年一直很热门,微服务是SOA架构的一种具体实践。除了微服务以外,Go语言也很热门,越来越受到开发人员的青睐。Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型且具有垃圾回收功能的编程语言。 Go语言自2009年开源以来,持续受到关注。Go语言之所以厉害,是因为它在服务端的开发中,能抓住程序员的痛点,以最直接、简单、高效和稳定的方式来解决问题。基于Go语言实现的微服务,更好地体现微服务和Go语言的优势。 人类对于技术进步的追求从未停歇。热门的技术组合在一起,能不能发挥各自的优势,变得更加高效?其实不然,在逐渐发展的环境和技术演化的过程中,存在着技术人员对主流技术趋势的理解参差不齐现象。当然架构没有绝对的对与错,本书将会带读者走进基于Go语言的高并发与微服务实战世界,在这个世界里不停地探索和汲取经验。 本书内容以当前流行的微服务架构和Go语言的高并发特性为主线,介绍Go语言微服务的各个组件和并发实战。本书包含四个部分的内容: (1)第一部分浅谈云原生与微服务,涉及云原生架构的全貌介绍和微服务的概述。 (2)第二部分介绍Go语言基础,侧重于介绍Go语言的一些特性。 (3)第三部分深入Go语言的微服务实践,介绍微服务架构中涉及的基础组件,如分布式配置中心、服务注册与发现、轻量级通信机制与负载均衡、微服务的容错处理和分布式链路追踪等组件,在熟悉组件原理的基础上进行并发实践。 (4)最后一部分为综合实战,将会结合Go语言微服务框架Go-kit实现一个完整的商品秒杀系统,涉及本书介绍的各个微服务组件,并将这些组件进行整合。 读者对象 本书比较适合架构师和有一定基础的技术人员阅读,特别是正在实践或准备实践微服务的架构师和开发人员,以及转型到Go语言微服务开发的技术团队。希望本书能给读者在微服务和Go语言开发实践中获取一些经验和灵感,少走一些弯路,最终的目的是提升技术人员的开发体验和企业产品迭代的效率。 源码及勘误 本书提供源代码下载(见封面后勒口,可扫码或链接下载),备用下载地址为https://github.com/ longjoy/micro-go-book。 读者在实践时,需要注意组件下载的版本,建议相关开发环境与本书一致,或者不低于本书所列的配置。不同版本之间存在兼容性问题,而且不同版本的软件所对应的功能有的也是不同的。 书中的内容大多来自编者的工作经验,不免存在遗漏及错误,欢迎指正。读者可以直接发送邮件到邮箱(
[email protected]),在此提前表示感谢。 作者团队与致谢 本书由朱荣鑫、黄迪璇、张天共同完成。具体章节的分工,其中第1、5、8、9、12章由朱荣鑫编写;第3、4、6、10、11章由黄迪璇编写;第2、7、13章由张天编写;全书由朱荣鑫统稿。 本书的完成需要感谢很多朋友和同行的倾力帮助,感谢Go语言社区的热心小伙伴在本书撰写前后提供了很多内容组织方面的建议,他们牺牲不少休息时间帮忙审稿,给了笔者很多实质性的指导;感谢笔者所在的公司为笔者提供的良好平台,帮助笔者积累了大量Go语言高并发与微服务架构实践的经验。 写书是一件枯燥的事情,一本书从想法、策划到出版非常不易,编辑老师给了编者很大的信心和帮助。在内容和结构组织上,编者也是同本书策划编辑荆波老师反复进行了讨论和校正,因此特别感谢中国铁道出版社有限公司的荆波编辑和其他工作人员为本书的出版所做的努力。 编 者 2020年2月