
本书覆盖了微服务架构的主要技术点,包括分布式服务治理、分布式配置管理、分布式流量防护、分布式事务处理、分布式消息处理、分布式网关、分布式链路追踪、分布式Job、分库分表、读写分离、分布式缓存、服务注册/订阅路由、全链路蓝绿发布和灰度发布。在讲解这些技术点,采用“是什么→怎么用→什么原理(源码解析)”的主线来讲解。为了方便读者在企业中落地Spring Cloud Alibaba项目,本书还包括几个相对完整的项目实战:全链路日志平台、中台架构、数据迁移平台、业务链路告警平台。本书的目标是:①让读者在动手中学习,而不是“看书时好像全明白了,一动手却发现什么都不会”;②读者可以掌握微服务全栈技术,而不仅仅是Spring Cloud Alibaba框架,对于相关的技术(Seata、RocketMQ),基本都是从零讲起,这样避免了读者为了学会微服务技术,得找Spring Cloud Alibaba的书、Seata的书、RocketMQ的书……本书是一站式解决方案。
在写这本书之前,我先后在两家杭州的“独角兽”公司担任技术负责人,并负责推进公司核心业务的“中台化”改造。在落地业务中台和技术中台的过程中,我督促并指导开发人员统一使用Spring Cloud Alibaba作为中台服务最底层的基础框架。为了快速推进业务服务Spring Cloud Alibaba化的进度,我冲在业务的第一线,收集和整理开发人员在使用Spring Cloud Alibaba过程中反馈的技术问题,并提供有效的技术解决方案,直至项目落地。 我每周都会做技术复盘,通过分析大量的问题总结出一个结论:开发人员反馈的问题大部分都是由于Spring Cloud Alibaba使用不合理所造成的。也就是说,很多开发人员并不了解Spring Cloud Alibaba的原理及如何落地实践。于是,我就产生了把我这几年落地Spring Cloud Alibaba的经验通过图书的方式输出的想法。 ★ 1. 本书特色 本书聚焦于Spring Cloud Alibaba微服务架构实战,全面分析了基于Spring Cloud Alibaba的微服务架构全栈技术原理。本书有如下特色: (1)技术新。 Spring Cloud Alibaba是一个将Spring Cloud“阿里巴巴化”的微服务架构框架,它具备Spring Cloud 所有的能力,并添加了Nacos、Dubbo、RocketMQ等 Spring Cloud不具备的微服务架构能力。简单来说就是:搭建微服务架构,使用Spring Cloud ALibaba比使用Spring Cloud 更高效,更简单,开发的技术成本更低。 本书中所有代码采用Spring Cloud Alibaba目前的最新版本(2.2. 5.RELEASE)来编写,与Spring Cloud Alibaba相关的微服务技术(Seata、RocketMQ等)也采用的是目前最新的稳定版本。 (2)精心设计的主线:零基础入门,循序渐进,直至项目实战。 本书精心研究了程序类、架构类知识的认知规律,全书总共分为五个部分:入门篇、基础篇、中级篇、高级篇及项目实战篇,设计了一条相对科学的主线“它是什么→怎么搭建基础开发环境→怎么进行单项技术开发→怎么完成一个完整的项目”,让读者快速从“菜鸟”向微服务架构实战高手迈进。 (3)不只介绍Spring Cloud Alibaba框架本身,而是微服务架构全栈技术。 有的同类书只介绍Spring Cloud Alibaba框架本身,假定读者对支撑Spring Cloud Alibaba微服务架构相关技术(比如Seata、Skywalking、Redis、RocketMQ等)是了解的。这样就会存在一个问题——为了学会微服务技术,得找Spring Cloud Alibaba的书、Seata的书、RocketMQ的书……而这恰恰是难点所在——“怎样将它们平滑地衔接起来学习”。一只鸡所有的毛都有,可拼出一只鸡并不是容易的事。 本书是以“实现完整的Spring Cloud Alibaba微服务架构”为目标,为了这个目标,除介绍Spring Cloud Alibaba这个“主角”外,对于支撑Spring Cloud Alibaba微服务架构的技术(比如Seata、Skywalking、Redis、RocketMQ等)也基本都是从零讲起,保证读者能够平滑地学习。本书是“一站到底”的解决方案:读者读者只需从这里上车,中途无需转乘,读者需要什么本书就提供什么,直达终点。 (4)绘制了大量的图,便于理解原理、架构、流程。 一图胜千文,书中在涉及原理、架构、流程的地方都尽量配有插图,以便读者有直观的理解。 (5)实战性强。 本书介绍了大量的实战案例,能让读者“动起来”,在实践中体会功能,而不只是一种概念上的理解。 在讲解每一个知识模块时,我们都在思考:在这个知识模块中,哪些是读者必须实现的“标准动作”(实例);哪些“标准动作”是可以先完成的,以求读者能快速有一个感知;哪些“标准动作”是有一定难度,需要放到后面完成的。读者在跟随书中实例一个个实践之后,再去理解那些抽象的概念和原理就是水道渠成了。 本书的目标之一是,让读者在动手中学习,而不是“看书时好像全明白了,一动手却发现什都不会”。本书相信“知行合一”理念,不是“只知,而无行”,避免眼高手低。 (6)深入剖析原理。 本书以系统思维的方式,从业务功能视角剖析微服务架构中技术的底层原理,使读者具备快速阅读新框架源码的能力。只有具备了这种功能。才能让读者举一反三,实现更复杂的功能,应对更加复杂的应用场景。 (7)采用真实项目,实现“从树木到森林”的突破。 本书的“项目实战篇”是从架构、代码和业务的视角,在真实项目中验证“Spring Cloud Alibaba微服务架构”的架构方法论及核心技术原理,让读者有身临生产级场景的感觉。 (8)衔接运维,一键部署。 本书中所有的技术框架都有详细的“搭建技术框架运维环境的步骤”,读者只需要按照本书的安装步骤,就可以快速搭建运维环境,从而在本地环境中快速运行本书的实例。 (9)干货丰富,知识的“巨无霸”。 本书共分为上、下两册,总计18章,近1000页,内容非常丰富,算得上是相关领域图书中的“巨无霸”。 ★ 2. 阅读本书,你能学到什么 -掌握Spring Cloud Alibaba的核心原理及微服务架构项目实战经验; -掌握Nacos注册中心和配置中心的核心原理及微服务架构项目实战经验; -掌握Sentinel的核心原理及微服务架构项目实战经验; -掌握Seata的核心原理及微服务架构项目实战经验; -掌握RocketMQ的核心原理及微服务架构项目实战经验; -掌握Skywalking的核心原理及微服务架构项目实战经验; -掌握Elastic Job的核心原理及微服务架构项目实战经验; -掌握ShardingSphere的核心原理及微服务架构项目实战经验; -掌握Spring Cloud Gateway的核心原理及微服务架构项目实战经验; -掌握分布式缓存Redis的集群管理和分布式锁的原理及微服务架构项目实战经验; -掌握Discovery的核心原理及微服务架构项目实战经验; -掌握在业务中台和技术中台中落地“基于Spring Cloud Alibaba微服务架构”的项目实战经验; -掌握在微服务架构中“基于DataX的异构数据迁移”的项目实战经验; -掌握在微服务架构中“基于Skywalking的链路告警平台”的项目实战经验; -掌握在微服务架构中“基于ELK和Sywalking的全链路日志平台”的项目实战经验。 ★ 3. 读者对象 本书读者对象如下: 初学Java的自学者; 培训机构的老师和学员; 软件开发工程师; 高等院校计算机相关专业学生; Java语言中高级开发人员; Spring Cloud Alibaba初学者; 编程爱好者; DevOps运维人员; 中间件爱好者; 技术总监; 技术经理; 其他对Spring Cloud Alibaba感兴趣的IT人员。
★入门篇 第1章 进入Spring Cloud Alibaba的世界 /2 1.1 了解微服务架构 /2 1.1.1 单体架构与微服务架构的区别 /2 1.1.2 分布式架构与微服务架构的区别 /6 1.2 如何构建微服务架构 /8 1.2.1 构建微服务架构的目标 /8 1.2.2 构建微服务架构的关键点 /8 1.3 认识Spring Cloud Alibaba /11 1.4 学习Spring Cloud Alibaba的建议 /12 1.4.1 熟悉Spring Boot /12 1.4.2 熟悉Spring Cloud /13 1.4.3 Spring Cloud Alibaba的版本演进 /14 1.5 Spring Cloud Alibaba与Spring Cloud的关系 /15 1.6 搭建基础环境 /16 1.6.1 安装Maven /16 1.6.2 熟悉Git /18 第2章 熟用开发工具 /19 2.1 安装开发工具IntelliJ IDEA /19 2.2 【实例】用Spring Cloud Alibaba开发一个RESTful API服务 /20 2.3 了解Spring Framework官方开发工具STS /24 2.4 了解Spring Framework官方脚手架工具 /25 ★基础篇 第3章 Spring Cloud Alibaba基础实战 /28 3.1 Spring Cloud Alibaba“牛刀小试” /28 3.1.1 【实例】实现乐观锁 /28 3.1.2 【实例】实现多数据源 /32 3.1.3 【实例】实现SQL语句中表名的动态替换 /35 3.2 【实例】用Maven和Spring Cloud Alibaba实现多环境部署 /36 3.2.1 初始化 /37 3.2.2 多环境配置 /37 3.2.3 构建 /38 3.2.4 效果演示 /41 3.3 【实例】用“MyBatis-Plus + Spring Cloud Alibaba”实现多租户架构 /42 3.3.1 多租户的概念 /42 3.3.2 多租户的原理 /42 3.3.3 架构 /44 3.3.4 搭建及效果演示 /46 第4章 分布式服务治理——基于Nacos /48 4.1 认识分布式服务治理 /48 4.1.1 什么是分布式服务治理 /48 4.1.2 为什么需要分布式服务治理 /49 4.2 了解主流的注册中心 /50 4.2.1 Nacos /50 4.2.2 ZooKeeper /51 4.2.3 Consul /52 4.2.4 Sofa /53 4.2.5 Etcd /53 4.2.6 Eureka /54 4.2.7 对比Nacos、ZooKeeper、Sofa、Consul、Etcd和Euraka /54 4.3 将应用接入Nacos 注册中心 /55 4.3.1 【实例】用“Nacos Client + Spring Boot”接入 /55 4.3.2 【实例】用Spring Cloud Alibaba Discovery接入 /57 4.4 用“NacosNamingService类 + @EnableDiscoveryClient”实现服务的注册/订阅 /59 4.4.1 服务注册的原理 /59 4.4.2 服务订阅的原理 /69 4.4.3 【实例】通过服务幂等性设计验证服务的注册/订阅 /74 4.5 用“Ribbon + Nacos Client”实现服务发现的负载均衡 /82 4.5.1 为什么需要负载均衡 /82 4.5.2 【实例】用“Ribbon + Nacos Client”实现负载均衡 /83 4.6 用CP模式和AP模式来保持注册中心的数据一致性 /88 4.6.1 了解CAP理论 /88 4.6.2 了解Nacos的CP模式和AP模式 /89 4.6.3 了解Raft与Soft-Jraft /90 4.6.4 Nacos注册中心AP模式的数据一致性原理 /91 4.6.5 Nacos注册中心CP模式的数据一致性原理 /96 4.6.6 【实例】用持久化的服务实例来验证注册中心的数据一致性 /104 4.7 用缓存和文件来存储Nacos的元数据 /106 4.7.1 认识Nacos的元数据 /106 4.7.2 用缓存存储Nacos的元数据 /108 4.7.3 用文件存储Nacos的元数据 /110 4.7.4 【实例】用Spring Cloud Alibaba整合Nacos和Dubbo的元数据 /111 4.8 用Nacos Sync来实现应用服务的数据迁移 /114 4.8.1 为什么要进行应用服务的数据迁移 /115 4.8.2 如何完成应用服务的数据迁移 /116 4.8.3 【实例】将Eureka注册中心中的应用服务数据迁移到Nacos注册中心中 /117 第5章 分布式配置管理——基于Nacos /122 5.1 认识分布式配置管理 /122 5.1.1 什么是分布式配置管理 /122 5.1.2 为什么需要分布式配置管理 /123 5.2 了解主流的配置中心 /124 5.2.1 Nacos /124 5.2.2 Spring Cloud Config /126 5.2.3 Apollo /127 5.2.4 对比Nacos、Spring Cloud Config、Apollo和Disconf /127 5.3 将应用接入Nacos配置中心 /128 5.3.1 接入方式 /128 5.3.2 认识Nacos配置中心的配置信息模型 /128 5.3.3 了解NacosConfigService类 /129 5.3.4 【实例】用Nacos Client接入应用 /129 5.3.5 【实例】用Open API接入应用 /132 5.3.6 【实例】用Spring Cloud Alibaba Config接入应用 /134 5.4 用HTTP协议和gRPC框架实现通信渠道 /137 5.4.1 什么是gRPC /137 5.4.2 “用HTTP实现Nacos Config通信渠道”的原理 /137 5.4.3 “用‘长轮询 + 注册监听器’机制将变更之后的配置信息同步到应用”的原理 /141 5.4.4 “用gRPC框架实现客户端与Nacos Config Server之间通信渠道”的原理 /148 5.4.5 【实例】用“采用gRPC通信渠道的Nacos Config”实现配置数据的动态更新 /151 5.5 用“Sofa-Jraft + Apache Derby”保证配置中心的数据一致性 /152 5.5.1 Nacos配置中心的数据一致性原理 /153 5.5.2 【实例】用“切换所连接的Nacos节点”验证数据一致性 /159 5.6 用数据库持久化配置中心的数据 /161 5.6.1 为什么需要持久化 /161 5.6.2 持久化的基础配置 /162 5.6.3 持久化的原理 /162 5.6.4 【实例】用“配置信息的灰度发布”验证持久化 /165 5.7 用“Spring Cloud Alibaba Config + Nacos Config”实现配置管理(公共配置、应用配置和扩展配置) /168 5.7.1 “按照优先级加载属性”的原理 /168 5.7.2 【实例】验证公共配置、应用配置和扩展配置的优先级顺序 /172 第6章 分布式流量防护——基于Sentinel /175 6.1 认识分布式流量防护 /175 6.1.1 什么是分布式流量防护 /175 6.1.2 为什么需要分布式流量防护 /177 6.2 认识Sentinel /179 6.3 将应用接入Sentinel /180 6.3.1 搭建Sentinel控制台 /180 6.3.2 【实例】用Sentinel Core手动地将应用接入Sentinel /181 6.3.3 【实例】用Spring Cloud Alibaba Sentinel将应用接入Sentinel /183 6.4 用HTTP或者Netty实现通信渠道 /184 6.4.1 认识NIO框架Netty /184 6.4.2 用SPI机制实现插件化通信渠道的原理 /184 6.4.3 “用插件类NettyHttpCommandCenter实现通信渠道”的原理 /189 6.4.4 “用SimpleHttpCommandCenter类实现通信渠道”的原理 /192 6.4.5 【实例】用Netty实现通信渠道,实现“从应用端到Sentinel控制台的流量控制规则推送” /196 6.5 用过滤器和拦截器实现组件的适配 /198 6.5.1 什么是过滤器和拦截器 /198 6.5.2 “Sentinel通过过滤器适配Dubbo”的原理 /199 6.5.3 “Sentinel通过拦截器适配Spring MVC”的原理 /203 6.5.4 【实例】将Spring Cloud Gateway应用接入Sentinel,管理流量控制规则 /206 6.6 用“流量控制”实现流量防护 /208 6.6.1 什么是流量控制 /208 6.6.2 槽位(Slot)的动态加载机制 /210 6.6.3 “加载应用运行的监控指标”的原理 /214 6.6.4 “用QPS/并发线程数实现流量控制”的原理 /216 6.6.5 “用调用关系实现流量控制”的原理 /222 6.6.6 【实例】通过控制台实时地修改QPS验证组件的流量防控 /224 6.7 用“熔断降级”实现流量防护 /227 6.7.1 什么是熔断降级 /227 6.7.2 “实现熔断降级”的原理 /228 6.7.3 【实例】用“模拟Dubbo服务故障”验证服务调用熔断降级的过程 /235 6.8 用“系统自适应保护”实现流量防护 /239 6.8.1 什么是“系统自适应保护” /239 6.8.2 “系统自适应保护”的原理 /240 6.8.3 【实例】通过调整应用服务的入口流量和负载,验证系统自适应保护 /243 6.9 用Nacos实现规则的动态配置和持久化 /247 6.9.1 为什么需要“规则的动态配置” /247 6.9.2 为什么需要“规则的持久化” /248 6.9.3 “规则的动态配置”的原理 /248 6.9.4 “规则的持久化”的原理 /255 6.9.5 【实例】将Dubbo应用接入Sentinel,实现规则的动态配置和持久化 /257 ★中级篇 第7章 分布式事务处理——基于Seata /264 7.1 认识分布式事务 /264 7.1.1 什么是分布式事务 /264 7.1.2 为什么需要分布式事务 /267 7.2 认识Seata /268 7.2.1 Seata的基础概念 /268 7.2.2 Seata的事务模式 /269 7.3 将应用接入Seata /274 7.3.1 搭建Seata Server的高可用环境 /274 7.3.2 【实例】使用seata-spring-boot-starter将应用接入Seata /279 7.3.3 【实例】使用Spring Cloud Alibaba 将应用接入Seata /282 7.4 用Netty实现客户端与服务器端之间的通信渠道 /284 7.4.1 “用Netty实现通信渠道的服务器端”的原理 /284 7.4.2 “用Netty实现通信渠道的客户端”的原理 /289 7.5 用拦截器和过滤器适配主流的RPC框架 /295 7.5.1 “用过滤器适配Dubbo”的原理 /295 7.5.2 “用拦截器适配gRPC”的原理 /297 7.6 用AT模式实现分布式事务 /299 7.6.1 “用数据源代理实现AT模式的零侵入应用”的原理 /299 7.6.2 “用全局锁实现AT模式第二阶段的写隔离”的原理 /304 7.6.3 【实例】搭建Seata的AT模式的环境,并验证AT模式的分布式事务 场景 /317 7.7 用TCC模式实现分布式事务 /327 7.7.1 用GlobalTransactionScanner类扫描客户端,开启TCC动态代理 /327 7.7.2 用拦截器TccActionInterceptor校验TCC事务 /330 7.7.3 【实例】搭建Seata的TCC模式的环境,并验证TCC模式的分布式事务场景 /332 7.8 用XA模式实现分布式事务 /343 7.8.1 “用数据源代理实现XA模式的零侵入应用”的原理 /343 7.8.2 用XACore类处理XA模式的事务请求 /350 7.8.3 【实例】搭建Seata的XA模式的客户端运行环境,并验证XA模式的 分布式事务回滚的效果 /353 7.9 用Saga模式实现分布式事务 /362 7.9.1 “用状态机实现Saga模式”的原理 /363 7.9.2 【实例】搭建Seata的Saga模式的客户端运行环境,并验证Saga模式的分布式事务场景 /367 第8章 分布式消息处理——基于RocketMQ /374 8.1 消息中间件概述 /374 8.1.1 什么是消息中间件 /374 8.1.2 为什么需要消息中间件 /375 8.1.3 认识RocketMQ /376 8.2 搭建RocketMQ的运行环境 /379 8.2.1 了解RocketMQ的安装包 /379 8.2.2 搭建单Master的单机环境 /380 8.2.3 搭建多Master的集群环境 /380 8.2.4 搭建单Master和单Slave的集群环境 /382 8.2.5 搭建Raft集群环境 /384 8.2.6 【实例】用RocketMQ Admin控制台管控RocketMQ /386 8.3 将应用接入RocketMQ /386 8.3.1 【实例】用rocketmq-spring-boot-starter框架将应用接入RocketMQ /387 8.3.2 【实例】用spring-cloud-starter-stream-rocketmq框架将应用接入 RocketMQ /389 8.4 用Netty实现RocketMQ的通信渠道 /392 8.4.1 用NettyRemotingClient类实现客户端的通信渠道 /393 8.4.2 用NettyRemotingServer类实现服务器端的通信渠道 /395 8.5 用“异步”“同步”和“最多发送一次”模式生产消息 /400 8.5.1 用“异步”模式生产消息的原理 /400 8.5.2 用“同步”模式生产消息的原理 /403 8.5.3 用“最多发送一次”模式生产消息的原理 /405 8.5.4 【实例】在Spring Cloud Alibaba项目中生产同步消息和异步消息 /407 8.6 用Push模式和Pull模式消费消息 /410 8.6.1 “用Push模式消费消息”的原理 /410 8.6.2 “用Pull模式消费消息”的原理 /421 8.6.3 【实例】生产者生产消息,消费者用Pull模式和Push模式消费消息 /431 8.7 用两阶段提交和定时回查事务状态实现事务消息 /437 8.7.1 什么是事务消息 /437 8.7.2 两阶段提交的原理 /437 8.7.3 定时回查事务状态的原理 /447 8.7.4 【实例】在Spring Cloud Aliaba项目中生产事务消息 /451 第9章 分布式网关——基于Spring Cloud Gateway /456 9.1 认识网关 /456 9.1.1 什么是网关 /456 9.1.2 为什么需要网关 /457 9.1.3 认识Spring Cloud Gateway /460 9.2 用Reactor Netty实现 Spring Cloud Gateway的通信渠道 /463 9.2.1 什么是Reactor Netty /463 9.2.2 “用过滤器代理网关请求”的原理 /466 9.3 用“路由规则定位器”(RouteDefinitionLocator)加载网关的路由规则 /473 9.3.1 “基于注册中心的路由规则定位器”的原理 /473 9.3.2 “基于内存的路由规则定位器”的原理 /477 9.3.3 “基于Redis缓存的路由规则定位器”的原理 /479 9.3.4 “基于属性文件的路由规则定位器”的原理 /480 9.3.5 【实例】用“基于注册中心和配置中心的路由规则定位器”在网关统一暴露API /481 9.4 用“Redis + Lua”进行网关API的限流 /487 9.4.1 “网关用Redis + Lua实现分布式限流”的原理 /487 9.4.2 【实例】将Spring Cloud Alibaba应用接入网关,用“Redis +Lua”进行限流 /494 ★高级篇 第10章 分布式链路追踪——基于Skywalking /500 10.1 认识分布式链路追踪 /500 10.1.1 什么是分布式链路追踪 /500 10.1.2 认识Skywalking /502 10.2 搭建Skywalking环境 /505 10.2.1 搭建单机环境 /505 10.2.2 搭建集群环境 /507 10.3 用Java Agent将Spring Cloud Alibaba应用接入Skywalking 10.3.1 什么是Java Agent /511 10.3.2 “Skywalking使用Java Agent零侵入应用”的原理 /513 10.3.3 【实例】将“基于Spring Cloud Alibaba的服务消费者和订阅者”接入Skywalking /517 10.4 用ModuleProvider和ModuleDefine将Skywalking的功能进行模块化设计 10.4.1 为什么需要模块化设计 /520 10.4.2 Skywalking模块化设计的原理 /522 10.4.3 Skywalking启动的原理 /529 10.5 用HTTP、gRPC和Kafka实现“应用与Skywalking之间的通信渠道” 10.5.1 “基于HTTP实现通信渠道”的原理 /532 10.5.2 “基于gRPC实现通信渠道”的原理 /535 10.5.3 “基于Kafka实现通信渠道”的原理 /541 10.5.4 【实例】搭建Kafka环境,并用异步通信渠道Kafka收集基于Spring Cloud Alibaba应用的运行链路指标数据 /549 10.6 用“注册中心”保证集群的高可用 /551 10.6.1 为什么需要注册中心 /551 10.6.2 “用注册中心保证集群高可用”的原理 /553 10.7 用“分布式配置中心”动态加载集群的配置信息 /558 10.7.1 为什么需要分布式配置中心 /558 10.7.2 “用配置中心动态加载集群配置信息”的原理 /559 10.7.3 【实例】用配置中心动态地修改告警规则 /565 10.8 用探针采集链路追踪数据 /569 10.8.1 什么是探针 /569 10.8.2 Dubbo探针的原理 /570 10.8.3 “Skywalking用探针来增强应用代码”的原理 /573 10.8.4 【实例】模拟Dubbo服务故障,用Dubbo探针采集链路追踪数据 10.9 用Elasticsearch存储链路追踪数据 /583 10.9.1 什么是Elasticsearch /583 10.9.2 存储链路追踪指标数据的原理 /584 10.9.3 【实例】将Skywalking集群接入Elasticsearch,并采集Spring Cloud Alibaba应用的链路追踪数据 /595 第11章 分布式Job——基于Elastic Job /598 11.1 认识分布式Job /598 11.1.1 为什么需要分布式Job /598 11.1.2 认识Elastic Job /602 11.2 将应用接入Elastic Job Lite /604 11.2.1 将应用接入Elastic Job Lite的3种模式 /605 11.2.2 搭建Elastic Job Lite的分布式环境 /607 11.2.3 【实例】用Spring Boot Starter将Spring Cloud Alibaba应用接入Elastic Job Lite /608 11.3 “实现Elastic Job Lite的本地Job和分布式Job”的原理 /611 11.3.1 用Quartz框架实现本地Job /611 11.3.2 用ZooKeeper框架实现分布式Job /621 11.3.3 【实例】在Elastic Job控制台中操控分布式Job /625 11.4 “用SPI将Job分片策略插件化”的原理 /627 11.4.1 用SPI工厂类JobShardingStrategyFactory加载分片策略 /628 11.4.2 用ShardingService类触发Job去执行分片策略 /631 11.4.3 【实例】将Spring Cloud Alibaba应用接入带有分片功能的分布式Job /633 11.5 “实现分布式Job的事件追踪”的原理 /636 11.5.1 用基于Guava的事件机制实现分布式Job的事件追踪 /636 11.5.2 用数据库持久化分布式Job的运行状态和日志 /643 11.5.3 【实例】将Spring Cloud Alibaba应用接入Elastic Job,并开启分布式Job的事件追踪 /652 第12章 分库分表和读写分离——基于ShardingSphere 12.1 认识ShardingSphere /655 12.1.1 什么是分布式数据库 /655 12.1.2 什么是ShardingSphere /658 12.2 将应用接入ShardingSphere JDBC /662 12.2.1 用四种模式将应用接入Shardingsphere JDBC /662 12.2.2 【实例】用Spring Boot将应用接入Shardingsphere JDBC并完成分库分表 /665 12.3 “用路由引擎实现分库分表”的原理 /681 12.3.1 绑定分库分表规则和数据库数据源,并初始化路由引擎 /682 12.3.2 拦截SQL语句,并启动路由引擎 /689 12.4 “读写分离”的原理 /703 12.4.1 读取应用配置文件中的数据库据源及读写分离规则 /703 12.4.2 使用ReplicaQuerySQLRouter类的createRouteContext()方法创建读写分离的路由上下文对象RouteContext /704 12.4.3 使用ReplicaQueryRuleSpringbootConfiguration类加载应用的]负载均衡器ReplicaLoadBalanceAlgorithm对象 /706 12.5 用Netty实现Shardingsphere Proxy的通信渠道 /708 12.5.1 “Shardingsphere Proxy通信渠道”的原理 /708 12.5.2 【实例】搭建通信渠道环境,将Spring Cloud Alibaba应用接入Shardingsphere Proxy /711 12.6 “使用SQL解析引擎实现Shardingsphere Proxy分库分表”的原理 12.6.1 为什么需要SQL解析引擎 /715 12.6.2 使用命令设计模式实现SQL语句的路由 /716 12.6.3 “使用MySQLComStmtPrepareExecutor类处理SQL请求”的原理 12.6.4 “使用MySQLComStmtExecuteExecutor类处理SQL请求”的原理 第13章 分布式缓存——基于Redis /741 13.1 认识缓存 /741 13.1.1 什么是本地缓存 /741 13.1.2 什么是分布式缓存 /743 13.1.3 什么是Redis /745 13.1.4 Redis的整体架构 /746 13.2 搭建Redis集群环境 /747 13.2.1 搭建主从环境 /747 13.2.2 搭建Sentinel集群环境 /751 13.2.3 搭建Codis集群环境 /756 13.2.4 搭建Redis Cluster集群环境 /769 13.3 将Spring Cloud Alibaba应用接入Redis /775 13.3.1 【实例】集成spring-boot-starter-data-redis,将Spring Cloud Alibaba应用接入Redis主从环境 /775 13.3.2 【实例】集成redisson-spring-boot-starter,将Spring Cloud Alibaba 应用接入Redis的Sentinel环境 /778 13.3.3 【实例】集成Jedis,将Spring Cloud Alibaba应用接入Redis的Codis集群环境 /782 13.3.4 【实例】集成Lettuce,将Spring Cloud Alibaba应用接入Redis Cluster集群环境 /785 13.4 “用分布式缓存Redis和Redisson框架实现分布式锁”的原理 13.4.1 什么是分布式锁 /789 13.4.2 初始化RedissonClient并连接Redis的服务器端 /791 13.4.3 “用Redisson框架的RedissonLock类实现分布式锁”的原理 13.4.4 【实例】在Spring Cloud Alibaba应用中,验证分布式锁的功能 第14章 服务注册/订阅路由、全链路蓝绿发布和灰度发布——基于Discovery 14.1 认识服务注册/订阅路由、蓝绿发布和灰度发布 /815 14.1.1 什么是服务注册路由、服务订阅路由 /816 14.1.2 什么是蓝绿发布 /816 14.1.3 什么是灰度发布 /817 14.1.4 认识微服务治理框架Discovery /819 14.2 “用插件机制来集成主流的注册中心和配置中心”的原理 /822 14.2.1 集成主流的注册中心 /822 14.2.2 集成主流的配置中心 /827 14.3 “用Open API和配置中心动态变修改规则”的原理 /828 14.3.1 用Open API动态修改规则 /829 14.3.2 用配置中心动态修改规则 /834 14.3.3 【实例】在Spring Cloud Alibaba应用中用Nacos配置中心变更规则,并验证规则动态变更的效果 /839 14.4 “用服务注册/订阅实现服务的路由”的原理 /842 14.4.1 用“服务注册的前置处理和注册监听器”实现基于服务注册的服务路由 /843 14.4.2 用“服务订阅前置处理 + 注册监听器”实现基于服务订阅的服务路由 /849 14.4.3 【实例】在Spring Cloud Alibaba应用中配置服务注册的路由规则 14.4.4 【实例】在Spring Cloud Alibaba应用中配置服务订阅的路由规则 14.5 “用路由过滤器实现全链路的蓝绿发布和灰度发布”的原理 /866 14.5.1 用路由过滤器适配 Spring Cloud Gateway网关 /866 14.5.2 用路由过滤器适配 RESTful API /869 14.5.3 【实例】在Spring Cloud Alibaba应用中配置全链路灰度发布的规则,并验证全链路灰度发布的效果 /871 14.5.4 【实例】在Spring Cloud Alibaba应用中配置全链路蓝绿发布的规则,并验证全链路蓝绿发布的效果 /879 ★项目实战篇 第15章 【项目】全链路日志平台——基于ELK、FileBeat、Kafka、Spring Cloud Alibaba及Skywalking /886 15.1 全链路日志平台整体架构 /886 15.2 搭建环境 /887 15.3 将Spring Cloud Alibaba应用接入全链路日志平台 /890 15.3.1 将微服务接入全链路日志平台 /890 15.3.2 使用全链路日志平台查询业务日志 /891 第16章 【项目】在企业中落地中台架构 /893 16.1 某跨境支付公司中台架构 /893 16.1.1 跨境支付中台架构 /893 16.1.2 跨境支付用户中台架构 /895 16.2 某娱乐直播公司中台架构 /896 16.2.1 泛娱乐直播中台架构 /896 16.2.2 直播用户中台架构 /899 16.3 用“服务双写和灰度发布”来实现中台服务上线过程中的“业务方零停机时间” /902 16.3.1 服务双写架构 /902 16.3.2 服务灰度发布架构 /903 第17章 【项目】异构数据迁移平台——基于DataX /905 17.1 搭建环境 /905 17.1.1 软件环境 /905 17.1.2 搭建MySQL的异构数据迁移环境 /906 17.2 搭建控制台 /909 17.2.1 构建部署包 /909 17.2.2 用部署包搭建后台管理系统datax-admin /910 17.2.3 用部署包搭建任务执行器datax-executor /911 17.2.4 使用可视化控制台执行MySQL异构数据迁移 /911 17.3 在Spring Cloud Alibaba应用中用DataX完成异构数据迁移 第18章 【项目】业务链路告警平台——基于Spring Cloud libaba、Nacos和Skywalking 18.1 告警平台的整体架构设计 /922 18.2 告警服务详细设计 /924 18.2.1 产品化部署设计 /925 18.2.2 Nacos服务健康告警设计 /926 18.2.3 Skywalking链路错误告警设计 /927 18.2.4 Skywalking的指标告警设计 /928 18.2.5 RocketMQ消息堆积告警设计 /928 18.3 分析告警服务的部分源码 /929 18.3.1 用分布式Job类NacosAlarmHealthJob实现Nacos服务健康告警 18.3.2 用分布式Job类SkywalkingErrorAlarmJob实现Skywalking链路错误告警 18.4 将电商微服务接入告警平台,验证告警平台的实时告警功能 /932 18.4.1 启动告警平台的软件环境 /932 18.4.2 在购买商品时,在下单过程中验证实时告警功能 /933 18.4.3 在购买商品时,在支付过程中验证实时告警功能 /936