关于我们
书单推荐
新书推荐
|
Spring Cloud微服务架构实战派 读者对象:本书适合具备Java基础的开发人员、对微服务架构和Spring Cloud感兴趣的读者、了解Spring或Spring Boot的开发人员自学之用。
本书针对Spring Cloud 2.0及以上版本。在编写过程中,不仅考虑到企业任职所需的技能,还考虑到求职面试时可能会遇到的知识点。本书采用“知识点+实例”形式编写,共有“39个基于知识点的实例 + 1个综合性项目”,深入讲解了Spring Cloud的各类组件、微服务架构的解决方案和开发实践,以及容器、Kubernetes和Jenkins等DevOps(开发运维一体化)相关知识。本书的主脉络是:是什么,为什么用,怎样用,为什么要这样用,如何用得更好,有什么最佳的实践。
龙中华,拥有10多年一线企业开发经验。对多种技术有深入了解和研究,致力于用技术为公司业务创造利润。曾在多家公司担任主程序员和系统架构师,现就职于某大数据研究机构,担任技术顾问。
-------------第1篇 入门
- 第1章 进入微服务世界 2 1.1 系统架构的发展阶段 2 |1.1.1 单体应用阶段 2 |1.1.2 垂直应用阶段 3 |1.1.3 分布式系统阶段 4 |1.1.4 服务治理阶段 5 |1.1.5 微服务阶段 6 |1.1.6 服务网格阶段 6 1.2 主流的微服务框架 8 |1.2.1 主流微服务框架一览表 8 |1.2.2 Dubbo 9 |1.2.3 Spring Cloud 10 1.3 服务网格(Service Mesh)框架Istio 11 1.4 比较Dubbo、Spring Cloud和Istio 12 |1.4.1 对比架构 12 |1.4.2 对比各项数据 15 |1.4.3 总结 15 - 第2章 准备开发环境和工具 17 2.1 搭建环境 17 |2.1.1 安装Java开发环境JDK 17 |2.1.2 配置JDK的环境变量 18 2.2 安装和配置Maven 20 |2.2.1 安装和配置 20 |2.2.2 认识pom.xml文件 22 |2.2.3 了解Maven的运作方式 25 |2.2.4 配置国内仓库 26 2.3 安装及配置开发工具IDEA 27 |2.3.1 安装IDEA 27 |2.3.2 配置IDEA的Maven环境 29 |2.3.3 安装Spring Assistant插件 29 2.4 安装及配置开发工具Eclipse 30 |2.4.1 安装Eclipse 30 |2.4.2 安装Spring Tools 4插件 30 |2.4.3 配置Eclipse的Maven环境 31 |2.4.4 创建Spring Cloud项目 32 2.5 熟悉Spring官方开发工具STS 32 2.6 如何使用本书源码 33 |2.6.1 在IDEA中使用 33 |2.6.2 在Eclipse(STS)中使用 33 - 第3章 实例1:用Spring Cloud实现一个微服务系统 35 3.1 本实例的架构和实现步骤 35 3.2 创建Spring Cloud项目 36 3.3 用Eureka实现“服务中心” 37 |3.3.1 添加配置 37 |3.3.2 实现“服务中心”集群(满足高可用) 38 |3.3.3 打包和部署“服务中心” 40 3.4 用Eureka实现“服务提供者” 42 |3.4.1 实现“服务提供者”的客户端 42 |3.4.2 实现“服务提供者”的接口 44 |3.4.3 检查服务的有效性 44 |3.4.4 实现“服务提供者”集群 44 3.5 用Feign实现“服务消费者” 45 |3.5.1 用Feign实现“服务消费者”的客户端 45 |3.5.2 调用“服务提供者”的接口 46 3.6 测试微服务系统 48 - -------------第2篇 基础 - 第4章 认识微服务 50 4.1 微服务的优点和缺点 50 |4.1.1 微服务的优点 50 |4.1.2 微服务的缺点 52 4.2 微服务设计的原则 53 4.3 领域驱动设计(DDD) 56 4.4 跨服务的事务管理模式 57 |4.4.1 2PC/3PC算法模式 58 |4.4.2 TCC事务机制模式 60 |4.4.3 消息中间件模式 60 |4.4.4 Saga模式 61 |4.4.5 Paxos算法模式 61 4.5 跨服务的查询模式 62 |4.5.1 API组合器模式 62 |4.5.2 CQRS模式 62 4.6 微服务部署 63 |4.6.1 部署模式 63 |4.6.2 升级模式 64 4.7 微服务架构与云原生的关系 66 |4.7.1 了解云原生 66 |4.7.2 微服务架构和云原生架构的区别 67 - 第5章 Spring Cloud基础 68 5.1 了解Spring Cloud生态 68 |5.1.1 Spring Cloud的总体架构 68 |5.1.2 主要子项目 69 |5.1.3 Netflix家族项目 70 |5.1.4 阿里巴巴家族项目 71 |5.1.5 其他子项目 72 |5.1.6 常用的技术栈 73 5.2 了解Spring Cloud 74 |5.2.1 Spring Cloud与Spring、Spring Boot的关系 74 |5.2.2 Spring Cloud的版本 76 |5.2.3 Spring Cloud项目的结构 77 |5.2.4 Spring Cloud的入口类 78 |5.2.5 Spring Cloud的自动配置 78 |5.2.6 开箱即用 79 5.3 了解注解 80 |5.3.1 什么是注解 80 |5.3.2 Spring Boot的系统注解 80 |5.3.3 Spring Boot的常用注解 81 |5.3.4 Spring Cloud的常用注解 86 5.4 了解Starter 87 |5.4.1 Spring Boot的Starter 87 |5.4.2 Spring Cloud的Starter 88 |5.4.3 如何使用Starter 88 5.5 使用配置文件 88 |5.5.1 配置文件application.properties 89 |5.5.2 实例2:使用配置文件application.properties 91 |5.5.3 配置文件application.yml 93 |5.5.4 实例3:使用配置文件application.yml 94 |5.5.5 实例4:用application.yml和application.properties配置多环境 98 |5.5.6 了解application.yml和application.properties的迁移 100 |5.5.7 比较配置文件bootstrap和application 100 5.6 应用程序分层开发模式——MVC 101 |5.6.1 了解MVC模式 101 |5.6.2 MVC和三层架构的关系 102 5.7 响应式编程——WebFlux 103 |5.7.1 什么是WebFlux 103 |5.7.2 比较MVC和WebFlux 103 |5.7.3 比较Mono和Flux 105 |5.7.4 开发WebFlux的流程 106 5.8 了解Spring Cloud Commons 106 |5.8.1 Spring Cloud的上下文 107 |5.8.2 Spring Cloud的公共抽象类 107 - -------------第3篇 进阶 - 第6章 用Consul实现服务治理 110 6.1 为什么需要服务治理 110 6.2 主流的“服务中心” 111 |6.2.1 Eureka 111 |6.2.2 Zookeeper 112 |6.2.3 ETCD 113 |6.2.4 Consul 113 |6.2.5 比较Eureka、Consul、ETCD、Zookeeper和Nacos 114 |6.2.6 了解CAP(一致性、可用性、分区容错性) 115 |6.2.7 在容器化时代如何选择“服务中心” 115 6.3 认识“服务发现”接口 116 |6.3.1 如何进行服务的注册和发现 116 |6.3.2 @EnableDiscoveryClient与@EnableEurekaClient的区别 117 6.4 认识Consul 117 |6.4.1 Consul的术语 117 |6.4.2 Consul的工作原理 118 |6.4.3 集群的实现原理 119 |6.4.4 健康检查 120 |6.4.5 安装和实现Consul集群 122 |6.4.6 在Linux中构建Consul集群 124 6.5 实例5:用Consul实现“服务提供者”集群和“服务消费者” 125 |6.5.1 实现“服务提供者”集群 126 |6.5.2 实现“服务消费者” 128 6.6 将“服务中心”从Eureka迁移到Consul 129 - 第7章 用Ribbon和Feign实现客户端负载均衡和服务调用 130 7.1 认识负载均衡 130 |7.1.1 服务器端负载均衡 130 |7.1.2 客户端负载均衡 131 7.2 认识Ribbon 131 |7.2.1 Ribbon的工作原理 131 |7.2.2 Ribbon的主要组件 132 |7.2.3 认识负载均衡器 133 |7.2.4 了解注解@LoadBalanced 135 |7.2.5 Ping机制 136 7.3 认识负载均衡策略 137 |7.3.1 Ribbon支持的9大负载均衡策略 137 |7.3.2 实例6:自定义负载均衡策略 139 7.4 实例7:在没有“服务中心”的情况下,实现自维护的客户端负载均衡 141 |7.4.1 添加依赖和配置,并启用客户端负载均衡 142 |7.4.2 编写负载均衡控制器 143 |7.4.3 测试客户端负载均衡 143 7.5 了解Feign 143 |7.5.1 Feign简介 143 |7.5.2 了解Feign的Bean 144 |7.5.3 压缩请求和响应 145 |7.5.4 了解注解@QueryMap 145 |7.5.5 使用Feign 146 7.6 实例8:覆盖Feign的默认配置 147 |7.6.1 添加依赖和配置,并启用支持 147 |7.6.2 自定义Feign的配置 147 |7.6.3 自定义Feign的接口 148 7.7 实例9:实现在Feign中记录日志 148 |7.7.1 添加配置项 148 |7.7.2 设置记录日志等级 149 |7.7.3 实现接口类 149 |7.7.4 实现调用接口 149 7.8 用Feign构建多参数请求 150 |7.8.1 用GET方式构建多参数请求 150 |7.8.2 用POST方式构建多参数请求 150 7.9 Ribbon和Feign的区别 151 - 第8章 用Hystrix实现容错处理 152 8.1 雪崩效应 152 |8.1.1 什么是雪崩效应 152 |8.1.2 造成服务雪崩的原因 153 8.2 主流的容错项目 155 |8.2.1 流量防卫兵Sentinel 155 |8.2.2 容错框架Resilience4j 156 |8.2.3 容错框架Hystrix 156 |8.2.4 对比Sentinel、Hystrix和Resilience4j 157 8.3 Hystrix处理容错的机制 157 |8.3.1 熔断机制 157 |8.3.2 隔离机制 158 |8.3.3 降级机制 160 |8.3.4 缓存机制 160 8.4 实例10:在Feign中用Hystrix实现服务调用的容错 160 |8.4.1 了解Feign对Hystrix的支持 161 |8.4.2 添加依赖和配置,并启用支持 162 |8.4.3 实现回调类 163 |8.4.4 添加fallback属性 163 |8.4.5 测试fallback状态 163 8.5 实例11:用Hystrix Dashboard实现数据的可视化监控 163 |8.5.1 添加依赖和配置 164 |8.5.2 配置启动类和Servlet 165 |8.5.3 查看监控数据 165 8.6 实例12:用Turbine聚合监控数据 166 |8.6.1 添加依赖并启用支持 166 |8.6.2 创建多个“服务消费者” 167 |8.6.3 配置多监控点 167 |8.6.4 启动并测试聚合监控 168 - 第9章 用Spring Cloud Gateway构建微服务网关 169 9.1 认识微服务网关 169 |9.1.1 什么是微服务网关 169 |9.1.2 为什么要使用微服务网关 169 |9.1.3 认识Spring Cloud Gateway 170 |9.1.4 Spring Cloud Gateway的工作流程 171 |9.1.5 比较Zuul与Spring Cloud Gateway 172 9.2 路由(Route) 173 |9.2.1 认识路由的谓词接口和谓词工厂 173 |9.2.2 认识配置路由规则的方式 173 |9.2.3 实例13:用Java API和配置文件方式构建路由 175 |9.2.4 实例14:应用Spring Cloud Gateway的11种路由规则 176 |9.2.5 实例15:测试多种路由规则匹配优先级 181 |9.2.6 实例16:将网关注册到“服务中心”,实现服务转发 183 9.3 过滤器(Filter) 184 |9.3.1 过滤器的基本知识 184 |9.3.2 网关过滤器(GatewayFilter) 184 |9.3.3 全局过滤器(GlobalFilter) 186 |9.3.4 实例17:用AddRequestHeader过滤器工厂给请求添加Header参数 189 9.4 实例18:实现路由容错 190 |9.4.1 处理未定义的路由 190 |9.4.2 用Hystrix处理路由熔断 191 9.5 限流 193 |9.5.1 为什么要限流 193 |9.5.2 常见的限流措施 193 |9.5.3 限流算法 194 |9.5.4 实例19:用Spring Cloud Gateway内置的限流工厂实现限流 195 9.6 高可用 197 9.7 Spring Cloud Gateway的端点 197 |9.7.1 认识Spring Cloud Gateway的端点 197 |9.7.2 实例20:通过Spring Cloud Gateway的端点添加动态路由 198 - 第10章 用Spring Cloud Sleuth实现微服务链路跟踪 200 10.1 微服务链路跟踪 200 |10.1.1 为什么要实现微服务链路跟踪 200 |10.1.2 微服务链路跟踪的技术要求 201 10.2 一些开源的链路跟踪项目——Skywalking、Pinpoint、Zipkin和CAT 202 10.3 认识Sleuth和Zipkin 203 |10.3.1 Sleuth 203 |10.3.2 Zipkin 203 10.4 实例21:用Sleuth实现日志采样 204 10.5 实例22:在Spring Cloud中使用Zipkin 205 |10.5.1 搭建Zipkin服务器 205 |10.5.2 添加依赖和配置 206 |10.5.3 测试链路数据 207 - 第11章 用Spring Cloud Config配置微服务 209 11.1 了解配置中心 209 |11.1.1 配置信息的管理方式 209 |11.1.2 对比主流配置中心 211 |11.1.3 了解Spring Cloud Config 212 |11.1.4 Spring Cloud Config的常用配置 213 11.2 设置配置中心的安全 214 11.3 加/解密配置文件 215 |11.3.1 实例23:用对称加密方式加/解密配置文件 215 |11.3.2 实例24:用非对称加密方式加/解密配置文件 217 11.4 实例25:用Git配置“配置服务器” 220 |11.4.1 在Git仓库中创建配置文件 220 |11.4.2 添加配置中心的依赖和配置,并启用支持 220 |11.4.3 读取配置信息 221 11.5 实例26:从客户端获取“配置服务器”放置在Git仓库中的配置文件 222 |11.5.1 添加依赖和配置 222 |11.5.2 创建用来获取配置的控制器 223 |11.5.3 测试获取到的数据 223 11.6 实例27:用Spring Cloud Bus自动刷新配置信息 224 |11.6.1 Spring Cloud Bus简介 224 |11.6.2 添加服务器端的依赖和配置,并启用支持 224 |11.6.3 添加客户端的依赖和配置,并启用支持 225 |11.6.4 启动并刷新客户端的配置 227 |11.6.5 实现配置的自动刷新 228 |11.6.6 局部刷新客户端的配置信息 229 |11.6.7 跟踪Bus事件 229 11.7 实例28:实现配置中心和配置客户端的服务化 230 |11.7.1 实现服务器端服务化 230 |11.7.2 实现客户端服务化 231 - 第12章 用Spring Cloud Alibaba组件实现服务治理和流量控制 232 12.1 认识Spring Cloud Alibaba组件 232 |12.1.1 Spring Cloud Alibaba是什么 232 |12.1.2 Spring Cloud Alibaba、Netflix和Spring Cloud的关系 233 |12.1.3 Spring Cloud Alibaba与Spring Boot、Spring Cloud的版本兼容关系 234 12.2 认识Sentinel 235 |12.2.1 Sentinel概述 235 |12.2.2 安装和启动Sentinel 239 |12.2.3 认识流控规则 239 |12.2.4 降级规则 241 |12.2.5 系统规则 241 |12.2.7 Sentinel对RestTemplate和Feign的支持 242 |12.2.8 Sentinel的规则持久化 243 12.3 用Sentinel实现Spring Cloud项目的流控和降级 244 |12.3.1 实例29:实现直接限流 244 |12.3.2 实例30:实现关联限流 246 |12.3.3 实例31:实现链路限流 247 |12.3.4 测试流控模式 249 |12.3.5 测试降级模式 250 12.4 认识Nacos 251 |12.4.1 Nacos概述 251 |12.4.2 下载和使用Nacos 251 12.5 实例32:用Nacos实现“服务提供者”和“服务消费者” 252 |12.5.1 用Nacos实现“服务提供者” 252 |12.5.2 用Nacos实现“服务消费者” 253 |12.5.3 测试服务接口 254 12.6 实例33:用Nacos实现“配置中心” 254 |12.6.1 添加依赖和配置 255 |12.6.2 创建属性承载类 255 |12.6.3 在Nacos控制台中添加配置 255 12.6.4 测试动态刷新 256 12.6.5 测试配置回滚 257 12.7 实例34:用Nacos存储Sentinel的限流规则 257 |12.7.1 添加依赖和配置 257 |12.7.2 自定义埋点 258 |12.7.3 添加Nacos配置 258 |12.7.4 测试配置的持久化 259 12.8 实例35:实现Nacos的数据持久化和集群 260 |12.8.1 实现Nacos的数据持久化 260 |12.8.2 部署集群 261 - 第13章 用Spring Cloud Security实现微服务安全 264 13.1 认识Spring Security与Spring Cloud Security 264 |13.1.1 Spring Security 264 |13.1.2 Spring Cloud Security 266 13.2 认识OAuth 2.0 267 |13.2.1 OAuth 2.0概述 267 |13.2.2 客户端的授权模式 268 13.3 Spring Cloud Security如何实现OAuth 2.0 273 |13.3.1 认识Oauth 2.0服务提供端 273 |13.3.2 配置授权服务器 274 |13.3.3 配置资源服务器 276 13.4 实例36:用Spring Security实现安全认证和授权 276 |13.4.1 添加依赖和配置数据库 276 |13.4.2 创建用户实体类 277 |13.4.3 实现用户注册和密码加密 278 |13.4.4 自定义认证管理器 279 |13.4.5 实现Spring Security配置类 279 |13.4.6 实现登录验证成功处理类 280 |13.4.7 实现登录验证失败处理类 281 |13.4.8 测试注册和登录 281 13.5 实例37:用OAuth 2.0实现认证和授权 282 |13.5.1 添加OAuth 2.0的依赖 282 |13.5.2 配置认证服务器 282 |13.5.3 配置资源服务器 284 |13.5.4 实现用户实体类和角色映射 284 |13.5.5 实现角色实体类 285 |13.5.6 实现测试控制器 286 |13.5.7 测试用密码模式获取Token 286 |13.5.8 测试携带Token访问资源 288 |13.5.9 测试用授权码模式获得Token 288 13.6 实例38:用MySQL实现Token信息的持久化 290 13.7 实例39:用Redis实现Token信息的持久化 292 - -------------第4篇 项目实战 - 第14章 实例40:用Spring Cloud实现页面日访问量3000万的某平台微服务架构 296 14.1 本实例的整体架构 296 |14.1.1 实施方案 296 |14.1.2 整体架构 297 14.2 实现“配置中心”以提供配置信息 297 |14.2.1 创建配置文件,并将其上传到Git仓库中 297 |14.2.2 编写“配置服务器”的信息 298 14.3 实现“服务提供者”集群、“服务消费者”及客户端自动配置 298 |14.3.1 实现“服务提供者”集群 298 |14.3.2 实现“服务消费者”,并通过“配置中心”实现客户端的自动配置 299 14.4 用OAuth 2.0实现统一的认证和授权 301 |14.4.1 实现认证服务器 301 |14.4.2 配置“服务消费者”的资源安全 301 14.5 在Spring Cloud中用“Redis+MySQL”实现路由服务器 302 |14.5.1 整体思路 302 |14.5.2 设计并实现自定义路由模型 303 |14.5.3 实现路由信息和版本信息实体 303 |14.5.4 实现路由和版本的控制器 304 |14.5.5 实现路由服务器的服务化 306 14.6 用Spring Cloud Gateway实现网关集群 306 |14.6.1 同步路由信息 306 |14.6.2 转换路由对象 308 |14.6.3 开启计划任务和负载均衡 308 |14.6.4 实现网关的服务化 309 14.7 用Nginx实现负载均衡 309 |14.7.1 认识Nginx 309 |14.7.2 实现网关负载均衡 312 |14.7.3 实现Nginx自身负载均衡 313 14.8 用Spring Boot Admin监控Spring Cloud应用程序 314 |14.8.1 集成Actuator 314 |14.8.2 集成Spring Boot admin以监控应用 316 14.9 集成“Prometheus+Grafana”以监控服务 319 |14.9.1 安装和配置Prometheus 319 |14.9.2 在Spring Cloud中集成Prometheus 321 |14.9.3 用Grafana实现可视化监控 322 - -------------第5篇 开发运维一体化(DevOps) - 第15章 基于Docker、K8s、Jenkins的DevOps实践 324 15.1 认识DevOps 324 |15.1.1 软件开发的演变过程 324 |15.1.2 认识DevOps 326 |15.1.3 开发模式的关系 327 |15.1.4 为什么要践行DevOps 328 |15.1.5 了解DevOps工具 329 15.2 认识Docker 332 |15.2.1 认识虚拟机和容器 332 |15.2.2 什么是Docker 334 |15.2.3 Docker的特点 335 |15.2.4 Docker的基本概念 335 15.3 使用Docker 337 |15.3.1 在Linux中安装Docker 337 |15.3.2 在Windows中安装Docker 338 |15.3.3 配置国内镜像加速器 338 |15.3.4 Docker的常用操作 340 15.4 用Docker Compose管理容器 342 |15.4.1 了解Docker Compose工具 342 |15.4.2 安装Docker Compose工具 342 |15.4.3 用Docker Compose工具运行容器 344 15.5 管理镜像 344 |15.5.1 用Docker Hub管理镜像 344 |15.5.2 创建私有仓库 345 15.6 认识Docker Swarm、Kubernetes(K8s)和Jenkins 345 |15.6.1 Docker Swarm 345 |15.6.2 Kubernetes(K8s) 347 |15.6.3 Jenkins 349 |15.6.4 比较Docker、Compose、Swarm、K8s和Jenkins 350
你还可能感兴趣
我要评论
|