Istio实战指南
上QQ阅读APP看书,第一时间看更新

前言

写作初衷

2017年年初,我所在的公司开始对整个业务系统进行重构和微服务化,替换掉因业务发展而不堪重负的、运行了10年的庞大的单体应用。我有幸作为小组技术负责人,负责部分业务的微服务架构的设计和开发工作。

随着微服务迁移工作的深入,服务化过程中遇到的问题越来越多,痛点也越加明显。当我们的业务被拆分成若干个服务时,不可避免地要进行服务之间的交互,很多时候需要多个服务共同协作才能完成一个完整的业务流程。在这种情况下,服务间的通信问题也暴露得更加明显。我开始思考如何实现分布式系统的弹性设计,以及解决容错、监控等问题。

我偶然通过阅读“What's a service mesh? And why do I need one?”这篇文章接触到服务网格概念,并了解到它是解决微服务通信问题的好帮手。与此同时,Istio也发布了1.0 版本。在仔细了解了Istio的整体技术架构后,我深深地被这种优雅的设计所折服,各组件职责清晰、松散耦合,数据平面可替换,Mixer的适配器模式又提供了强大的可扩展性。加之Google、IBM和Lyft的支持,我预感Istio会和Kubernetes一样,成为又一个明星级的产品。

服务网格是一个新颖的概念,Istio作为它的一个实现产品,诞生也不到两年的时间,网络上很难找到相关的学习资源,主要的学习资料就是Istio官方提供的文档。这份文档虽然十分详尽地介绍了Istio的方方面面,但语言较为晦涩,内容组织也不适合初学者。加之市面上有关这方面的图书很少,我个人又有写技术博客的习惯,这让我萌生了自己整理一份服务网格学习笔记的想法。

很巧,本书的责任编辑陈聪聪在ServiceMesher社区看到了我翻译的一些文章,于是联系到我,询问是否有兴趣出版一本有关服务网格的图书。在她的鼓励下,我毅然决然地把大部分业余时间都投入到了写作中,并经历了一个漫长而艰苦的创作过程。我乐于分享技术并从中体会分享的喜悦;然而图书写作和博客写作最大的不同就是收获喜悦的过程太过漫长了,好在经过不懈努力,在编辑的帮助下终于促成了本书的出版。

本书的定位是一本Istio入门图书,主要面向那些想了解服务网格,并通过学习把Istio服务网格集成在自己的微服务应用里的开发人员和运维人员。若读者对Kubernetes有一定的了解,会方便理解书中相关的概念。

内容组织

本书的内容编排以实践为主,涵盖了Istio的主要特性。通过由浅入深的方式让读者能够循序渐进地掌握Istio的理论知识并付诸实践。

第1 章和第2 章是理论知识,通过分析微服务架构存在的问题来引出服务网格的起源,让读者能够很自然地理解其概念。接着对Istio的架构、功能特性等做了较为详细的介绍,为后续的实践打下基础。

第3章和第4章聚焦在开发环境的准备上。为了后续进行练习,需要安装Istio以及官方的示例应用。为照顾到初学者,详细地介绍了如何从零开始搭建Istio的开发环境,包括Go语言环境、Docker、Kubernetes等必要的开发工具。

第5~8章是全书的重点,也是实战演练的部分。读者可通过多种多样的实例来学习Istio的绝大多数功能,并体会Istio的架构设计特点。在每一章节的实例内容之前,特意添加了对实例中出现的各种理论、关键词、工具等概念的解释,方便初学者弥补可能缺失的知识点,更好地完成实例的练习。

第9 章编排了一部分进阶内容,包括云平台的集成、高级流量控制以及调试和故障排除,方便有需要的读者更深入地了解这些知识。最后的附录介绍了安装选项、属性词汇表、表达式语言、适配器列表和istioctl命令,可作为手册参考。

版本及配套资源

本书成稿时Istio官方推出了1.1版本,因此示例也基于1.1版本进行编写。本书的所有示例代码可以直接在Istio的安装包内找到,也可以从本书的配套资源中获取。

感谢

写作是一个漫长而枯燥的过程,需要查阅大量的资料,反复地修改、推敲,没有毅力很难坚持下来。非常有幸能遇到出版本书的责任编辑陈聪聪,在她的鼓励和帮助下才促成了本书的出版,并且她在文字、内容编排等多个方面给予了我非常宝贵的建议。

感谢在写作过程中帮助过我的同事、朋友,特别感谢ServiceMesher社区,作为活跃的服务网格技术中文社区,在和创始人宋净超以及其他成员的交流中我获益良多。

最后要感谢我的家人,感谢我的妻子一直在默默地支持我的创作;感谢我的两个可爱的孩子——Mina和函宝。写作的过程中很少能陪伴在你们身边,以后我会弥补之前错过的时光。我爱你们。