本书首先从微服务架构兴起的背景讲起,探讨了为何在分布式系统开发中微服务架构将逐渐取代单体架构;然后对Spring Cloud所提供的微服务组件及解决方案进行了一一讲解,从而让读者不但可以系统地学习Spring Cloud的相关知识,而且还可以全面掌握微服务架构应用的设计、开发、部署和运维等知识。
本书共11章,分为三大部分:第1部分为微服务开发基础——Spring Boot框架及使用;第2部分为Spring Cloud组件实战;第3部分为微服务与Docker容器技术。
本书适合作为Spring Cloud的入门读物,也适合致力于互联网开发和Java开发的进阶读者阅读。如果你对微服务架构有兴趣,或者是公司运维人员本书也非常适合你。此外,本书也可作为相关培训机构作为教材使用。
封面图
目录
- 前言
- 第1篇 微服务开发基础——Spring Boot框架及使用
- 第1章 微服务架构开发2
- 1.1 单体架构应用的困境2
- 1.2 微服务架构3
- 1.2.1 如何定义微服务架构4
- 1.2.2 微服务架构的优点5
- 1.2.3 微服务架构的缺点6
- 1.3 微服务架构设计7
- 1.3.1 微服务粒度7
- 1.3.2 微服务拆分原则8
- 1.3.3 微服务自治原则9
- 1.3.4 微服务交互原则10
- 1.3.5 微服务架构迁移10
- 1.4 不应使用微服务架构的情形11
- 第2章 微服务基础——Spring Boot12
- 2.1 Spring与Spring Boot12
- 2.2 快速启动Spring Boot13
- 2.2.1 编写pom.xml文件14
- 2.2.2 编写应用引导类16
- 2.2.3 编写配置文件17
- 2.2.4 运行项目17
- 2.3 使用Spring Boot构建示例项目19
- 2.3.1 经典三层应用架构19
- 2.3.2 设计领域对象20
- 2.3.3 实现数据管理23
- 2.3.4 编写业务逻辑层29
- 2.3.5 编写RESTful API31
- 2.3.6 数据库初始化35
- 2.3.7 启动测试36
- 2.4 Spring Boot特性37
- 2.4.1 Spring Boot自动配置机制37
- 2.4.2 Spring Boot扩展属性配置38
- 2.4.3 Spring Boot日志配置39
- 2.5 关于敏捷开发40
- 2.6 关于RESTful API设计41
- 2.6.1 以资源为中心进行URL设计42
- 2.6.2 正确使用HTTP方法及状态码42
- 2.6.3 查询及分页处理原则43
- 2.6.4 其他指导原则43
- 第2篇 Spring Cloud组件实战
- 第3章 Spring Cloud简介46
- 3.1 微服务架构的核心关键点46
- 3.2 Spring Cloud技术概览49
- 3.2.1 Spring Cloud子项目50
- 3.2.2 为何选择Spring Cloud53
- 3.3 Spring Cloud版Hello World示例54
- 第4章 服务治理与负载均衡58
- 4.1 什么是服务治理58
- 4.2 构建服务治理——Eureka59
- 4.2.1 搭建微服务Parent工程60
- 4.2.2 搭建服务治理服务器——Eureka服务器62
- 4.2.3 搭建服务提供者——注册服务64
- 4.2.4 搭建服务消费者——获取服务68
- 4.3 使用客户端负载均衡——Ribbon72
- 4.3.1 什么是客户端负载均衡72
- 4.3.2 启用Ribbon74
- 4.3.3 负载均衡测试75
- 4.4 使用Feign简化微服务调用77
- 4.5 深入Eureka80
- 4.5.1 服务注册及相关原理80
- 4.5.2 Eureka自我保护模式82
- 4.5.3 注册一个服务实例需要的时间84
- 4.5.4 Eureka高可用集群及示例84
- 4.5.5 多网卡及IP指定88
- 4.5.6 Eureka服务访问安全89
- 4.6 深入Ribbon90
- 4.6.1 Ribbon客户端负载均衡原理90
- 4.6.2 Ribbon负载均衡策略及配置92
- 4.6.3 直接使用Ribbon API94
- 4.7 深入Feign96
- 4.7.1 Feign的参数绑定96
- 4.7.2 Feign中的继承97
- 4.7.3 Feign与Swagger的冲突98
- 4.8 微服务健康监控99
- 4.9 异构服务解决方案——Sidecar101
- 第5章 微服务容错保护——Hystrix102
- 5.1 什么是微服务容错保护102
- 5.2 快速启动Hystrix103
- 5.2.1 引入Hystrix依赖104
- 5.2.2 开启Hystrix支持104
- 5.2.3 修改UserService实现104
- 5.2.4 容错测试105
- 5.2.5 服务降级的两种实现方式107
- 5.2.6 在Feign中使用Hystrix回退109
- 5.3 Hystrix容错机制分析110
- 5.3.1 Hystrix整体处理流程111
- 5.3.2 HystrixCommand与HystrixObservableCommand113
- 5.3.3 断路器原理分析115
- 5.3.4 Hystrix异常——HystrixBadRequestException117
- 5.4 服务隔离117
- 5.4.1 线程池隔离与信号量隔离118
- 5.4.2 服务隔离的颗粒度119
- 5.4.3 服务隔离配置119
- 5.4.4 小结120
- 5.5 服务降级模式121
- 5.5.1 快速失败121
- 5.5.2 静默失败121
- 5.5.3 返回默认值122
- 5.5.4 返回组装的值122
- 5.5.5 返回远程缓存123
- 5.5.6 主/从降级模式124
- 5.6 请求缓存127
- 5.7 请求合并128
- 5.8 Hystrix监控130
- 5.8.1 Hystrix仪表盘131
- 5.8.2 Turbine仪表盘集群监控133
- 5.8.3 Turbine与消息服务器集成136
- 第6章 API服务网关——Zuul137
- 6.1 API服务网关138
- 6.2 Spring Cloud与Netflix Zuul139
- 6.3 启用Zuul路由服务140
- 6.3.1 构建Zuul路由服务器141
- 6.3.2 路由测试142
- 6.3.3 负载均衡测试144
- 6.3.4 Hystrix容错与监控测试146
- 6.4 路由配置规则146
- 6.4.1 服务路由默认规则147
- 6.4.2 自定义微服务访问路径148
- 6.4.3 忽略指定微服务149
- 6.4.4 设置路由前缀149
- 6.4.5 通过静态URL路径配置路由映射150
- 6.4.6 路由配置顺序151
- 6.4.7 自定义路由规则151
- 6.5 Zuul路由其他设置151
- 6.5.1 Header设置152
- 6.5.2 HttpClient配置153
- 6.5.3 路由配置的动态加载153
- 6.6 Zuul容错与回退153
- 6.6.1 实现Zuul的回退154
- 6.6.2 服务超时156
- 6.7 Zuul过滤器157
- 6.7.1 过滤器特性158
- 6.7.2 过滤器类型及生命周期159
- 6.7.3 自定义Zuul过滤器160
- 6.7.4 禁用Zuul过滤器161
- 6.7.5 关于Error过滤器的一点补充162
- 6.8 @EnableZuulServer与@EnableZuulProxy比较164
- 6.8.1 EnableZuulServer注解的过滤器164
- 6.8.2 EnableZuulProxy注解的过滤器165
- 第7章 统一配置中心——Config166
- 7.1 Spring Cloud Config简介166
- 7.2 快速启动168
- 7.2.1 构建配置服务器168
- 7.2.2 创建应用配置文件169
- 7.2.3 升级微服务配置172
- 7.2.4 启动测试173
- 7.2.5 @Value注解174
- 7.2.6 关于配置服务的默认配置174
- 7.2.7 Spring配置加载顺序175
- 7.3 配置资源库176
- 7.3.1 配置资源规则详解176
- 7.3.2 集成Git仓库177
- 7.3.3 搜索目录179
- 7.3.4 本地缓存179
- 7.3.5 Git访问配置180
- 7.3.6 集成SVN180
- 7.3.7 使用文件系统181
- 7.4 配置的加密与解密181
- 7.4.1 安装JCE(Java Cryptography Extension)181
- 7.4.2 使用对称加密182
- 7.4.3 加密/解密端点183
- 7.4.4 客户端解密185
- 7.4.5 非对称加密187
- 7.5 配置服务器访问安全187
- 7.6 配置服务器的高可用188
- 7.6.1 整合Eureka188
- 7.6.2 快速失败与响应189
- 7.6.3 动态刷新配置191
- 第8章 分布式服务跟踪——Sleuth192
- 8.1 Spring Cloud Sleuth简介192
- 8.1.1 快速启用Sleuth193
- 8.1.2 Sleuth与日志框架196
- 8.1.3 有关Span199
- 8.2 Sleuth与ELK整合202
- 8.2.1 将日志输出到Logstash202
- 8.2.2 Logstash与Log4j的集成205
- 8.3 整合Zipkin服务206
- 8.3.1 构建Zipkin服务器206
- 8.3.2 整合微服务208
- 8.3.3 Zipkin分析208
- 8.3.4 输出TraceId211
- 8.4 Sleuth抽样采集与采样率213
- 第9章 消息驱动——Stream215
- 9.1 什么是消息驱动开发215
- 9.1.1 基于消息中间件开发的优点216
- 9.1.2 基于消息中间件开发的缺点217
- 9.2 Spring Cloud Stream简介218
- 9.2.1 应用模型218
- 9.2.2 编程模型220
- 9.2.3 使用“发布-订阅”模式223
- 9.3 Kafka使用指南224
- 9.3.1 Kafka基础知识224
- 9.3.2 搭建Kafka环境226
- 9.4 使用消息对应用重构228
- 9.4.1 为商品服务增加缓存功能229
- 9.4.2 为用户微服务添加消息发送功能235
- 9.4.3 为商品微服务添加消息监听功能239
- 9.4.4 测试242
- 9.4.5 自定义消息通道245
- 9.5 Spring Cloud Stream高级主题246
- 9.5.1 单元测试246
- 9.5.2 错误处理247
- 9.5.3 消息处理分发248
- 9.5.4 消费者组与消息分区249
- 9.5.5 消息绑定器250
- 9.6 消息总线——Spring Cloud Bus252
- 9.6.1 完成配置自动刷新配置252
- 9.6.2 发布自定义事件256
- 第10章 微服务应用安全——Security258
- 10.1 Spring Boot的应用安全258
- 10.1.1 实现用户认证258
- 10.1.2 实现用户鉴权261
- 10.2 微服务安全263
- 10.3 基于OAuth 2.0的认证265
- 10.3.1 OAuth 2.0授权流程265
- 10.3.2 客户端授权模式266
- 10.3.3 使用OAuth 2.0完成用户认证及授权268
- 10.3.4 整合API网关服务274
- 10.4 基于JWT的认证275
- 10.4.1 改造认证服务支持输出JWT276
- 10.4.2 在Zuul中对JWT进行解析281
- 10.4.3 改造商品微服务282
- 第3篇 微服务与Docker容器技术
- 第11章 微服务与Docker288
- 11.1 Docker简介288
- 11.2 Docker的使用289
- 11.2.1 安装290
- 11.2.2 镜像293
- 11.2.3 容器298
- 11.2.4 容器实战:MySQL299
- 11.3 Docker与Spring Cloud微服务301
- 11.3.1 部署Eureka服务302
- 11.3.2 部署应用微服务304
- 11.4 微服务与Jenkins305
- 11.4.1 安装Jenkins306
- 11.4.2 Jenkins配置307
- 11.4.3 构建任务309
- 11.5 微服务编排315