微服务项目实战派——从Spring Boot到Spring Cloud
  • 推荐0
  • 收藏1
  • 浏览380

微服务项目实战派——从Spring Boot到Spring Cloud

姜桥 (作者) 

  • 书  号:978-7-121-42267-6
  • 页  数:552
  • 开  本:16(185*235)
  • 出版状态:正在印刷
  • 维护人:吴宏伟
本书通过每章具体的实战案例,来逐步演示Spring Cloud微服务生命周期所涉及的整体技术。内容涵盖构建Spring Cloud微服务体系所必须的绝大部分技术内容,包括微服务工程搭建、微服务网关、熔断限流、分布式任务调度、自动化CI/CD构建、Kubernetes容器化部署、微服务监控系统、分布式链路追踪等。
本书最大的特色是极具实战性,所涉及的章节完全是从作者多年的工作经验中整理出来的真实项目,内容涵盖构建Spring Cloud微服务体系所必须的绝大部分技术内容,包括微服务工程搭建、微服务网关、熔断限流、分布式任务调度、自动化CI/CD构建、Kubernetes容器化部署、微服务监控系统、分布式链路追踪等。而更独一无二的是,上述涉及的微服务技术并不是枯燥的叙述,而是根据每个实战项目的特点从原理到实践手把手式的教学,并且每章的实战项目都可以独立实践,代码的完整性精确到其所在的具体包路径。此外,案例所涉及的系统也具有较强的实用参考性,例如用户系统、SSO单点登录系统、电子围栏系统、钱包系统、支付系统、A/B测试系统等都是目前互联网产品系统中真实的存在,本书的实战案例都有明确的设计方案及代码实现。除此之外,在本书案例的实现过程中,还特别注重编程规范及软件分层架构,通过本书学习的初学者不仅能够快速掌握Spring Cloud微服务技术,还能从中感受到良好地编程思想,从而在潜移默化之中培养良好的编程习惯,提升编程水平。最后,本书所涉及的技术富有一定的前瞻性,特别是最后两章所涉及的Kubernetes容器编排、监控系统及分布式链路追踪等内容都是当前及下一个阶段流行和发展的技术,也是下一代微服务架构Service Mesh所依赖的平台基础。
Spring Cloud微服务体系在国内真正落地是在2017年左右,那时我所在的公司——摩拜单车风头正盛,后端系统也刚完成了从早期单体应用到Spring Cloud微服务架构的转型。在这次大规模的微服务架构实践中,我深刻感受到微服务架构给高速发展中的摩拜单车,在后端架构、系统负载、开发方式、组织架构等方面所带来的好处。
于是,我便有了将这些实践经验通过文章输出的想法,而当时我的同事兼好朋友、现在已经成为公众号知名技术博主的“程序员小灰”在得知这个想法后,便鼓励我开通微信公众号“无敌码农”。此后,我便陆续在公众号上输出了一些关于Spring Cloud微服务的实践文章,而这些内容也得到了出版界老师的关注,这便是这本书写作的由来。
写作过程并非一帆风顺。因为工作繁忙,所以本书的写作从2019年4月整整持续了两年多的时间。技术更新是非常快的,这样的写作时长存在着技术滞后的风险,不过幸好目前Spring Cloud微服务体系依然是主流,虽然新一代微服务架构Service Mesh也在迅猛发展,但短期内并不会完全取代Spring Cloud。
虽然写作过程进展不快,但这也正好有了更多的思考时间,因此书稿内容也都处于持续优化中,根据技术的变化进行同步。所以,本书在技术上不仅不滞后,反而具有一定的前瞻性。

【本书特色】
本书以项目实例的形式来展示Spring Cloud微服务生命周期所涉及的技术,具有以下特点。
(1)精选业界普遍采用的技术方案进行详细介绍。
虽然Spring Cloud微服务的技术生态非常丰富,但在实际应用中,并不是所有技术都是必需的。所以,本书并没有像其他某些Spring Cloud图书那样囫囵式地将各个技术组件都介绍一遍,而是以目前互联网业界普遍采用的技术方案进行详细介绍。
例如,关于注册中心的选择,大部分互联网公司并不会直接采用Eureka,而是会选择性能更高、支持微服务数量规模更大的方案,如Consul或Nacos等。而对于像微服务的分布式链路追踪方案,一般也不会选择Spring Cloud Sleuth,而是选择更流行的SkyWalking方案等。
(2)覆盖Spring Cloud微服务体系的绝大部分内容。
本书覆盖构建Spring Cloud微服务的绝大部分内容——包括微服务工程搭建、微服务网关、熔断限流、分布式任务调度、自动化CI/CD构建、Kubernetes容器化部署、微服务监控系统、分布式链路追踪等。
(3)循序渐进,实战性强。
本书对于微服务技术并不是枯燥地叙述,而是根据每个项目实例的特点,“从原理到实践”手把手地教学,并且每章的实例都可以独立学习。书中实例都提供了完整的源码,且精确到具体的包路径。
(4)实例具有较强的实用参考性。
本书所有实例都是作者从多年的工作实践中整理出来的真实项目,用户系统、SSO授权系统、车辆电子围栏系统、电子钱包系统、支付系统、A/B测试系统等,都是目前互联网业务系统中真实存在的。本书给出了这些系统的详细设计方案,以及具体代码实现。
(5)代码规范,注重编程思想的提炼。
本书实例中,注重编程规范及软件分层架构。通过学习本书,读者不仅能够快速掌握Spring Cloud微服务开发技术,还能感受到良好的编程思想,从而在潜移默化中培养良好的编程习惯,提升编程水平。
(6)技术前瞻,紧跟发展潮流。
本书所涉及的技术具有一定的前瞻性,特别是最后两章所涉及的Kubernetes容器编排、监控系统及分布式链路追踪等内容,都是当前流行及今后会流行的技术,也是下一代微服务架构Service Mesh所依赖的平台基础。

【涉及的技术及版本】
本书所采用的技术及相关版本较新,请读者将相关开发环境设置成与下方所列的配置,或不低于本书所列的配置。
-JDK 1.8。
-Apache Maven 3.6.1。
-Spring Boot 2.1.5.RELEASE。
-Spring Cloud Greenwich.SR1。
-Docker 19.03.5。
-Consul 1.9.1。
-MySQL 5.7。
-Redis 3.2。
-PostgresSQL 10.0。
-PostGIS 2.4。
-Spring Cloud Config Server 2.1.1. RELEASE。
-Spring Cloud Hystrix Dashboard 1.4.7.RELEASE。
-Vue 2.9.6。
-Npm 6.13.4。
-MyBatis Plus 3.3.0。
-Apache Zookeeper 3.7.0-bin。
-Elasticjob-Lite 3.0.0-RC1。
-Elasticjob-Lite-UI 3.0.0-RC1。
-Ubantu Linux 20.04 LTS。
-GitLab 13.2.2。
-Harbor 2.0.2。
-Kubernetes 1.18.1。
-Helm v3.4.0-rc.1。
-Prometheus-Operator 0.38.1。
-Prometheus 2.22.0
-SkyWalking OAP Server 8.3.0-es7。
-SkyWalking UI 8.3.0。
本书实例所采用的集成开发工具为IntelliJ IDEA ULTIMATE 2019.2。

目录

第1章 基础
——从Spring Boot单体应用到Spring Cloud微服务 1
1.1 微服务的概念 2
1.1.1 什么是微服务 2
1.1.2 从单体应用到微服务 2
1.1.3 主流的微服务技术栈 4
1.2 Spring Boot框架基础 5
1.2.1 Spring Boot简介 5
1.2.2 Spring Boot的核心原理 6
1.2.3 Spring Boot的核心注解 12
1.3 开发一个Spring Boot应用 19
1.3.1 【步骤1】创建Spring Boot基础工程 19
1.3.2 【步骤2】创建项目配置文件 22
1.3.3 【步骤3】集成MyBatis框架 22
1.3.4 【步骤4】编写服务接口完成数据库操作 24
1.4 Spring Cloud微服务体系 27
1.4.1 Spring Cloud简介 27
1.4.2 Spring Boot与Spring Cloud的关系 28
1.4.3 Spring Cloud微服务的核心组件 28
1.4.4 Spring Cloud的核心注解 30
1.4.5 Spring Cloud的技术生态圈 34
1.5 本章小结 35

第2章 【实例】用户系统
——用Spring Boot开发应用,用Spring Cloud将其改为微服务架构 36
2.1 功能概述 37
2.2 系统设计 37
2.2.1 业务逻辑设计 37
2.2.2 数据库设计 40
2.3 【步骤1】搭建Spring Boot应用的工程代码 41
2.3.1 创建Spring Boot应用工程 41
2.3.2 创建应用的配置文件 43
2.3.3 集成数据库访问框架MyBatis 44
2.3.4 集成缓存数据库Redis 47
2.4 【步骤2】用Spring Boot实现业务逻辑 49
2.4.1 定义用户微服务服务接口层(Controller层) 49
2.4.2 开发用户微服务业务层(Service层)代码 52
2.4.3 开发MyBatis持久层(Dao层)组件 55
2.5 【步骤3】将Spring Boot应用升级为Spring Cloud微服务 59
2.5.1 部署服务注册中心Consul 59
2.5.2 对Spring Boot应用进行微服务改造 60
2.5.3 将Spring Cloud微服务注入服务注册中心Consul 63
2.6 本章小结 65

第3章 【实例】SSO授权认证系统
——用“Spring Security + Spring Cloud Gateway”构建OAuth 2.0授权认证服务 66
3.1 功能概述 67
3.2 系统设计 67
3.2.1 OAuth 2.0授权认证流程 67
3.2.2 系统结构设计 70
3.2.3 数据库设计 71
3.3 【步骤1】构建Spring Cloud授权认证微服务 75
3.3.1 创建Spring Cloud微服务工程 75
3.3.2 将Spring Cloud微服务注入服务注册中心Consul 77
3.3.3 集成JDBC数据源,以访问MySQL数据库 77
3.3.4 构建OAuth 2.0授权认证微服务 79
3.3.5 开发调用资源微服务的FeignClient代码 88
3.3.6 开发授权认证的自定义登录界面 93
3.4 【步骤2】构建Spring Cloud资源微服务 96
3.4.1 创建Spring Cloud微服务工程 96
3.4.2 将Spring Cloud微服务注入Consul 98
3.4.3 集成MyBatis框架,以访问MySQL数据库 98
3.4.4 构建OAuth 2.0资源微服务 99
3.4.5 实现“用户受保护信息查询”的业务逻辑 102
3.5 【步骤3】搭建基于Spring Cloud Gateway的服务网关 115
3.5.1 认识微服务网关 115
3.5.2 了解常见的服务网关组件 116
3.5.3 服务网关的具体构建 117
3.5.4 添加安全认证机制 118
3.6 【步骤4】演示OAuth 2.0授权认证流程 120
3.6.1 编写注册Client端系统的SQL语句 120
3.6.2 演示用户授权认证登录的过程 121
3.6.3 通过微服务网关访问OAuth资源微服务 124
3.7 本章小结 124

第4章 【实例】车辆电子围栏系统
——用“PostgreSQL + PostGis”实现电子围栏服务,并利用配置中心管理微服务
的多环境配置信息 125
4.1 功能概述 126
4.2 系统设计 126
4.2.1 系统结构设计 126
4.2.2 数据库设计 127
4.3 【步骤1】构建Spring Cloud微服务工程代码 130
4.3.1 搭建“PostgreSQL + PostGIS”数据库环境 130
4.3.2 创建Spring Cloud微服务工程 131
4.3.3 将Spring Cloud微服务注入Consul 133
4.3.4 集成MyBatis,以访问PostgreSQL数据库 134
4.3.5 通过MyBatis-Plus简化MyBatis的操作 135
4.4 【步骤2】实现微服务的业务逻辑 137
4.4.1 定义服务接口层(Controller层) 137
4.4.2 开发业务层(Service层)代码 149
4.4.3 开发MyBatis持久层(Dao层)组件 165
4.5 【步骤3】演示电子围栏微服务的简单操作 173
4.5.1 通过地图工具,定义电子围栏的GeoJson信息 173
4.5.2 演示电子围栏微服务的简单操作 174
4.6 【步骤4】使用Spring Cloud ConfigServer配置中心 179
4.6.1 构建Spring Cloud ConfigServer配置中心微服务 179
4.6.2 将微服务接入Config配置中心 181
4.6.3 利用配置中心管理微服务的多环境配置 183
4.7 本章小结 184

第5章 【实例】电子钱包系统
——用“Feign + Ribbon + Hystrix + Vue.js + Docker”实现微服务的
“负载调用 + 熔断降级 + 部署” 185
5.1 功能概述 186
5.2 系统设计 186
5.2.1 系统流程设计 187
5.2.2 系统结构设计 188
5.2.3 数据库设计 189
5.3 【步骤1】构建Spring Cloud微服务工程代码 191
5.3.1 创建Spring Cloud微服务工程 191
5.3.2 将Spring Cloud微服务注入Consul 192
5.3.3 集成MyBatis,以访问MySQL数据库 193
5.3.4 通过MyBatis-Plus简化MyBatis的操作 193
5.4 【步骤2】实现微服务的业务逻辑 194
5.4.1 定义服务接口层(Controller层) 194
5.4.2 开发业务层(Service层)的代码 202
5.4.3 开发MyBatis持久层(Dao层)组件 220
5.5 【步骤3】集成“Feign + Ribbon + Hystrix”实现微服务的“远程通信 + 负载调用 + 熔断降级” 225
5.5.1 集成微服务通信组件“Feign + Ribbon” 226
5.5.2 开发调用“支付微服务”的FeignClient客户端代码 226
5.5.3 微服务熔断降级的概念 230
5.5.4 集成Hystrix实现微服务的熔断降级 231
5.5.5 测试Hystrix熔断降级的生效情况 234
5.6 【步骤4】基于Vue.js开发电子钱包微服务的充值界面 238
5.6.1 认识Vue.js 238
5.6.2 搭建Node.js环境 238
5.6.3 创建电子钱包微服务的Vue.js前端工程 239
5.6.4 编写电子钱包微服务的前端功能 241
5.6.5 测试“电子钱包充值”前后端交互流程 246
5.7 【步骤5】用Docker部署Spring Cloud微服务 248
5.7.1 认识Docker 249
5.7.2 利用Dockerfile文件构建微服务镜像 250
5.7.3 创建docker-compose.yml文件 252
5.7.4 通过Docker容器化部署微服务 254
5.8 本章小结 255

第6章 【实例】支付系统
——用“Redis分布式锁 + Mockito”实现微服务场景下的“支付逻辑 + 代码测试” 256
6.1 功能概述 257
6.2 系统设计 257
6.2.1 支付流程设计 258
6.2.2 系统结构设计 260
6.2.3 数据库设计 261
6.3 【步骤1】构建Spring Cloud微服务工程代码 264
6.3.1 创建Spring Cloud微服务工程 264
6.3.2 将Spring Cloud微服务注入Consul 265
6.3.3 集成MyBatis,以访问MySQL数据库 266
6.3.4 通过MyBatis-Plus简化MyBatis的操作 266
6.4 【步骤2】实现基于Redis的分布式锁 267
6.4.1 配置Redis服务 267
6.4.2 集成Redis客户端访问组件 268
6.4.3 理解Redis分布式锁的原理 269
6.4.4 实现Redis分布式锁的客户端代码 271
6.5 【步骤3】实现微服务的业务逻辑 273
6.5.1 定义服务接口层(Controller层) 273
6.5.2 开发业务层(Service层)代码 281
6.5.3 开发MyBatis持久层(Dao层)组件 292
6.6 【步骤4】接入“支付宝”渠道 298
6.6.1 申请支付宝沙箱环境 298
6.6.2 开发接入支付宝支付的代码 300
6.6.3 测试“支付宝电脑网页支付”接口 303
6.6.4 测试支付宝“渠道支付结果通知”的逻辑 306
6.7 【步骤5】进行Spring Cloud 微服务代码单元测试 307
6.7.1 认识单元测试 307
6.7.2 开发Mockito单元测试代码 308
6.8 本章小结 312

第7章 【实例】A/B测试系统
——用“Spring Boot Starter机制 + Caffeine缓存”实现A/B流量切分 313
7.1 功能概述 314
7.2 系统设计 314
7.2.1 系统流程设计 314
7.2.2 系统结构设计 316
7.2.3 数据库设计 317
7.3 【步骤1】构建Spring Cloud微服务工程代码 319
7.3.1 创建Spring Cloud微服务工程 320
7.3.2 将Spring Cloud微服务注入Consul 321
7.3.3 集成MyBatis,以访问MySQL数据库 322
7.3.4 通过MyBatis-Plus简化MyBatis的操作 323
7.4 【步骤2】集成高性能本地缓存Caffeine 323
7.4.1 引入Caffeine的依赖 324
7.4.2 开发Caffeine的配置类代码 324
7.4.3 演示Caffeine的使用效果 326
7.5 【步骤3】实现微服务的业务逻辑 329
7.5.1 定义服务接口层(Controller层) 329
7.5.2 开发业务层(Service层)的代码 345
7.5.3 开发MyBatis持久层(Dao层)组件 366
7.6 【步骤4】基于Spring Boot Starter方式编写“接入SDK” 374
7.6.1 创建Spring Boot Starter工程代码 374
7.6.2 开发“接入SDK”的代码 376
7.7 【步骤5】接入A/B测试微服务,实现灰度发布 385
7.7.1 创建A/B测试接入方微服务示例工程代码 385
7.7.2 通过接口调用的方式创建A/B测试 386
7.7.3 开发A/B测试代码,实现灰度流量切分 388
7.8 本章小结 394

第8章 【实例】分布式任务调度系统
——用“ZooKeeper + ElasticJob”处理分布式任务 395
8.1 功能概述 396
8.2 【步骤1】构建分布式任务调度系统 396
8.2.1 认识分布式任务调度框架ElasticJob 396
8.2.2 搭建ZooKeeper分布式协调服务 398
8.2.3 部署ElasticJob的Console管理控制台 400
8.3 【步骤2】实现Spring Cloud微服务分布式任务处理 403
8.3.1 创建Spring Cloud微服务工程 403
8.3.2 编写ElasticJob的“接入SDK” 405
8.3.3 定义微服务分布式任务 412
8.4 本章总结 415

第9章 搭建微服务DevOps发布系统
——用“GitLab + Harbor + Kubernetes”构建Spring Cloud微服务CI/CD自动化
发布体系 416
9.1 CI/CD概述 417
9.2 了解DevOps发布系统的设计流程 418
9.3 【基础知识1】GitLab代码仓库 419
9.3.1 部署GitLab代码仓库 419
9.3.2 配置GitLab 邮箱通知 422
9.3.3 设置GitLab的 CI/CD功能 424
9.3.4 安装Maven及Docker环境 430
9.4 【基础知识2】Docker镜像仓库 430
9.4.1 Docker镜像简介 431
9.4.2 选择Docker镜像仓库 431
9.4.3 部署Harbor私有镜像仓库 432
9.5 【基础知识3】Kubernetes容器编排技术 436
9.5.1 Kubernetes简介 437
9.5.2 搭建Kubernetes集群 438
9.5.3 Kubernetes的技术原理 453
9.6 自动化发布Spring Cloud微服务 457
9.6.1 创建Spring Cloud微服务的示例工程 457
9.6.2 配置Spring Cloud项目的Docker打包插件 459
9.6.3 准备GitLab CI/CD 服务器的Kubernetes环境 461
9.6.4 编写Kubernetes的发布部署文件 462
9.6.5 定义Spring Cloud微服务的GitLab CI/CD流程 464
9.6.6 将微服务应用自动发布到Kubernetes集群中 466
9.7 本章小结 469

第10章 搭建微服务监控系统
——用“Prometheus + Grafana + SkyWalking”实现度量指标监控及分布式链路追踪 470
10.1 认识监控系统 471
10.1.1 监控对象及分层 471
10.1.2 常见的监控指标及类型 472
10.1.3 主流的监控系统及选型 475
10.2 【实战】构建微服务度量指标监控系统 477
10.2.1 认识Prometheus 477
10.2.2 【步骤1】部署Prometheus Operator 481
10.2.3 【步骤2】演示Prometheus的Metrics(度量指标)监控效果 484
10.2.4 【步骤3】部署Grafana可视化监控系统 487
10.2.5 【步骤4】将Spring Cloud 微服务接入Prometheus 489
10.2.6 【步骤6】使用ServiceMonitor管理监控目标 510
10.2.7 【步骤7】构建基于Grafana的可视化监控界面 513
10.3 【实战】构建微服务分布式链路追踪系统 517
10.3.1 认识分布式链路追踪 518
10.3.2 认识SkyWalking 520
10.3.3 【步骤1】部署SkyWalking 521
10.3.4 【步骤2】将Spring Cloud微服务接入SkyWalking 527
10.3.5 【步骤3】通过SkyWalking UI追踪分布式链路 535
10.4 本章小结 537

读者评论

相关博文

  • 从微服务架构的现状和未来看学习路径

    从微服务架构的现状和未来看学习路径

    博文小编 2021-12-07

    【本文原创:姜桥(无敌码龙)】 在当今的互联网系统架构中,微服务已然成为整个服务端系统架构的标配,但不同的公司由于发展阶段、规模及历史现状的不同,所以在具体的实现路径及形态上一般会有所差别。 一般来说,对于新生的创业公司来说,由...

    博文小编 2021-12-07
    440 0 0 0

相关图书

Linux从入门到精通

张启玉 (作者)

本书以CentOS 7.8为演示系统,以阿里云为演示服务器,从Linux常用命令入手,从一毕业就要入职公司的上手要求出发,重实战、轻原理,目的就是要带领读者从一...

 

Knative最佳实践

Jacques Chester (作者) 赵吉壮 杨云锋 (译者)

本书主要围绕 Knative 进行展开,主要作者是 Knative 专家(社区作者)Jacques Chester ,先后从 Knative 构建、扩缩容、事件...

¥118.00

看漫画学Python 2:有趣、有料、好玩、好用(全彩进阶版)

关东升 ,赵大羽 (作者)

本书是《看漫画学Python》的进阶版本,继续秉承有趣、有料、好玩、好用的理念,并继续采用《看漫画学Python》一书中3个不同的漫画人物角色,通过这3个角色之...

 

ATT&CK框架实践指南

过去,入侵检测能力的度量是个公认的行业难题,各个企业得安全负责人每年在入侵防护上都投入大量费用,但几乎没有人能回答CEO 的问题:“买了这么多产品,我们的入侵防...

¥148.00

云原生数据库:原理与实践

周恩昌 (作者)

本书详细剖析了作为核心基础软件系统的数据库在云计算时代的技术演进历程,从架构设计、实现机制和系统优化等多个角度阐述传统数据库技术是如何一步步发展到云原生形态的。...

¥99.00

SequoiaDB分布式数据库权威指南

黄达玮 (作者)

本书旨在介绍 SequoiaDB 巨杉数据库的基本概念、应用场景、企业级应用案例、数据库实例创建与管理方式、数据库集群管理的基本策略、以及性能调优和问题诊断。...

¥99.00