新版本:针对Spring Cloud Hoxton + Spring Boot 2.2.x版本
专注实践:实战项目贯穿全书,体验单体应用到微服务架构的升级过程
技术全面:Spring Boot、Spring Cloud Netflix/阿里巴巴、Docker、Kubernetes和Service Mesh核心技术全覆盖
低门槛:通过实战项目学练结合,初学者也能轻松上手
深入剖析:通过实战案例展示业界主流的微服务架构最佳实践
本书源码以Spring Boot 2.2.x、Spring Cloud Hoxton和Kubernetes 1.19.2为基础,从Spring Boot单体应用的搭建,到Spring Cloud微服务架构升级,再到使用Docker和Kubernetes容器编排技术做容器化改造,由浅入深、逐步讲解,使读者全面掌握主流微服务架构和容器编排方案。本书共22章,分为三个部分。第一部分,讲解Spring Boot的核心功能和底层原理,手把手带读者搭建一个基于Spring Boot的优惠券平台单体应用系统。第二部分,讲解Spring Cloud微服务技术的应用,涵盖了Spring Cloud Netflix和Spring Cloud阿里巴巴两大组件库的核心组件,在项目实战环节,将Spring Cloud微服务技术应用到优惠券项目中,让读者亲身体验从单体应用升级为微服务架构的过程。第三部分,深入讲解Docker容器技术和Kubernetes容器编排技术的核心功能,并对优惠券项目做容器化改造。本书紧扣实战、学练结合,适合具备一定Java基础的开发人员、对微服务架构和Spring Cloud技术及容器编排技术感兴趣的读者。对处在微服务架构转型期的团队来说,本书具有很大的实践指导价值。
16.3.1
16.3.1 资源统一管理和容器编排协作
没有规矩不成方圆,在大数据的动物园中,由动物管理员(ZooKeeper)来统筹一切。同样道理,在容器的蜂巢中,各种微小的工蜂和雄蜂进进出出,要想管理好这一堆堆的小容器,就需要一只精明能干的蜂皇——容器编排调度系统来完成这项工作。
编排系统要完成以下基本功能,才能够把容器的蜂巢管理得井井有条:
· 资源管理:针对不同的物理系统资源,进行合理的资源选择(通过标签等方式)、配额管理、数据复制,保证单一物理资源出现单点故障时,业务和服务仍然可以实现高可用。
· 配置管理:将不同的配置文件、环境变量、配置卷等与容器应用相绑定,实现动态的环境变量和配置修改。
· 发布管理:将相关应用按一定的先后顺序进行统一分组管理,完成应用的跨节点发布、回退、健康检查和历史查询等功能。
· 网络管理和服务发现:将跨节点部署的容器进行网络互通,并提供统一的服务发现和管理方式,方便容器外的其他应用访问容器系统,并实现负载的均衡分布。
· 弹性伸缩:按照时间规划或者由外部业务压力来触发容器资源的动态伸展和收缩,实现秒杀、抢购等平台的弹性伸缩需求。
16.3.2 Swarm
Docker Swarm作为Docker公司推出的容器编排技术,将Docker Compose在单一节点上进行容器编排协作的能力扩展到了多节点。同时,Swarm继承了Docker的轻量级容器化的特点,它可以不需要复杂的etcd、ZooKeeper等集群仲裁配置节点,不需要艰难地选择网络协议,而是方便地实现多节点网络互通、服务发现、容器编排、策略控制等,可谓是容器编排战场的轻骑兵。图16-11是一位网友的实战分享(源出处是hypriot博客),他将超小型计算节点“树莓派”和Docker Swarm容器编排结合起来,实现了手掌上的容器发布管理,Swarm的轻量特性由此可见一斑。
.
图16-11 轻量级Swarm部署案例
16.3.3 Mesos
Mesos诞生于2010年,美国加州伯克利分校。它迅速得到Twitter、Yelp、Netflix、Apple、Verizon等的背书,发展到单个集群数千节点、数十万容器的规模。
Mesos是一套定位于将整个数据中心进行资源统一管理和调度的软件平台。如果说Linux内核是Linux操作系统的核心,那么Mesos就可以算是整个数据中心的核心。在Mesos上可以将Marathon长作业调度系统、Chronos定时任务管理系统、Aurora应用管理系统、Jenkins CICD发布管理系统、Hadoop/Spark大数据系统作为一个个插件,安装在这个数据中心内核上。Mesos和这些插件的功能组合起来,就形成了一套完整的DCOS(数据中心操作系统)。管理员可以像管理一套操作系统一样方便地管理整个机房里成千上万的服务器、存储、网络资源等。
在Mesos所有的搭档中,最火的要数Docker和Marathon。Docker作为内核的执行单元,完成Mesos Master和Mesos Slave的任务要求,启停相应的容器应用;而Marathon则作为长作业调度的管理节点,将Mesos内核提供的资源进行合理的分配和协作,完成一组或多组作业任务需求。Mesos Marathon架构如图16-12所示,Marathon调度器和Mesos Master构成了控制平面,而Mesos Slave和Docker共同构成了容器的执行平面。
图16-12 Mesos Marathon架构
Mesos的主要特点:
· 可以和各种业务生态进行配合使用:既可以适合Hadoop、Spark等大数据业务形态;也可以适合传统的无状态容器发布形态;既可以完成定时批量处理作业,也可以作为长时运行的业务应用,提供交易服务。
· 调度和资源供给相分离:Mesos作为资源管理的核心,并不涉及任务调度。将复杂多变的任务调度作为插件的方式和Mesos配合使用,为整个系统的扩展性和灵活性留下了方便之门。
· 资源隔离:Mesos可以通过Docker容器的Namespace和CGroup进行资源的隔离和管理,也可以通过POSIX标准进行CPU、内存和磁盘等的隔离,选择性较强。
16.3.4 Kubernetes
Kubernetes是当今最知名的容器编排工具。其拗口的名字也不能阻挡小伙伴们的热情,大家将中间的8个英文字母缩写后,亲切地叫一声K8S——这才是它朗朗上口的名称。
Kubernetes是Google的Borg系统的开源解决方案。如图16-13所示,它通过Kubernetes Master节点完成了集群的管理,通过Node节点完成了业务的承载,通过Pod单元完成了相关容器的组合部署。
图16-13 Kubernetes架构
随着Google将Kubernetes捐赠给CNCF(Cloud Native Computing Foundation),并且伴随着IBM、RedHat、CoreOS微软、Docker等的顶力支持,Kubernetes很快成为容器界的“一哥”。其强大的网络、存储、配置、发布和监控管理,吸引了无数开源贡献者和追随者。我们将在后续章节给大家揭开其神秘的面纱,真正体会其容器的编排之美。
16.3.5 Rancher
Rancher本质上是基于容器编排引擎之上的企业级PaaS容器管理平台。作为一个兼容多种编排引擎(Kubernetes、Swarn、Mesos、Cattle等)的通用容器管理平台,Rancher抽象了编排引擎的底层实现细节,提供了类似公有云PaaS平台的一键部署、服务治理、多租户共存、全站监控等功能。无论是在应用商店的管理方面,还是在公有云IaaS资源的统筹规划、企业级权限安全的掌控方面,都可以和公有云PaaS平台一较高下。同时作为开源解决方案,省去了企业内部自研、从头搭建管理平台的时间。Rancher的整体架构如图16-14所示,它包含了基础架构服务(Infrastructure Services)、容器编排引擎(Docker Swarm、Mesos或Kubernetes)、管理工具(User Mgmt和Ops Mgmt)和琳琅满目的应用商店(Rancher Catalog)
图16-14 Rancher的整体架构
16.3.6 各大容器编排框架对比
每个人都有心中的哈姆雷特,对于编排框架也是如此。表16-2是容器编排框架对比。
表16-2 容器编排框架对比
.
目 录
第1章 热身运动 1
1.1 准备工作 1
1.2 Java Web开发的进化史 6
第2章 Spring Boot介绍 26
2.1 Spring Boot的前尘往事 26
2.2 Spring Boot的设计理念 34
2.3 Spring Boot的核心功能 34.
第3章 Spring Boot实战 63
3.1 创建Spring Boot项目 63
3.2 项目运行打包 70
3.3 Spring Boot管理日志 74
3.4 数据访问 80
3.5 消息系统 143
3.6 应用安全管理 162
3.7 定时任务 173
3.8 Spring Boot项目测试 186
第4章 微服务与Spring Cloud 189
4.1 什么是微服务架构 189
4.2 微服务的拆分规范 192
4.2.1 领域模型 192
4.3 大厂微服务架构的服务治理方案 193
4.4 了解Spring Cloud 196
4.5 了解Spring Cloud组件库 198
4.6 实战项目技术选型 203
第5章 使用Eureka实现服务治理 205
5.1 什么是服务治理 205
5.2 Spring Cloud中常用的注册中心 207
5.3 分布式系统理论 209
5.4 Eureka核心概念 211
5.5 优惠券项目改造――高可用注册中心 213
5.6 coupon-template-service微服务架构升级 218
5.7 改造coupon-calculator 221
5.8 改造coupon-user-service服务 222
5.9 Eureka中的其他配置参数 227
第6章 使用Nacos实现服务治理 229
6.1 什么是Nacos 229
6.2 Nacos的核心功能 230
6.3 Nacos下载与安装 232
6.4 Nacos实战 234
第7章 使用Ribbon实现负载均衡 247
7.1 什么是负载均衡 247
7.2 了解Ribbon 248
7.3 了解Ribbon的负载均衡器 249
7.4 IPing机制 251
7.5 微服务项目架构升级 252
第8章 使用OpenFeign实现服务间调用 256
8.1 Feign 256
8.2 微服务架构升级――使用Feign代理接口调用 258
第9章 使用Hystrix实现服务间容错 267
9.1 Hystrix 267
9.2 Hystrix的核心概念 269
9.3 微服务架构升级――配置熔断和降级 271
9.4 微服务架构升级――利用Turbine收集Hystrix信息 281
9.5 微服务架构升级――利用Hystrix Dashboard观察服务健康度 284
9.6 启用Hystrix Dashboard观察服务状态 286
第10章 使用Sentinel实现限流控制 290
10.1 服务容错 290
10.2 Sentinel简介 291
10.3 Sentinel控制台 296
10.4 Sentinel与Spring Cloud的集成 297
10.5 使用Sentinel实现降级控制 298
10.6 使用Sentinel实现限流控制 302
10.7 Sentinel的日志 307
第11章 使用Spring Cloud Config和Bus搭建配置中心 310
11.1 配置中心在微服务中的应用 310
11.2 了解Spring Cloud Config和Bus 313
11.3 准备工作――创建GitHub文件 315
11.4 微服务架构升级――搭建高可用的配置中心 316
11.5 GitHub配置文件命名规则 322
11.6 对GitHub中的配置项进行加解密 324
11.7 微服务架构升级――从配置中心读取配置项 328
第12章 使用Spring Cloud Gateway搭建服务网关· 334
12.1 了解微服务网关· 334
12.2 Spring Cloud Gateway的核心概念——路由、谓词和过滤器· 337
12.3 路由功能· 339
12.4 微服务架构改造——搭建网关模块· 343
12.5 微服务架构升级——使用Redis+Lua做流控 348
第13章 使用Sleuth进行调用链路追踪· 354
13.1 为什么微服务架构需要链路追踪· 354
13.2 链路追踪技术介绍· 356
13.3 Sleuth基本数据结构· 359
13.4 微服务架构升级——集成Sleuth实现链路追踪· 361
13.5 微服务架构升级——搭建Zipkin服务器· 362
13.6 微服务架构升级——搭建ELK环境 368
第14章 使用Stream集成消息队列· 375
14.1 了解Stream·· 375
14.2 消息队列在微服务架构中的应用· 376
14.3 消息队列的概念· 380
14.4 微服务架构升级——异步分发优惠券· 382
14.5 微服务架构升级——Stream异常处理· 387
14.6 Stream实现延迟消息 391
第15章 使用Seata实现分布式事务· 396
15.1 为什么需要分布式事务· 396
15.2 分布式事务的替代方案· 397
15.3 传统的XA分布式事务解决方案· 398
15.4 Seata框架介绍· 400
15.5 Seata的AT模式· 402
15.6 微服务架构升级——搭建Seata服务器· 410
15.7 微服务架构升级——应用改造 416
第16章 走进容器化的世界· 420
16.1 微服务落地的难点· 420
16.2 容器技术的演进· 432
16.3 容器编排技术先睹为快 436
第17章 Docker容器技术· 442
17.1 从HelloWorld起步· 442
17.2 Docker架构· 445
17.3 Docker镜像· 452
17.4 Docker容器· 464
17.5 Docker存储· 473
17.6 Docker网络· 481
17.7 进一步感受Docker的魅力· 488
17.8 镜像仓库· 499
17.9 【优惠券项目落地】——Docker容器化 502
第18章 Kubernetes基础· 513
18.1 了解容器编排· 513
18.2 了解Kubernetes· 514
18.3 Kubernetes基本概念· 516
18.4 Kubernetes集群搭建· 520
18.5 Pod管理· 526
18.6 Controller管理· 540
18.7 【优惠券项目落地】——Kubernetes容器化管理 560
第19章 Kubernetes网络互联· 564
19.1 跨节点网络 565
19.2 服务发现与负载均衡 566
19.3 【优惠券项目落地】——服务发现和互联 577
第20章 Kubernetes数据存储· 585
20.1 Volume卷 586
20.2 ConfigMap和Secret 594
20.3 【优惠券项目落地】——配置和磁盘管理 603
第21章 Kubernetes高级功能 606
21.1 容器化的非功能性需求 607
21.2 安全性 608
21.3 可用性 613
21.4 扩展性 616
21.5 易用性 622
21.6 可观察性 629
21.7 【优惠券项目落地】——Kubernetes容器架构终态 637
第22章 Service Mesh· 647
22.1 Service Mesh在微服务中的应用 648
22.2 从BoofInfo样例起步 650
22.3 了解Istio架构 657
22.4 服务治理 659
22.5 服务安全 671
22.6 服务监控 677
22.7 【优惠券项目落地】——非侵入式容器进阶态 680
温馨提示:请使用泸西县图书馆的读者帐号和密码进行登录
专家力荐
I worked directly with the three authors of this book successfully transforming monolithic legacy technology to modernized, containerized Spring Cloud microservices.These three gentlemen are practical experts at these topics, and their examples are very effective at sharing and teaching their experience. Modernization can be a vague and hard to achieve or understand technology concept, but these three architects make it real.This book will walk you through the hands on and practical experience of splitting, transforming, managing, and deploying microservices, and provide strong foundational experience on the Spring Cloud and Kubernetes frameworks that they found instrumental.I am looking forward to an English translation of this book to share with my new team, and I hope the Chinese developer community can continue to gain from and add to the experience of these three great architects.
-Austin Sheppard, CTO and VP Engineering, Booking.com Trips,
and former CTO, StubHub (10 year China software engineering executive veteran)
我与本书三位作者共事,曾亲历过从单体应用成功转型到现代化、容器化技术所支撑的Spring Cloud微服务。三位作者是书中所涉及各章节话题的实战演练专家,本书样例有三位作者的亲历佐证,实测有效。现代化技术概念较为模糊,不易实现和理解,但这三位架构师抽丝剥茧,娓娓道来。
本书从作者在项目中亲历的微服务拆分、改造、治理和部署方式说起,结合不可或缺的Spring Cloud和Kubernetes基础,循序渐进,指引读者。我期待能早日看到本书的英译版,可以分享给我的新团队。我希望在华的程序员群体能从书中获益,汲取经验,与三位架构师作者共勉前行。
——Austin Sheppard,Booking首席技术官兼副总裁,StubHub前首席技术官,
在中国有10年软件工程领域的管理经验
我与张昕相识于十几年前传统IT时代的IBM,最近听说他写了一本关于微服务的书,市面上有很多介绍Spring Boot/Cloud的书,也有很多介绍Docker的书,但是能够从微服务的本质入手,完美地融合开发和运维,把两者结合在一起,并且写得很具实操性的书却很少,而本书非常好地实现了这些需求。
本书不仅仅介绍了微服务和相关的技术框架及工具,还非常好地融入了很多场景化的实践。比如,在互联网应用中经常遇到的流量控制、全链路追踪、容器编排等。
这是一本适合所有热爱微服务和DevOps技术的从业者阅读的书,是我看过的具有实操性的微服务技术书,相信它能解答大家心中的很多疑惑。
我也曾有写书的冲动,但却从未施行,因为写书并不容易,是一件需要有很强的公益心态才能完成的事。写一本好书更是难上加难,特别钦佩张昕的勇气和付出,谢谢他能带给我们一本微服务技术好书。
——肖凯 神州数码云业务集团副总裁,阿里云MVP
在这个微服务技术异常炙热、微服务的技术专家依然奇缺的年代,如何快速培养微服务技术工程师,越来越成为一个迫切的问题。此方面好的相关图书更是寥寥可数。
本书内容全面,而且有重点、有深入,注重实战,结合实例循序渐进,娓娓道来,尤其对技术的重点和难点解释得很详细、很透彻,是一本值得借鉴参考的好书。
——赵琨 StubHub中国研发中心总经理
随着业务复杂性的不断提升,从单体应用到微服务架构的演进是大势所趋。
微服务架构是一个复杂的命题,而Spring Cloud是业界最常用的微服务框架。本书手把手教你如何基于Spring Boot构建微服务项目,如何在此框架之上完成服务发现、服务降级、熔断及限流,并完成API网关和链路追踪等配置。
在理解微服务架构的基础之上,本书进一步讲解了如何将微服务容器化,并在容器云平台Kubernetes及服务网格管理框架Istio上构建和管理微服务。本书涵盖了微服务管理的方方面面,有理论有实践,对需要入门微服务管理的读者来说是一本难得的好书。
——孟凡杰 eBay资深架构师,《Kubernetes生产化实践之路》作者