描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121419478
新版本:针对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技术及容器编排技术感兴趣的读者。对处在微服务架构转型期的团队来说,本书具有很大的实践指导价值。
目 录
第1章 热身运动 1
1.1 准备工作 1
1.1.1 安装JDK 2
1.1.2 安装IDE 4
1.1.3 安装Maven 5
1.1.4 安装Postman 6
1.2 Java Web开发的进化史 6
1.2.1 应用服务器 8
1.2.2 青铜Servlet 11
1.2.3 铂金Spring MVC 18
1.2.4 王者Spring Boot 22
第2章 Spring Boot介绍 26
2.1 Spring Boot的前尘往事 26
2.1.1 Spring Framework 27
2.1.2 Spring Boot 32
2.2 Spring Boot的设计理念 34
2.3 Spring Boot的核心功能 34
2.3.1 易于使用的依赖管理Starter 35
2.3.2 约定大于配置的Auto Configuration 39
2.3.3 优雅灵活的配置管理Properties 45
2.3.4 简单明了的管理工具Actuator 51
2.3.5 方便快捷的内置容器Embedded Container 57
第3章 Spring Boot实战 63
3.1 创建Spring Boot项目 63
3.1.1 利用Spring Initializr创建项目 63
3.1.2 项目结构 64
3.1.3 在项目中添加Starter 65
3.1.4 偷懒神器lombok 68
3.2 项目运行打包 70
3.2.1 Spring Boot项目编译打包 70
3.2.2 运行Spring Boot项目 72
3.3 Spring Boot管理日志 74
3.3.1 日志框架 74
3.3.2 Log4J2 75
3.3.3 Logback 77
3.3.4 Slf4j 79
3.4 数据访问 80
3.4.1 访问关系型数据库 80
3.4.2 实现优惠券模板模块DAO层 131
3.4.3 实现用户领券模块DAO层 133
3.4.4 使用key-value store实现缓存 135
3.5 消息系统 143
3.5.1 消息系统的作用 143
3.5.2 消息系统的两种模式 144
3.5.3 集成RabbitMQ 150
3.5.4 集成Kafka 157
3.6 应用安全管理 162
3.6.1 Authentication用户身份鉴定 163
3.6.2 Authorization用户鉴权 165
3.6.3 OAuth 2.0 166
3.6.4 Spring Security 168
3.7 定时任务 173
3.7.1 Quartz 174
3.7.2 Spring Batch 178
3.8 Spring Boot项目测试 186
第4章 微服务与Spring Cloud 189
4.1 什么是微服务架构 189
4.1.1 微服务架构的特点 189
4.1.2 一线大厂为什么采用微服务架构 190
4.1.3 微服务架构对系统运维的挑战 191
4.2 微服务的拆分规范 192
4.2.1 领域模型 192
4.2.2 计算密集型业务和I/O密集型业务 192
4.2.3 区分高频、低频业务场景和突发流量 192
4.2.4 规划业务主链路 193
4.3 大厂微服务架构的服务治理方案 193
4.3.1 业界主流服务治理框架一览 193
4.3.2 微服务框架的选型建议 195
4.4 了解Spring Cloud 196
4.4.1 Spring Cloud简介 196
4.4.2 Spring Cloud和Spring Boot的关系 197
4.5 了解Spring Cloud组件库 198
4.5.1 Spring Cloud的整体架构 198
4.5.2 Spring Cloud的子项目 199
4.5.3 Netflix组件库 201
4.5.4 Alibaba组件库 202
4.6 实战项目技术选型 203
4.6.1 技术架构选型 203
4.6.2 Spring Cloud组件选型与版本 204
第5章 使用Eureka实现服务治理 205
5.1 什么是服务治理 205
5.2 Spring Cloud中常用的注册中心 207
5.3 分布式系统理论 209
5.3.1 了解CAP定理 209
5.3.2 高并发应用在CAP中的偏向性 210
5.4 Eureka核心概念 211
5.4.1 服务注册 211
5.4.2 服务发现 212
5.4.3 服务续约和服务下线 212
5.4.4 服务剔除 212
5.4.5 服务自保 213
5.5 优惠券项目改造——高可用注册中心 213
5.5.1 创建项目结构 213
5.5.2 修改host文件 213
5.5.3 引入Maven依赖项 214
5.5.4 创建项目启动类 215
5.5.5 为注册中心添加配置 215
5.6 coupon-template-service微服务架构升级 218
5.6.1 添加依赖项 218
5.6.2 创建启动类 218
5.6.3 添加配置项 219
5.6.4 运行项目 220
5.7 改造coupon-calculator 221
5.8 改造coupon-user-service服务 222
5.8.1 添加依赖项和配置项 222
5.8.2 声明RestTemplate 222
5.8.3 改造findCoupon()方法——RestTemplate.exchange函数的用法 223
5.8.4 改造requestCoupon()方法——getForObject函数的用法 225
5.8.5 改造placeOrder()方法 226
5.8.6 启动项目并验证服务注册 227
5.9 Eureka中的其他配置参数 227
第6章 使用Nacos实现服务治理 229
6.1 什么是Nacos 229
6.2 Nacos的核心功能 230
6.2.1 服务注册、服务发现与健康检测 231
6.2.2 配置管理 231
6.3 Nacos下载与安装 232
6.4 Nacos实战 234
6.4.1 Nacos与Spring Cloud的集成 234
6.4.2 Nacos控制台 234
6.4.3 Nacos实现配置管理 237
6.4.4 Nacos实现服务注册与服务发现 243
第7章 使用Ribbon实现负载均衡 247
7.1 什么是负载均衡 247
7.2 了解Ribbon 248
7.3 了解Ribbon的负载均衡器 249
7.3.1 Ribbon内置的负载均衡策略 249
7.3.2 各个负载均衡器适用的业务场景 250
7.3.3 Ribbon的IRule扩展接口 250
7.4 IPing机制 251
7.4.1 了解IPing机制 251
7.4.2 Ribbon内置的IPing策略类 252
7.5 微服务项目架构升级 252
7.5.1 添加Ribbon依赖项 252
7.5.2 添加@LoadBalancer注解 253
7.5.3 修改getUrl()方法 253
7.5.4 配置Ribbon负载均衡策略 254
第8章 使用OpenFeign实现服务间调用 256
8.1 Feign 256
8.1.1 什么是Feign 256
8.1.2 Feign的工作流程 257
8.1.3 Feign对请求和响应的压缩 258
8.2 微服务架构升级——使用Feign代理接口调用 258
8.2.1 添加依赖项 258
8.2.2 开启Feign注解支持 258
8.2.3 定义Feign接口 259
8.2.4 替换RestTemplate 261
8.2.5 Feign与Ribbon的超时与重试配置 263
8.2.6 Feign的日志配置 265
8.2.7 配置请求和响应的压缩参数 266
第9章 使用Hystrix实现服务间容错 267
9.1 Hystrix 267
9.1.1 什么是Hystrix 267
9.1.2 服务雪崩 268
9.1.3 服务雪崩的解决方案 269
9.2 Hystrix的核心概念 269
9.2.1 服务降级 269
9.2.2 服务熔断 270
9.2.3 Hystrix如何切换断路器的开关 271
9.3 微服务架构升级——配置熔断和降级 271
9.3.1 添加依赖项和配置项 271
9.3.2 在Feign接口上指定降级类 272
9.3.3 为特定方法指定降级逻辑 274
9.3.4 设置全局熔断参数 274
9.3.5 为指定方法设置超时时间 276
9.3.6 隔离机制的配置项 277
9.3.7 使用@CacheResult缓存注解 279
9.3.8 开放Actuator端点 279
9.4 微服务架构升级——利用Turbine收集Hystrix信息 281
9.4.1 什么是Turbine 281
9.4.2 添加Turbine子项目 281
9.4.3 创建启动类 282
9.4.4 指定需要监控的服务名称 283
9.5 微服务架构升级——利用Hystrix Dashboard观察服务健康度 284
9.5.1 什么是Hystrix Dashboard 284
9.5.2 添加Hystrix Dashboard项目 284
9.5.3 创建配置项和启动类 286
9.6 启用Hystrix Dashboard观察服务状态 286
第10章 使用Sentinel实现限流控制 290
10.1 服务容错 290
10.2 Sentinel简介 291
10.2.1 什么是Sentinel 291
10.2.2 Sentinel的核心功能 292
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.1.1 环境隔离 311
11.1.2 业务配置项动态推送 311
11.1.3 中心化的配置管理 312
11.2 了解Spring Cloud Config和Bus 313
11.2.1 Spring Cloud Config Bus架构图 313
11.2.2 保存配置的几种方式 315
11.3 准备工作——创建GitHub文件 315
11.3.1 创建GitHub Repo 315
11.3.2 添加YML配置文件 316
11.4 微服务架构升级——搭建高可用的配置中心 316
11.4.1 创建高可用的config-server项目 316
11.4.2 添加依赖项和启动类 317
11.4.3 添加配置——设置GitHub地址,借助Eureka实现高可用 319
11.4.4 从多个GitHub Repo中读取配置 321
11.5 GitHub配置文件命名规则 322
11.5.1 Application、Profile和Label 322
11.5.2 路径匹配规则 322
11.6 对GitHub中的配置项进行加解密 324
11.6.1 更新JDK中的JCE组件 324
11.6.2 使用对称密钥对配置项加解密 324
11.6.3 使用非对称密钥对配置项加解密 327
11.7 微服务架构升级——从配置中心读取配置项 328
11.7.1 添加Spring Cloud Config和Bus的依赖项 328
11.7.2 为配置中心添加service-id 328
11.7.3 对数据库访问密码进行加密存储 330
11.7.4 配置@RefreshScope注解 330
11.7.5 从客户端触发配置刷新 332
11.7.6 使用Bus批量刷新配置项 333
第12章 使用Spring Cloud Gateway搭建服务网关 334
12.1 了解微服务网关 334
12.1.1 服务网关的用途 335
12.1.2 Spring Cloud中的网关组件 336
12.2 Spring Cloud Gateway的核心概念——路由、谓词和过滤器 337
12.3 路由功能 339
12.3.1 通过配置文件设置简单路由 339
12.3.2 通过Java代码配置路由 340
12.3.3 谓词工厂 340
12.3.4 Gateway常用谓词 341
12.3.5 过滤器 342
12.4 微服务架构改造——搭建网关模块 343
12.4.1 添加Gateway的依赖项和启动类 343
12.4.2 将Gateway连接到注册中心 344
12.4.3 在Java文件中设置路由规则 345
12.4.4 添加网关层跨域过滤器 347
12.5 微服务架构升级——使用Redis Lua做流控 348
12.5.1 Redis和Lua的限流算法 348
12.5.2 设置限流规则 350
12.5.3 通过Actuator端点查看路由 351
第13章 使用Sleuth进行调用链路追踪 354
13.1 为什么微服务架构需要链路追踪 354
13.2 链路追踪技术介绍 356
13.2.1 Sleuth 356
13.2.2 Zipkin 357
13.2.3 ELK 358
13.3 Sleuth基本数据结构 359
13.4 微服务架构升级——集成Sleuth实现链路追踪 361
13.4.1 添加依赖项 361
13.4.2 配置Sleuth采样率 361
13.5 微服务架构升级——搭建Zipkin服务器 362
13.5.1 添加Zipkin依赖 362
13.5.2 创建Zipkin启动类 363
13.5.3 通过RabbitMQ接收日志文件 363
13.5.4 应用程序集成Zipkin 365
13.6 微服务架构升级——搭建ELK环境 368
13.6.1 下载ELK的Docker镜像 368
13.6.2 在镜像内配置ELK属性 368
13.6.3 将应用日志输送到Logstash 370
13.6.4 在Kibana中搜索日志 372
第14章 使用Stream集成消息队列 375
14.1 了解Stream 375
14.2 消息队列在微服务架构中的应用 376
14.3 消息队列的概念 380
14.3.1 发布订阅 380
14.3.2 消费组 381
14.3.3 消息分区 381
14.4 微服务架构升级——异步分发优惠券 382
14.4.1 添加Stream依赖项和消息信道 382
14.4.2 创建消息生产者 383
14.4.3 创建消息消费者并添加启动注解 384
14.4.4 添加Stream配置 385
14.5 微服务架构升级——Stream异常处理 387
14.5.1 本机重试 387
14.5.2 消息重新入队 387
14.5.3 自定义异常处理——添加降级逻辑 388
14.5.4 死信队列 388
14.6 Stream实现延迟消息 391
14.6.1 延迟消息的使用场景 391
14.6.2 安装延迟消息插件 393
14.6.3 实现延迟消息 394
第15章 使用Seata实现分布式事务 396
15.1 为什么需要分布式事务 396
15.2 分布式事务的替代方案 397
15.3 传统的XA分布式事务解决方案 398
15.4 Seata框架介绍 400
15.5 Seata的AT模式 402
15.5.1 AT模式原理 402
15.5.2 AT模式下的写隔离 404
15.5.3 AT模式下的读隔离 405
15.5.4 TCC模式 407
15.5.5 Saga模式 409
15.5.6 XA模式 410
15.6 微服务架构升级——搭建Seata服务器 410
15.6.1 下载Seata服务器 410
15.6.2 修改file.conf文件 411
15.6.3 修改registry.conf文件 412
15.6.4 添加服务器JDBC驱动 413
15.6.5 创建数据库表 413
15.7 微服务架构升级——应用改造 416
15.7.1 添加Seata依赖项和配置项 416
15.7.2 实现业务逻辑 417
15.7.3 添加数据源代理 419
第16章 走进容器化的世界 420
16.1 微服务落地的难点 420
16.1.1 微服务的兴起与容器的顺势而为 420
16.1.2 业务的高内聚和低耦合 421
16.1.3 摆脱软硬件异构的困境 423
16.1.4 遵循云原生12因素 425
16.1.5 满足康威定律 429
16.1.6 一线大厂为什么采用容器技术 430
16.2 容器技术的演进 432
16.2.1 容器技术的前世今生 432
16.2.2 主流容器技术介绍 433
16.2.3 容器技术生态圈对比 434
16.2.4 未来展望 436
16.3 容器编排技术先睹为快 436
16.3.1 资源统一管理和容器编排协作 436
16.3.2 Swarm 437
16.3.3 Mesos 437
16.3.4 Kubernetes 438
16.3.5 Rancher 439
16.3.6 各大容器编排框架对比 440
第17章 Docker容器技术 442
17.1 从HelloWorld起步 442
17.1.1 容器实战基本思路 442
17.1.2 5分钟Docker安装 443
17.1.3 1分钟HelloWorld 443
17.1.4 Docker感受分享 444
17.2 Docker架构 445
17.2.1 整体架构 445
17.2.2 客户端 446
17.2.3 Docker宿主机 449
17.2.4 仓库 450
17.2.5 镜像 451
17.2.6 容器 451
17.2.7 各个组件用途归纳 451
17.3 Docker镜像 452
17.3.1 镜像结构 452
17.3.2 镜像制作 453
17.3.3 Dockerfile常用指令 455
17.3.4 Dockerfile排疑解惑 458
17.3.5 镜像管理思路 461
17.4 Docker容器 464
17.4.1 容器的运行原理 464
17.4.2 隔离特性 464
17.4.3 限制特性 468
17.4.4 容器的起承转合 469
17.4.5 容器的管理思路 472
17.5 Docker存储 473
17.5.1 存储管理的目标 473
17.5.2 系统卷 473
17.5.3 数据卷 474
17.5.4 数据卷容器 479
17.5.5 存储模式总结 480
17.6 Docker网络 481
17.6.1 网络技术分类 481
17.6.2 none网络 482
17.6.3 host网络 482
17.6.4 bridge网络 483
17.6.5 自定义网络 486
17.6.6 第三方网络 486
17.6.7 网络技术选型 487
17.7 进一步感受Docker的魅力 488
17.7.1 Nginx反向代理部署 488
17.7.2 Redis缓存部署 489
17.7.3 MySQL数据库部署 491
17.7.4 MongoDB文档数据库部署 493
17.7.5 RabbitMQ消息队列部署 494
17.7.6 Kafka集群部署 495
17.7.7 ELK监控部署 497
17.7.8 Docker感受新体验 498
17.8 镜像仓库 499
17.8.1 搭建私有仓库 499
17.8.2 上传镜像 500
17.8.3 下载镜像 500
17.8.4 仓库的扩展 501
17.9 【优惠券项目落地】——Docker容器化 502
17.9.1 容器化总体思路 502
17.9.2 无状态应用模块容器化 503
17.9.3 无状态中间件容器化 506
17.9.4 有状态中间件容器化 508
17.9.5 容器间网络互通 509
17.9.6 后续改造规划 512
第18章 Kubernetes基础 513
18.1 了解容器编排 513
18.1.1 容器编排的意义和使命 513
18.1.2 容器编排的难点 514
18.2 了解Kubernetes 514
18.2.1 Kubernetes整体架构 514
18.2.2 Kubernetes Master节点 515
18.2.3 Kubernetes Node节点 516
18.3 Kubernetes基本概念 516
18.3.1 Pod概念 516
18.3.2 Controller概念 517
18.3.3 Label资源锁定 518
18.3.4 Namespace逻辑隔离 519
18.3.5 Kubernetes的功能理解导图 519
18.4 Kubernetes集群搭建 520
18.4.1 基础软件安装 520
18.4.2 在Master节点创建集群 521
18.4.3 网络选择和初始化 525
18.4.4 Node节点加入集群 525
18.5 Pod管理 526
18.5.1 Pod原理和实现 526
18.5.2 Pod生命周期管理 528
18.5.3 资源限制和调度选择 532
18.5.4 健康检查 537
18.6 Controller管理 540
18.6.1 Controller原理 540
18.6.2 Deployment 541
18.6.3 滚动升级 547
18.6.4 后台应用DaemonSet 552
18.6.5 任务Job 554
18.6.6 控制器选择思路 560
18.7 【优惠券项目落地】——Kubernetes容器化管理 560
18.7.1 应用Pod划分总体思路 560
18.7.2 应用Controller选择 561
18.7.3 Node资源分配 561
18.7.4 Liveness健康检查 562
第19章 Kubernetes网络互联 564
19.1 跨节点网络 565
19.1.1 网络互联总体思路 565
19.1.2 Flannel网络的Kubernetes实现 565
19.1.3 Canal网络的Kubernetes实现 565
19.1.4 网络选型 566
19.2 服务发现与负载均衡 566
19.2.1 Pod访问方式 566
19.2.2 ClusterIP方式 568
19.2.3 NodePort方式 571
19.2.4 LoadBalancer方式 574
19.2.5 Ingress方式 575
19.2.6 服务发现总体思路 577
19.3 【优惠券项目落地】——服务发现和互联 577
19.3.1 有状态服务搭建 577
19.3.2 无状态服务搭建 581
19.3.3 微服务网络互联和服务发现 583
第20章 Kubernetes数据存储 585
20.1 Volume卷 586
20.1.1 磁盘管理整体思路 586
20.1.2 emptyDir方式 587
20.1.3 hostPath方式 588
20.1.4 云存储方式 589
20.1.5 PV-PVC方式 590
20.1.6 StorageClass方式 593
20.2 ConfigMap和Secret 594
20.2.1 ConfigMap和Secret的定位 594
20.2.2 创建方式 595
20.2.3 数据传递方式 599
20.3 【优惠券项目落地】——配置和磁盘管理 603
20.3.1 应用环境变量加载 603
20.3.2 有状态应用磁盘挂载 603
第21章 Kubernetes高级功能 606
21.1 容器化的非功能性需求 607
21.1.1 架构设计的非功能性考量 607
21.1.2 Kubernetes容器方案的架构特性 607
21.2 安全性 608
21.2.1 安全性整体思路 608
21.2.2 认证和授权 609
21.2.3 Pod安全策略 612
21.2.4 网络访问策略 612
21.3 可用性 613
21.3.1 高可用架构整体思路 613
21.3.2 Node节点高可用 614
21.3.3 etcd高可用 615
21.3.4 Master节点高可用 615
21.4 扩展性 616
21.4.1 水平还是垂直扩展 616
21.4.2 手动扩缩容 616
21.4.3 HPA自动扩缩容 619
21.4.4 Serverless扩缩容 621
21.5 易用性 622
21.5.1 易用性的考量要素 622
21.5.2 Helm应用包管理 623
21.5.3 CI/CD流水线 627
21.6 可观察性 629
21.6.1 集群观察要点 629
21.6.2 Dashboard 629
21.6.3 Prometheus Grafana 630
21.6.4 Elasticsearch Fluentd Kibana 633
21.7 【优惠券项目落地】——Kubernetes容器架构终态 637
21.7.1 实现服务高可用 637
21.7.2 容器水平扩展 643
21.7.3 设置性能监控告警 644
21.7.4 设置日志监控搜索 645
21.7.5 微服务容器化落地的思考 646
第22章 Service Mesh 647
22.1 Service Mesh在微服务中的应用 648
22.1.1 Service Mesh引领微服务新时代 648
22.1.2 Istio的诞生和兴起 649
22.1.3 Service Mesh在大厂中的应用 650
22.2 从BoofInfo样例起步 650
22.2.1 异构应用的网络互通 650
22.2.2 应用拓扑监控 653
22.2.3 应用蓝绿发布 656
22.2.4 Service Mesh感受分享 657
22.3 了解Istio架构 657
22.3.1 Istio工作原理和整体架构 657
22.3.2 Proxy模块 658
22.3.3 Istiod模块 659
22.4 服务治理 659
22.4.1 服务治理的整体思路 659
22.4.2 灰度发布 660
22.4.3 故障注入 663
22.4.4 数据流镜像 666
22.4.5 服务熔断 668
22.4.6 服务网关 669
22.5 服务安全 671
22.5.1 服务安全整体思路 671
22.5.2 mTLS双向认证加密 672
22.5.3 基于mTLS的用户授权 673
22.5.4 JWT用户认证授权 675
22.6 服务监控 677
22.6.1 服务监控整体思路 677
22.6.2 Prometheus Grafana性能监控 677
22.6.3 Jaeger服务追踪 679
22.7 【优惠券项目落地】——非侵入式容器进阶态 680
22.7.1 激活Service Mesh 680
22.7.2 透明授权验证 681
22.7.3 无埋点应用拓扑管理 685
22.7.4 优惠券项目容器化落地思考 685
前言
写作初衷
在这里,笔者想和大家聊聊笔者与这本书的缘分。一个偶然的机会,编辑老师问笔者,是否有意愿写一本面向初学者的微服务与容器化的实战图书。编辑老师话虽短,但包含的信息量着实不小,既要介绍微服务和容器化的实用技术,又要让初学者能够读懂,还要紧扣实战。一番思索之后,笔者欣然应允。
自微服务架构的概念在2012年由Fred George提出以来,至今已经过了近十个年头。在这期间,随着互联网和云服务技术的蓬勃发展,微服务架构也逐渐从“阳春白雪”走入了“寻常百姓家”。Spring Cloud作为微服务领域的弄潮儿,利用Spring Boot提供的“开箱即用”的特性,极大地简化了分布式系统基础设施的构建。借助Docker容器化技术和Kubernetes容器编排技术,我们可以轻松地实现微服务应用的跨平台快速部署和弹性伸缩。Spring Cloud Docker Kubernetes的组合已经逐渐成为各大公司落地微服务架构的方案。
本书特色
新版本:针对Spring Cloud Hoxton.SR5版本 Spring Boot 2.2.x.RELEASE版本。
专注实践:全书风格紧贴实战,学练结合。通过一个优惠券实战项目贯穿全书章节,带读者体验将单体应用逐步改造为微服务应用的全过程。
技术全面:实战案例涵盖了Spring Boot、Spring Cloud核心组件库和容器化技术的知识点,介绍了Spring Boot的核心功能和服务治理组件Eureka及Nacos,讲解了Spring Cloud的第二代网关组件Spring Cloud Gateway、负载均衡组件Ribbon、服务间调用组件OpenFeign、配置中心组件Spring Cloud Config、批量消息推送组件Bus、服务容错组件Hystrix Turbine Dashboard、防流量哨兵组件Sentinel、链路追踪组件Sleuth Zipkin ELK、消息驱动组件Stream,分析了分布式事务框架Seata和用于DevOps实践的Docker容器化技术、Kubernetes容器编排技术及下一代微服务技术Service Mesh。
低门槛:本书为初学者构建了非常友好的学习曲线,通过实战项目手把手带读者从Spring Boot应用的核心功能模块入手,逐渐过渡到微服务和容器化部分。
深入剖析:对于书中的知识点,通过实战案例向读者展示业界主流的微服务架构实践。
适用读者
本书适合具备一定Java基础的开发人员及对微服务架构和Spring Cloud技术、容器编排技术感兴趣的读者。对处在微服务架构转型期的团队来说,本书具有很大的实践指导价值。
本书内容
本书共22章,每章的具体内容如下:
第1章:热身运动。
这一章主要介绍了在进行Spring Boot开发之前所需的准备工作,例如相关常识的介绍、常规软件的安装和开发环境的搭建等,此后再通过几个例子介绍了Java Web应用开发的进化史。
第2章:Spring Boot介绍。
这一章首先简单介绍了Spring框架的历史并穿插了一些业界趣闻,然后讲解了Spring框架的基石技术IoC、AOP及Spring主要组件,接着解释了Spring Boot出现的契机及原因,后重点介绍了Spring Boot的工作原理、组件及如何利用Spring Boot进行应用开发。
第3章:Spring Boot实战。
这一章主要通过优惠券项目细致地讲解了如何基于Spring Boot进行项目实战开发,先用Spring Boot构建应用的核心功能,再循序渐进地引入更多主流开源软件与项目集成,以实现更丰富的应用功能来应对各种各样的开发场景。
第4章:微服务与Spring Cloud。
这一章首先介绍微服务架构的理念及服务拆分规范,然后介绍目前一线大厂的服务治理方案,接着介绍Spring Cloud及Netflix组件库和Alibaba组件库,后介绍实战项目中采用的微服务技术选型方案。
第5章:使用Eureka实现服务治理。
这一章首先向读者介绍服务治理的概念和Spring Cloud中常用的服务注册中心,然后着重介绍Eureka的核心概念和微服务生命周期的管理流程,后通过实战项目落地一套高可用化的注册中心方案。
第6章:使用Nacos实现服务治理。
这一章首先介绍如何安装Nacos,并对Eureka和Nacos做了简单比较,后演示了如何使用Nacos实现服务治理。
第7章:使用Ribbon实现负载均衡。
这一章介绍了负载均衡的基本概念,并针对Ribbon内置的负载均衡策略及各个负载均衡策略适用的业务场景,探讨了Ribbon的IPing机制,后通过将Ribbon集成到实战案例来巩固学习效果。
第8章:使用OpenFeign实现服务间调用。
在这一章中,为了避免烦琐的REST API调用流程,我们通过Feign组件实现了一种类似于“本体方法调用”的简易步骤,我们只需要定义一个Feign接口,就可以将该接口注入Java类中实现远程REST API调用。我们还深入介绍了Feign组件的工作原理,以及Feign的超时配置和数据压缩配置。
第9章:使用Hystrix实现服务间容错。
这一章通过一个“服务雪崩”的例子来理解服务容错的几种常规手段,进而学习Hystrix如何通过服务降级、服务熔断和线程隔离的方式实现服务容错。在这个过程中,我们还介绍了Hystrix的两个好搭档,即分别用来聚合服务调用数据的Turbine和服务大盘监控组件的Hystrix Dashboard。
第10章:使用Sentinel实现限流控制。
这一章首先介绍了如何安装Sentinel,再介绍了Hystrix和Sentinel之间的异同,后演示了如何使用Sentinel在不同场景下对服务进行限流控制。
第11章:使用Spring Cloud Config和Bus搭建配置中心。
这一章首先介绍了分布式配置中心在微服务架构中的用途,然后落地了一套Spring Cloud Config GitHub的远程配置中心,后通过集成Bus组件实现了配置项的动态推送。在这个过程中,我们还介绍了如何对配置中心进行高可用化改造,以及如何使用对称密钥和非对称密钥将敏感信息进行加密存储。
第12章:使用Spring Cloud Gateway搭建服务网关。
这一章介绍了Spring Cloud的第二代网关组件Spring Cloud Gateway,它与Nginx这类外部网关不同,Spring Cloud Gateway主要用来承接经由外部网关导向微服务集群的服务请求,并基于这些服务请求的路径及参数等信息做服务转发。除了介绍如何设置请求转发规则,我们还介绍了如何在网关层添加过滤器和限流规则(底层采用Redis Lua实现限流)。
第13章:使用Sleuth进行调用链路追踪。
在一个大型微服务系统中完成一个复杂的业务流程可能需要调用数十个微服务模块,从调用链分析及线上故障排查的角度来看,我们需要将每一次服务请求中的所有调用链路通过某种标记串联起来。这一章介绍了一款调用链路“打标工具”Sleuth,通过对Sleuth底层数据结构的介绍使读者了解它的工作原理,并将打标后的日志信息传输到Zipkin和ELK组件中,实现调用链路分析和日志检索功能。
第14章:使用Stream集成消息队列。
这一章介绍了如何通过Stream组件简化微服务应用与消息队列组件的对接,我们首先介绍了发布订阅、消费组和消费分区三个重要场景,然后通过实际案例介绍了消息的异常处理手段,比如本机重试、消息重新入队、降级流程和死信队列,后介绍了消息队列的一个特殊场景“延迟消息”。
第15章:使用Seata实现分布式事务。
这一章首先介绍分布式事务的基本概念,再通过传统的XA事务模式了解分布式事务所要解决的问题,了解XA模式在高并发场景下的性能瓶颈。然后,我们引出阿里开源的Seata分布式事务框架,了解Seata内置的多种分布式事务解决方案。在这个过程中,我们重点学习Seata官方推荐的AT方案,深入学习AT方案的原理及读写隔离策略。后,我们将AT方案集成到实战项目中。
第16章:走进容器化的世界。
这一章是容器部分的起始章节,重点介绍了微服务落地的难点:高内聚和低耦合需求、异构部署需求、云原生12因素、康威定律等,以及如何通过容器化技术来攻克难点。这一章纵向分析了容器技术的前世今生和未来展望,横向比对了不同容器技术的差异和选择。
第17章:Docker容器技术。
这一章从HelloWorld起步,介绍了Docker的安装和容器的部署;讲述了Docker的整体架构和核心概念,包括镜像、容器、存储、网络、仓库等;并以贯穿全书的优惠券项目为例,讲解了微服务Docker容器化改造的实战细节。
第18章:Kubernetes基础。
这一章是容器部分的核心章节,从容器编排的概念到Kubernetes的整体框架,从Kubernetes的集群搭建到Pod、Controller、Namespace的控制管理,完整地阐述了Kubernetes容器编排的基础。本章针对优惠券项目,讲解了应该如何采用无状态部署的方式进行应用容器的编排管理。
第19章:Kubernetes网络互联。
这一章介绍了Kubernetes的网络互联模型和主流的服务发现、负载均衡方式。本章针对优惠券项目,实战了不同类型的应用部署和服务发现手段。
第20章:Kubernetes数据存储。
这一章介绍了Kubernetes的数据存储模型,以及Volume卷、ConfigMap和Secret的管理。本章针对优惠券项目讲解了环境变量加载和应用磁盘挂载的实战细节。
第21章:Kubernetes高级功能。
这一章从安全性、可用性、扩展性、易用性、可观察性等多个角度描述了容器化部署的非功能性需求,并以优惠券项目为示范,实现了整套应用的高可用、弹性扩展和监控告警。
第22章:Service Mesh。
这一章的核心是微服务的非侵入式治理。本章重点描述了Service Mesh的兴起和优势、Istio框架的原理和架构,以及如何实现服务流量治理、服务安全增强、自动化监控追踪。后,以优惠券项目的全透明授权验证和拓扑监控收尾。
第1章~第3章,第6章,第10章,作者卿睿;第4章,第5章,第7章~第9章,第11章~第15章,作者姚秋辰;第16章~第22章,作者张昕。
相关资源:
本书提供了一个GitHub项目供读者学习和实践,其中包括优惠券项目的所有源码。若读者在启动项目的过程中遇到异常报错,可以参考GitHub根目录下的README文档中的解决方案。具体下载方式可以参考下方(或封底)的读者服务。
作 者
2021年9月1日
专家力荐
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生产化实践之路》作者
评论
还没有评论。