微服务和Docker容器技术是目前分布式架构中常用的主流技术,结合Kubernetes强大的容器服务编排与调度能力,中小企业能够简单快速地构建自己的分布式互联网架构系统。本书结合实际生产项目的架构重构过程和经验,详细介绍从单体架构过渡到微服务容器化的分布式架构的各个方面,主要包括微服务开发和运维技术栈的选型、Spring Cloud微服务开发、Rancher和Kubernetes生产离线环境下的安装与部署、微服务的容器化与服务编排、日志调用链的采集和展示、基于Prometheus的系统监控,以及微服务的持续集成等要点。本书基于Spring Boot、Spring Cloud、Docker、Rancher、Kubernetes等技术,主要提供从设计、开发、部署到运维的微服务容器化的生产环境整体解决方案。
基于Spring Cloud、Docker、Rancher、Kubernetes,从设计、开发、部署到运维的整体解决方案
序一
在计算机技术日新月异的今天,层出不穷的新技术推动了生产力的发展,也推动了整个社会的进步。软件架构从单体架构到分布式架构,从SOA架构到微服务架构,再到服务网格。数据库从Oracle包打天下到MySQL大行其道,再到内存数据库、NoSQL数据库遍地开花。容器编排调度技术从Mesos、Swarm、Kubernetes三足鼎立,到最终Kubernetes一统天下。“工欲善其事,必先利其器。”在互联网转型的大潮中,需要在思想、方法、技术等方面全面转型。互联网架构的高可靠、高并发、高扩展与低耦合,共同创造了互联网应用的无限可能。
微服务的核心思想是将整个系统拆分为多个相互独立的业务,各模块可以独立地开发、测试、部署、运行和运维。这种低耦合、高内聚的灵活特性正是所有架构设计人员所期盼的。因此,微服务架构在短时间内便得到大型互联网企业的青睐,成为打造复杂互联网应用的一把利器。Kubernetes作为目前主流的容器编排调度平台,从新生事物逐渐发展成为影响全球IT技术的基础设施平台,更推动了微服务架构、云原生应用、服务网格等热门技术的普及和落地。
本书内容循序渐进,概念清晰明了,由浅入深,从易到难,为读者呈现了一幅包括微服务、容器化及技术实践在内的全景图。本书融合了作者在企业推广实施微服务的诸多经验,不但理论架构完整,而且包含典型的实践案例。
目前,大数据、云计算、物联网、人工智能、区块链等技术遍地开花,借助5G技术的翅膀,我们定能展翅翱翔!
黄文良
中国联通集团首席业务创新官 电子商务中心总经理
序二
不断增长的用户访问量,快速多变的业务需求,随之带来的资源高效利用和敏捷开发迭代需求,对于开发人员和运维人员来说都是新的挑战。为了解决应用快速部署、资源弹性使用问题,容器化和微服务等新技术正在不断深入人心。Docker容器技术、Google的Kubernetes和Mesosphere的Mesos等分布式互联网架构技术应运而生并日益成熟。DevOps理念正在不断得到业界认同和落地实践。
本书作者尹为强是我多年的老同事,是一位多年来潜心研究互联网架构新技术的资深研发工程师,在云化架构、容器化微服务等方面有独特的见解和心得体会,并在实际生产系统中得到了成功的应用。现在他利用业余时间将工作中形成的宝贵经验汇集成册同大家分享,可以使有志学习容器化和微服务方面的技术爱好者少走弯路,这是一件值得庆贺的好事。
本书有两大特点:一是理论知识论述深入浅出、通俗易懂;二是内容基于作者在设计互联网亿级用户的高并发、分布式架构平台过程中的实际经验和深刻总结。每个关键知识点都并非纸上谈兵,而是有详细的实操案例,具有很强的实战指导意义。在实际开发工作中,人们经常遇到诸多挑战,如开发环境和生产环境保持一致、大规模应用的快速部署、服务平滑升级、应用的微服务化拆分、微服务编排和自动扩缩容、资源的弹性使用、容器化集群的高效管理等。通过阅读本书,人们可以很好地应对这些挑战。本书可以作为初级和中级开发人员、架构师、技术经理等人员的学习参考书。
赵锡成
中国联通集团电子商务中心软件开发部总监
前言
微服务的概念最早是在2011年5月的软件架构会议上提出的,Martin Fowler于2014年全面阐释了微服务架构。Docker作为一种容器化技术诞生于2013年的开源项目,如今,Docker已经成为容器技术领域的领头羊。Kubernetes这个名字起源于古希腊,是舵手、罗盘的意思。Google于2014年6月推出Kubernetes(Borg 的开源版本),并于2015年7月推出Kubernetes v1.0版本。微服务、Docker和Kubernetes涵盖了系统开发、运行环境与编排调度技术,是目前分布式系统架构中主流的技术栈。
为什么写本书
如今,无论是开发人员、运维人员还是技术管理者,言系统架构必谈微服务和容器化,必谈分布式和互联网架构。但是对于大多数IT从业者来说,微服务、容器化、Kubernetes等涉及很多新技术,如果完全摸索着去学习,无形中会增加学习时间,并延长系统的新架构改造周期,而且其他人遇到的问题还要重新解决。
笔者也曾遇到相同的问题,微服务、容器化和Kubernetes相关技术栈过于庞大,在自行摸索过程中,由于主机环境、软件版本、参数配置、网络模式等存在一定的差异,所以其他人分享的经验无法复用。笔者在进行订单系统进行微服务、容器化的新架构开发和升级过程中,总结和提炼了一些经验与注意事项,将这些内容加以整理并固化形成本书,希望对读者的实践有所帮助。
对于微服务开发工程师、容器化和Kubernetes运维工程师、系统架构师、技术管理者等来说,本书不但能够引导他们少走弯路,而且能够给予他们系统架构、技术栈选型等方面的参考。阅读本书,读者能够使单体架构的系统简单快捷地进行微服务容器化的架构升级,从而使新项目能够基于微服务容器化的新架构迅速地开发、部署和运维。
本书主要内容
本书共包括10章,以微服务、容器化、Kubernetes、Rancher等的概念、解决方案及生产实践操作为基础和主线,进行了易于理解和上手操作的讲解。
第1章至第3章主要围绕微服务开发展开:从单体架构和微服务架构的特点、两者之间的差异开始,介绍了如何拆分微服务;然后介绍微服务开发的技术框架选型,以及微服务开发中的代码编写;最后介绍了微服务运行的3种运行环境,以及每种运行环境如何配置参数等。
第4章主要围绕微服务的容器化部署和生产展开:详细介绍在离线的生产环境内网中,如何快速、便捷地部署和管理Kubernetes集群,如何创建安全的数字证书,以及如何创建私有镜像仓库等。
第5章至第7章主要围绕微服务间的调用展开:首先介绍了基于ELK组件的日志采集模型及其在生产中的应用;然后介绍了微服务间调用链的概念、调用链模型及调用链的动态跟踪;最后介绍了服务间调用的熔断器,为服务调用提供一种稳定、可靠的容错和自保护机制。
第8章主要围绕微服务到容器化的生产构建展开:从精简、安全、标准化的基础镜像构建到业务镜像构建,再到生产环境中服务编排及特定服务涉及的目录挂载、环境变量设置等。
第9章和第10章主要围绕系统监控、持续集成部署展开:介绍了系统监控的类型、范围,以及Exporter + Prometheus + Grafana的监控模型体系。系统持续集成部署部分涉及基于Jenkins的自动编译、打包、部署的概念和生产实践。
致谢
首先要感谢我的家人给予我的理解和坚定支持。特别感谢我的妻子,她的理解、包容和支持使我能够全身心投入书稿的编写工作。
同时,衷心感谢电子工业出版社博文视点的宋亚东为我耐心讲解书籍出版要求以及书稿编写的注意事项,并且基于作者的角度提供了诸多帮助,尽量减轻作者工作量。他工作严谨,技术理解深刻,对书稿质量把控严格,还多次邀请专家对本书提出有益意见,对本书的修改和完善起到了重要作用。
由于作者水平有限,书中难免存在不足之处,敬请广大读者批评指正。
尹为强