终于又来到了大家喜欢的幸运抽书环节,在此申请一点,以往的抽书不管是个人掏包的还是和出版社合作的,都是作为粉丝福利的小编没有一毛钱好处,以往为了公平都没有采用赞赏抽奖和留言点赞排名,都是用的抽奖助手,就算这样,有的粉丝都还在后台留言说是噱头不公平,因为他没中过,好吧,如果你的想法是真的,那我也不知道为啥大家都喜欢用这个两千万用户的抽奖小程序
√ Spring Cloud 快速崛起后已成为微服务领域无可争议的标准
√ 来自Spring Cloud社区发起人|布道者|微服务专家的真知灼见
√ 这一Java企业级微服务极限武器已在所有互联网公司实现部署
√ 高速发展中的Spring Cloud须要你快速跟上新版本了解新实践
《Spring Cloud与Docker微服务架构实战(第2版)》基于Spring Cloud Edgware RELEASE 与Docker 17.09,以指导技术团队实现微服务架构落地为宗旨,覆盖微服务理论、微服务开发框架(Spring Cloud)及运行平台(Docker)三大主题。全书分为3部分,第1 部分对微服务架构进行系统介绍;第2 部分使用Spring Cloud 开发框架编写一个“电影售票系统”;第3 部分讲解如何将微服务应用运行在Docker 之上。全书采用精心设计的Demo 驱动,以连贯的场景、真实的代码示例来引导读者学习用强大的微服务技术实现架构设计。作为第2 版,《Spring Cloud与Docker微服务架构实战(第2版)》增补大量新版本框架独有的技术特性及其技巧、用例,以帮助读者避开升级中可能遇到的困难与陷阱。
《Spring Cloud与Docker微服务架构实战(第2版)》适合Java 工程师、架构师及运维人员及技术爱好者阅读。
2016 年国庆假期之后,我所在的公司因为业务需要,想搭建一个API 网关来综合治理已有业务调用服务(我公司之前采用的是当当的Dubbo 扩展框架Dubbox)。前期,我和同事们在技术选型环节,讨论了诸多目前比较红火的技术框架和工具。最后达成一致,采用微服务来重构和调整原先这些Dubbox 服务,并决定使用Spring Cloud(以下简称sc)来实现API 网关,争取在2017 年能顺利平滑地从Dubbox 过渡到sc。而具体的API 网关Demo 研发工作就落实到了我这里。
在开始研发工作之前,我参阅了包括官网在内的很多sc 研发资料,也去全球最大的同性技术交友网站GitHub 上找了很多代码来仔细研读。但感觉老外的这些Guide(指南)总是讲得不是很通透。也许是有些概念他们觉得太基础了,就直接略过不表。因此我也感到很迷茫,老是问自己,到底应该如何去实现这个API 网关,完成公司指派给我的研发任务呢?
幸好,某一天我看到《Spring Cloud 与Docker 实战微服务》这本开源书。根据书中例子,我几乎没有费什么大工夫就搭建了一个API 网关的Demo。甚至其中某些讲解点,看了之后能让我一下子恍然大悟,回头再看那些老外的Guide,我终于明白了其中的“奥秘”。我真的非常感激这位开源书作者,他深入浅出地将sc 所涉及的各种知识点和工具的使用做了完整和详细的叙述。从此,我也记住了此书作者的网名itmuch。
几天后,我将Demo 做了细化和扩展,并在oschina 的码云网站上开源分享了出去(具体网址见http://git.oschina.net/darkranger/spring-cloud-books)。而无巧不巧,itmuch 居然在我项目下的评论区留言了。经过加QQ、加微信等一系列同性技术交友过程(你们懂的)取得了联系,也终于知道了这位itmuch 的真名,那就是此书作者周立同学。在闲聊过程中,他透露了自己正在以那本《Spring Cloud 与Docker 实战微服务》开源书为基础,继续扩展和具体深入sc 这套微服务开发体系所包含的所有技术点,准备出版成册,让更多的朋友和企业能学习和借鉴sc 这套东西开发符合自己业务场景的微服务框架,并邀请我为新书做校对和修正工作。正巧,我也越来越喜欢钻研sc,也希望对自己碰到的一些问题向他指教,所以就答应了下来。这其中的过程真的一言难叙,总算最后我也不辱使命地完成了这本书的校对工作。
我可以很负责地说,本书是周立同学本人在工作和学习sc 后总结出的精华,书中每段代码、每个字都是他自己写的,绝无任何抄袭之举。完全可以说是一个努力勤奋、能独立思考、认真做事的同学的良心之作。这样的“业界良心”在如今这个充满浮躁的社会中已不多见。希望有更多的读者能珍惜此书,感谢周立同学给我们的帮助。除此之外,我也希望读者能在阅读完此书后,可以自己写点代码,亲身去实践一把,感受sc 的精妙之处。
1 微服务架构概述 1
1.1 单体应用架构存在的问题 . 1
1.2 如何解决单体应用架构存在的问题 3
1.3 什么是微服务 . 3
1.4 微服务架构的优点与挑战 . 4
1.4.1 微服务架构的优点 5
1.4.2 微服务架构面临的挑战 5
1.5 微服务设计原则 6
1.6 如何实现微服务架构 7
1.6.1 技术选型 7
1.6.2 架构图及常用组件 8
2 微服务开发框架——Spring Cloud . 9
2.1 Spring Cloud 简介 . 9
2.2 Spring Cloud 特点 . 10
2.3 Spring Cloud 版本 . 10
2.3.1 版本简介 10
2.3.2 子项目一览 . 12
2.3.3 Spring Cloud/Spring Boot 版本兼容性 . 13
3 开始使用Spring Cloud 实战微服务 14
3.1 Spring Cloud 实战前提 14
3.1.1 技术储备 14
3.1.2 工具及软件版本 . 15
3.2 服务提供者与服务消费者 . 16
3.3 编写服务提供者 16
3.3.1 手动编写项目 . 17
3.3.2 使用Spring Initializr 快速创建Spring Boot 项目 . 21
3.4 编写服务消费者 23
3.5 为项目整合Spring Boot Actuator . 25
3.6 硬编码有哪些问题 28
4 微服务注册与发现 30
4.1 服务发现简介 . 30
4.2 Eureka 简介 . 32
4.3 Eureka 原理 . 32
4.4 编写Eureka Server 34
4.5 将微服务注册到Eureka Server 上 36
4.6 Eureka Server 的高可用 38
4.6.1 编写高可用Eureka Server 38
4.6.2 将应用注册到Eureka Server 集群上 41
4.7 用户认证 . 41
4.7.1 为Eureka Server 添加用户认证 . 41
4.7.2 将微服务注册到需认证的Eureka Server 43
4.8 Eureka 的元数据 43
4.8.1 改造用户微服务 . 43
4.8.2 改造电影微服务 . 44
4.9 Eureka Server 的REST 端点 46
4.9.1 示例 47
4.9.2 注销微服务实例 . 52
4.10 Eureka 的自我保护模式 . 53
4.11 多网卡环境下的IP 选择 . 54
4.12 Eureka 的健康检查 56
4.13 排除Jersey 依赖 . 57
5 使用Ribbon 实现客户端侧负载均衡 . 59
5.1 Ribbon 简介 59
5.2 为服务消费者整合Ribbon . 60
5.3 Ribbon 配置自定义 63
5.3.1 使用Java 代码自定义Ribbon 配置 63
5.3.2 使用属性自定义Ribbon 配置 67
5.4 脱离Eureka 使用Ribbon 68
5.5 饥饿加载 . 70
6 使用Feign 实现声明式REST 调用 . 72
6.1 Feign 简介 73
6.2 为服务消费者整合Feign 73
6.3 自定义Feign 配置 . 75
6.3.1 使用Java 代码自定义Feign 配置 . 75
6.3.2 使用属性自定义Feign 配置 79
6.4 手动创建Feign 80
6.4.1 修改用户微服务 . 80
6.4.2 修改电影微服务 . 84
6.5 Feign 对继承的支持 . 86
6.6 Feign 对压缩的支持 . 87
6.7 Feign 的日志 87
6.7.1 编码方式设置日志级别 88
6.7.2 使用属性配置日志级别 89
6.8 使用Feign 构造多参数请求 90
6.8.1 GET 请求多参数的URL . 90
6.8.2 POST 请求包含多个参数 91
6.9 使用Feign 上传文件 92
7 使用Hystrix 实现微服务的容错处理 . 94
7.1 实现容错的手段 94
7.1.1 雪崩效应 95
7.1.2 如何容错 95
7.2 使用Hystrix 实现容错 . 97
7.2.1 Hystrix 简介 . 97
7.2.2 通用方式整合Hystrix 98
7.2.3 Hystrix 断路器的状态监控与深入理解 102
7.2.4 Hystrix 线程隔离策略与传播上下文 103
7.2.5 Feign 使用Hystrix . 106
7.3 Hystrix 的监控 112
7.4 使用Hystrix Dashboard 可视化监控数据 . 113
7.5 使用Turbine 聚合监控数据 116
7.5.1 Turbine 简介 116
7.5.2 使用Turbine 监控多个微服务 117
7.5.3 使用消息中间件收集数据 119
8 使用Zuul 构建微服务网关 124
8.1 为什么要使用微服务网关 . 124
8.2 Zuul 简介 . 126
8.3 编写Zuul 微服务网关 . 126
8.4 管理端点 . 129
8.4.1 routes 端点 129
8.4.2 filters 端点 131
8.5 路由配置详解 . 132
8.6 Zuul 的安全与Header . 136
8.6.1 敏感Header 的设置 . 136
8.6.2 忽略Header . 136
8.7 使用Zuul 上传文件 . 137
8.8 Zuul 的过滤器 140
8.8.1 过滤器类型与请求生命周期 . 140
8.8.2 内置过滤器详解 . 141
8.8.3 编写Zuul 过滤器 144
8.8.4 禁用Zuul 过滤器 146
8.9 Zuul 的容错与回退 146
8.10 饥饿加载 . 149
8.11 Query String 编码 . 150
8.12 Hystrix 隔离策略与线程池 . 150
8.12.1 隔离策略 150
8.12.2 线程池配置 . 151
8.13 Zuul 的高可用 152
8.13.1 Zuul 客户端也注册到了Eureka Server 上 . 152
8.13.2 Zuul 客户端未注册到Eureka Server 上 152
8.14 使用Sidecar 整合非JVM 微服务 . 154
8.14.1 编写Node.js 微服务 . 154
8.14.2 编写Sidecar . 155
8.14.3 Sidecar 的端点 . 157
8.14.4 Sidecar 与Node.js 微服务分离部署 . 158
8.14.5 Sidecar 原理分析 158
8.15 使用Zuul 聚合微服务 . 160
9 使用Spring Cloud Config 统一管理微服务配置 166
9.1 为什么要统一管理微服务配置 . 166
9.2 Spring Cloud Config 简介 167
9.3 编写Config Server . 168
9.4 编写Config Client . 171
9.5 Config Server 的Git 仓库配置详解 . 173
9.5.1 占位符支持 . 173
9.5.2 模式匹配 174
9.5.3 搜索目录 174
9.5.4 启动时加载配置文件 175
9.6 Config Server 的健康状况指示器 . 176
9.7 配置内容的加解密 177
9.7.1 安装JCE 177
9.7.2 Config Server 的加解密端点 177
9.7.3 对称加密 177
9.7.4 存储加密的内容 . 178
9.7.5 非对称加密 . 179
9.8 使用/refresh 端点手动刷新配置 180
9.9 使用Spring Cloud Bus 自动刷新配置 . 181
9.9.1 Spring Cloud Bus 简介 181
9.9.2 实现自动刷新 . 182
9.9.3 局部刷新 183
9.9.4 架构改进 184
9.9.5 跟踪总线事件 . 184
9.10 Spring Cloud Config 与Eureka 配合使用 186
9.11 Spring Cloud Config 的用户认证 . 187
9.12 Config Server 的高可用 188
9.12.1 Git 仓库的高可用 188
9.12.2 RabbitMQ 的高可用 . 189
9.12.3 Config Server 自身的高可用 189
10 使用Spring Cloud Sleuth 实现微服务跟踪 . 191
10.1 为什么要实现微服务跟踪 . 191
10.2 Spring Cloud Sleuth 简介 . 192
10.3 整合Spring Cloud Sleuth . 194
10.4 Spring Cloud Sleuth 与ELK 配合使用 . 196
10.5 Spring Cloud Sleuth 与Zipkin 配合使用 . 200
10.5.1 Zipkin 简介 . 200
10.5.2 编写Zipkin Server . 200
10.5.3 微服务整合Zipkin . 202
10.5.4 Zipkin 与Eureka 配合使用 . 205
10.5.5 使用消息中间件收集数据 206
10.5.6 使用Elasticsearch 存储跟踪数据 209
10.5.7 依赖关系图 . 211
11 Spring Cloud 常见问题与总结 . 213
11.1 Eureka 常见问题 213
11.1.1 Eureka 注册服务慢 213
11.1.2 已停止的微服务节点注销慢或不注销 214
11.1.3 如何自定义微服务的Instance ID . 215
11.1.4 Eureka 的UNKNOWN 问题总结与解决 217
11.2 整合Hystrix 后首次请求失败 218
11.2.1 原因分析 218
11.2.2 解决方案 218
11.3 Turbine 聚合的数据不完整 219
11.4 Spring Cloud 各组件超时 220
11.4.1 RestTemplate 的超时 . 221
11.4.2 Ribbon 的超时 . 221
11.4.3 Feign 的超时 221
11.4.4 Hystrix 的超时 222
11.4.5 Zuul 的超时 . 222
11.5 Spring Cloud 各组件重试 223
11.5.1 重试步骤 224
11.5.2 基于HTTP 响应码重试 224
11.5.3 关闭重试 224
11.5.4 注意点 224
11.6 Spring Cloud 各组件调优 225
11.6.1 Tomcat 参数 . 225
11.6.2 Hystrix 参数 . 225
11.6.3 Feign 参数 226
11.6.4 Zuul 参数 . 226
11.7 Spring Cloud 各组件配置属性 228
11.7.1 Spring Boot 的配置 228
11.7.2 Spring Cloud 的配置 . 228
11.7.3 原生配置 229
11.8 Spring Cloud 定位问题思路总结 . 229
12 Docker 入门 232
12.1 Docker 简介 232
12.2 版本与迭代计划 232
12.2.1 版本区别 233
12.2.2 迭代计划 233
12.3 Docker 的架构 234
12.4 安装Docker 236
12.4.1 CentOS 7 安装Docker . 236
12.4.2 Ubuntu 安装Docker . 239
12.4.3 Windows 安装Docker 244
12.4.4 Mac OS 安装Docker . 245
12.5 配置镜像加速器 245
12.6 Docker 常用命令 246
12.6.1 Docker 镜像常用命令 246
12.6.2 Docker 容器常用命令 252
13 将微服务运行在Docker 上 260
13.1 使用Dockerfile 构建Docker 镜像 260
13.1.1 Dockerfile 常用指令 . 261
13.1.2 使用Dockerfile 构建镜像 266
13.2 使用Docker Registry 管理Docker 镜像 . 268
13.2.1 使用Docker Hub 管理镜像 . 268
13.2.2 使用私有仓库管理镜像 270
13.3 使用Maven 插件构建Docker 镜像 . 271
13.3.1 快速入门 272
13.3.2 插件读取Dockerfile 进行构建 273
13.3.3 将插件绑定在某个phase 执行 274
13.3.4 推送镜像 275
13.4 常见问题与总结 277
14 使用Docker Compose 编排微服务 . 278
14.1 Docker Compose 简介 . 278
14.2 安装Docker Compose . 279
14.2.1 安装Compose . 279
14.2.2 安装Compose 命令补全工具 . 279
14.3 Docker Compose 快速入门 . 280
14.3.1 基本步骤 280
14.3.2 入门示例 280
14.3.3 工程、服务、容器 281
14.4 docker-compose.yml 常用命令 . 281
14.5 docker-compose 常用命令 . 285
14.6 Docker Compose 网络设置 . 286
14.6.1 基本概念 286
14.6.2 更新容器 287
14.6.3 links 287
14.6.4 指定自定义网络 . 288
14.6.5 配置默认网络 . 289
14.6.6 使用已存在的网络 289
14.7 综合实战:使用Docker Comose 编排Spring Cloud 微服务 289
14.7.1 编排Spring Cloud 微服务 289
14.7.2 编排高可用的Eureka Server 293
14.7.3 编排高可用Spring Cloud 微服务集群及动态伸缩 . 295
14.8 常见问题与总结 297
后记 298
附录A:本书配套代码 . 299
附录B:Spring Cloud YES——快速开发脚手架 300
附录C:使用Docker 快速安装本书中的组件 301
支持作者直接扫码购买
公众号后台直接回复抽奖
,会弹出一个二维码,长按识别即可,书籍有五本。中奖结果会通过微信模板消息发送到您,假如你中了,届时在小程序填好收货地址即可,这只是第一波送书哦~ 另外 Java葵花宝典小程序 也可以坚持签到攒积分哦,因为每日抽书活动快到到来了,届时是通过积分+幸运值进行命中的,已找到赞助商进行支持。小程序入口在公众号中间菜单,
能不能来个【赞】?