Spring Cloud与Docker微服务架构实战
  • 推荐4
  • 收藏15
  • 浏览2.0K

Spring Cloud与Docker微服务架构实战

周立 (作者) 

  • 书  号:978-7-121-31271-7
  • 出版日期:2017-05-01
  • 页  数:268
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:张春雨

相关图书

从芯片到云端:Python物联网全栈开发实践

刘凯 (作者)

物联网开发重新定义了“全栈开发”的范围。Python作为一门快速发展的语言,已经成为系统集成领域的优选语言之一,其可覆盖从电路逻辑设计到大数据分析的物联网端到端...

 

决战6.18:探秘京东技术取胜之道(全彩)

京东集团618作战指挥中心 (作者)

《决战6.18——探秘京东技术取胜之道》是以京东技术团队备战6.18为主线,集合京东数百位技术专家,对京东所有和6.18相关的关键技术系统进行了一次全面的梳理和...

 

Spring Boot 2精髓:从构建小系统到架构分布式大系统

李家智 (作者)

Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring ...

¥79.00

代码虚拟与自动化分析

章书琴 (作者)

本书主要分成3个部分讨论代码虚拟和自动化分析技术。第1部分主要讨论代码虚拟化技术的各种实现方法,并通过一些现有的代码虚拟化技术应用案例引领读者了解代码虚拟化的技...

¥79.00

移动Web前端高效开发实战:HTML 5 + CSS 3 + JavaScript + Webpack + React Native + Vue.js + Node.js

iKcamp (作者)

移动互联网的兴起和快速普及,给前端开发人员带来了前所未有的新机遇。移动Web前端技术作为整个技术链条中重要的一环,却乱象丛生。本书是一本梳理移动前...

 

架构探险:轻量级微服务架构(下册)

黄勇 (作者)

本书将重点关注微服务基础设施方面,其中大部分内容涉及微服务运维相关技术。全书以实践的角度进行编写,读者首先将学习到轻量级微服务架构的全景视图,随后的各个章节将围...

¥79.00
作为一部帮助大家实现微服务架构落地的作品,《Spring Cloud与Docker微服务架构实战》覆盖了微服务理论、微服务开发框架(Spring Cloud)以及运行平台(Docker)三大主题。全书可分为三部分,第1章对微服务架构进行了系统的介绍;第2-11章使用Spring Cloud开发框架编写了一个“电影售票系统”;第12-14章则讲解了如何将微服务应用运行在Docker之上。全书Demo驱动学习,以连贯的场景、具体的代码示例来引导读者学习相关知识,最终使用特定的技术栈实现微服务架构的落地。
本书以实战为主要特色,旨在将微服务理论引入工作实践;作为国内屈指可数的Spring Cloud专著,本书内容较为稀缺;此外,作者为本书书提供了系统连贯的配套Demo。

周立,Spring Cloud中国社区联合发起人。拥有近7年的软件系统开发经验,多年系统架构经验。对Spring Cloud、微服务、持续集成、持续交付有一定见地。
热爱技术交流,曾代表公司参加全球微服务架构高峰论坛、QCon等技术沙龙。拥抱开源,在GitHub与Git@OSC上开源多个项目,并获得了开源中国的推荐,例如开源电子书《使用Spring Cloud与Docker实战微服务》等。
笔者博客:http://itmuch.com,定期分享Spring Cloud相关博客。读者可扫码关注Spring Cloud 中国社区公众号以及作者公众号。
随着业务的发展,笔者当时所在公司的项目越来越臃肿。随着代码的堆砌,项目变得越来越复杂、开发效率越来越低、越来越难以维护,小伙伴们苦不堪言,毫无幸福感可言。
我们迫切需要能够解放生产力、放飞小伙伴的“良药”,于是,微服务进入视野。然而,微服务究竟是什么,众说纷纭,没有人能说清楚什么是微服务。不仅如此,大家对微服务的态度也是旗帜鲜明,吹捧者、贬低者比比皆是,在笔者的 QQ群、微信群中硝烟四起。笔者参加了不少交流会,感觉许多分享常常停留在理论阶段。一场会下来,常常觉得似乎懂了,却苦于没有对应的技术栈去实现这些理论。
Docker、Jenkins等工具笔者均有涉猎,然而使用什么技术栈去实践微服务架构,很长时间成为笔者心中的疑问。
2015年中,笔者偶然在 GitHub上看到一个名为 SpringCloud的框架,它基于 SpringBoot,配置简单、设计优雅,并且大多组件经过了生产环境的考验。笔者花 1个月左右的时间详细研究了 Spring Cloud的相关组件后,体会更深。然而,技术选型必须要进行客观、多维度、全方位的分析,而不应由我个人的主观意见作为决定因素。文档丰富程度、社区活跃度、技术栈生态、开发效率、运行效率、成功案例等,都是我们选型的重要因素。经过调研,其他几点都很 OK,只缺成功案例——在当时,国内几乎没什么成功案例,甚至连中文的博客、相关资料都没有。
这让笔者陷入两难,在这一过程中,公司一边继续使用阿里巴巴开源的 Dubbo(Dubbo虽然在国内非常流行,但毕竟有段时间没有维护了,开源生态也不是很好),一边在笔者的组织下进行一些 Spring Cloud相关的技术分享。一方面是希望借此开拓小伙伴们的视野,另一方面也希望能将两者相互印证,看能否在现有平台上借鉴 Spring Cloud的设计或使用其部分组件。
2016年 8月,笔者有幸代表公司参加了全球微服务架构高峰论坛。会上, Josh Long对 Spring Cloud的讲解在现场引起了不小的轰动,也让笔者眼前一亮。会后笔者咨询 Josh, Spring Cloud能否用于生产、是否大规模使用、国内是否已有成功案例,对方一一给出了肯定的回答。这一回答消除了笔者最后的一点疑虑,并定下了从 Dubbo逐步迁移至 SpringCloud的规划与方案。会后,笔者心想,不妨将 SpringCloud相关知识总结成一个“系列博客”,一来是加深自己的理解,二来也算是丰富 SpringCloud的中文资料。于是,笔者创建了自己的博客 http://www.itmuch.com,并开始了系列博客的编写。写了两篇后,笔者将博客链接分享到微信群中,没成想,恰好被 JoshLong看到,并引用到 Spring官方博客中去了。这让笔者感到无比荣幸的同时,也让自己贡献开源社区的欲望空前强烈,
于是乎,一口气又写了两篇。
再后来,笔者成立了微服务 /Spring Cloud/Docker相关的 QQ群( 157525002),在 QQ群小伙伴的鼓励下,笔者决定写一本 Spring Cloud开源书 https://github.com/eacdy/spring-cloud-book,没想到竟然获得开源中国的推荐。再然后,笔者在许进的邀请下,联合创始了 Spring Cloud中国社区。最后,在群管理员冯靖的引荐下,认识了网红级的大牛张开涛,开涛帮忙引荐了电子工业出版社编辑张春雨老师。从此,笔者正式撰写实体书。
本以为,有了开源书的撰写经验,实体书应该是较为轻松的一件事。然而,样稿发出后,却被春雨鄙视……主要是语文是体育老师教的,病句满天飞,况且,理论不是我的专长……期间一度想要放弃,多亏春雨老师的鼓励,总算坚持写了下去……
仓促完稿之际,感慨万千,激动与感激交织,于是,本段不可免俗,进入老生常谈的“鸣谢”环节——感谢我的家人,写书是个费时费力的活儿,在近半年的时间,我的父母和妻子给予了我极大的支持;感谢电子工业出版社小伙伴们的辛苦工作,没有刘佳禾、孙奇俏、张春雨等可爱的朋友们,我的书不可能面世;衷心感谢丁露、冯靖、张英磊、王天青、吴峻申(n本书的作者)在百忙之中帮忙校对;衷心感谢 QQ群、微信群的朋友们,你们给了笔者最大的帮助和支持!注:排名不分先后。
特别鸣谢:感谢吴峻申给笔者提出很多中肯实用的建议和意见;感谢张英磊帮忙重绘、美化书中绝大部分架构图。
谨以此书献给想要学习微服务、SpringCloud、Docker又不知从何开始的读者朋友们。希望本书能切切实实地帮助您使用特定技术栈实现微服务架构的落地,也希望本书不会令您失望。本书很多理论性的内容并未展开,例如 Cloud Native、12-factor App、DDD等,但笔者都在文中以 TIPS、拓展阅读或 WARNING的形式进行了标记,这部分内容希望读者能够自行拓展阅读。
周立 千米网

目录

1 微服务架构概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 单体应用架构存在的问题1
1.2 如何解决单体应用架构存在的问题3
1.3 什么是微服务3
1.4 微服务架构的优点与挑战5
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1 Spring Cloud 简介10
2.2 Spring Cloud 特点10
2.3 Spring Cloud 版本11
2.3.1 版本简介11
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 硬编码有哪些问题27
4 微服务注册与发现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1 服务发现简介29
4.2 Eureka 简介31
4.3 Eureka 原理31
4.4 编写Eureka Server 33
4.5 将微服务注册到Eureka Server 上35
4.6 Eureka Server 的高可用36
4.6.1 将应用注册到Eureka Server 集群上38
4.7 为Eureka Server 添加用户认证39
4.7.1 将微服务注册到需认证的Eureka Server 40
4.8 理解Eureka 的元数据41
4.8.1 改造用户微服务41
4.8.2 改造电影微服务41
4.9 Eureka Server 的REST 端点43
4.9.1 示例45
4.9.2 注销微服务实例49
4.10 Eureka 的自我保护模式51
4.11 多网卡环境下的IP 选择52
4.11.1 忽略指定名称的网卡52
4.11.2 使用正则表达式,指定使用的网络地址52
4.11.3 只使用站点本地地址53
4.11.4 手动指定IP 地址53
4.12 Eureka 的健康检查53
5 使用Ribbon 实现客户端侧负载均衡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1 Ribbon 简介56
5.2 为服务消费者整合Ribbon 57
5.3 使用Java 代码自定义Ribbon 配置60
5.4 使用属性自定义Ribbon 配置63
5.5 脱离Eureka 使用Ribbon 64
6 使用Feign 实现声明式REST 调用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.1 Feign 简介67
6.2 为服务消费者整合Feign 67
6.3 自定义Feign 配置69
6.4 手动创建Feign 72
6.4.1 修改用户微服务72
6.4.2 修改电影微服务76
6.5 Feign 对继承的支持78
6.6 Feign 对压缩的支持79
6.7 Feign 的日志80
6.8 使用Feign 构造多参数请求82
6.8.1 GET 请求多参数的URL 82
6.8.2 POST 请求包含多个参数83
7 使用Hystrix 实现微服务的容错处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.1 实现容错的手段85
7.1.1 雪崩效应85
7.1.2 如何容错86
7.2 使用Hystrix 实现容错88
7.2.1 Hystrix 简介88
7.2.2 通用方式整合Hystrix 89
7.2.3 Hystrix 断路器的状态监控与深入理解91
7.2.4 Hystrix 线程隔离策略与传播上下文93
7.2.5 Feign 使用Hystrix 96
7.3 Hystrix 的监控101
7.3.1 Feign 项目的Hystrix 监控102
7.4 使用Hystrix Dashboard 可视化监控数据103
7.5 使用Turbine 聚合监控数据105
7.5.1 Turbine 简介105
7.5.2 使用Turbine 监控多个微服务105
7.5.3 使用消息中间件收集数据108
8 使用Zuul 构建微服务网关. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.1 为什么要使用微服务网关113
8.2 Zuul 简介115
8.3 编写Zuul 微服务网关115
8.4 Zuul 的路由端点118
8.5 Zuul 的路由配置详解119
8.6 Zuul 的安全与Header 122
8.6.1 敏感Header 的设置122
8.6.2 忽略Header 123
8.7 使用Zuul 上传文件124
8.7.1 编写文件上传微服务124
8.8 Zuul 的过滤器127
8.8.1 过滤器类型与请求生命周期127
8.8.2 编写Zuul 过滤器128
8.8.3 禁用Zuul 过滤器130
8.9 Zuul 的容错与回退130
8.9.1 为Zuul 添加回退131
8.10 Zuul 的高可用133
8.10.1 Zuul 客户端也注册到了Eureka Server 上133
8.10.2 Zuul 客户端未注册到Eureka Server 上133
8.11 使用Sidecar 整合非JVM 微服务134
8.11.1 编写Node.js 微服务135
8.11.2 编写Sidecar 136
8.11.3 Sidecar 的端点138
8.11.4 Sidecar 与Node.js 微服务分离部署139
8.11.5 Sidecar 原理分析139
9 使用Spring Cloud Config 统一管理微服务配置. . . . . . . . . . . . . . . . . . . . . . . 142
9.1 为什么要统一管理微服务配置142
9.2 Spring Cloud Config 简介143
9.3 编写Config Server 144
9.3.1 Config Server 的端点145
9.4 编写Config Client 147
9.5 Config Server 的Git 仓库配置详解149
9.6 Config Server 的健康状况指示器152
9.7 配置内容的加解密153
9.7.1 安装JCE 153
9.7.2 Config Server 的加解密端点153
9.7.3 对称加密153
9.7.4 存储加密的内容154
9.7.5 非对称加密155
9.8 使用/refresh 端点手动刷新配置155
9.9 使用Spring Cloud Bus 自动刷新配置157
9.9.1 Spring Cloud Bus 简介157
9.9.2 实现自动刷新158
9.9.3 局部刷新159
9.9.4 架构改进159
9.9.5 跟踪总线事件160
9.10 Spring Cloud Config 与Eureka 配合使用161
9.11 Spring Cloud Config 的用户认证162
9.11.1 Config Client 连接需用户认证的Config Server 163
9.12 Config Server 的高可用164
9.12.1 Git 仓库的高可用164
9.12.2 RabbitMQ 的高可用164
9.12.3 Config Server 自身的高可用165
10 使用Spring Cloud Sleuth 实现微服务跟踪. . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
10.1 为什么要实现微服务跟踪167
10.2 Spring Cloud Sleuth 简介168
10.3 整合Spring Cloud Sleuth 170
10.4 Spring Cloud Sleuth 与ELK 配合使用172
10.5 Spring Cloud Sleuth 与Zipkin 配合使用176
10.5.1 Zipkin 简介176
10.5.2 编写Zipkin Server 176
10.5.3 微服务整合Zipkin 178
10.5.4 使用消息中间件收集数据181
10.5.5 存储跟踪数据183
11 Spring Cloud 常见问题与总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
11.1 Eureka 常见问题186
11.1.1 Eureka 注册服务慢186
11.1.2 已停止的微服务节点注销慢或不注销187
11.1.3 如何自定义微服务的Instance ID 188
11.1.4 Eureka 的UNKNOWN 问题总结与解决189
11.2 Hystrix/Feign 整合Hystrix 后首次请求失败190
11.2.1 原因分析191
11.2.2 解决方案191
11.3 Turbine 聚合的数据不完整191
11.3.1 解决方案192
11.4 Spring Cloud 各组件配置属性193
11.4.1 Spring Cloud 的配置193
11.4.2 原生配置193
11.5 Spring Cloud 定位问题思路总结194
12 Docker 入门. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
12.1 Docker 简介197
12.2 Docker 的架构197
12.3 安装Docker 199
12.3.1 系统要求199
12.3.2 移除非官方软件包199
12.3.3 设置Yum 源199
12.3.4 安装Dokcer 200
12.3.5 卸载Docker 201
12.4 配置镜像加速器201
12.5 Docker 常用命令202
12.5.1 Docker 镜像常用命令202
12.5.2 Docker 容器常用命令204
13 将微服务运行在Docker 上. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
13.1 使用Dockerfile 构建Docker 镜像209
13.1.1 Dockerfile 常用指令210
13.1.2 使用Dockerfile 构建镜像215
13.2 使用Docker Registry 管理Docker 镜像217
13.2.1 使用Docker Hub 管理镜像217
13.2.2 使用私有仓库管理镜像219
13.3 使用Maven 插件构建Docker 镜像220
13.3.1 快速入门221
13.3.2 插件读取Dockerfile 进行构建222
13.3.3 将插件绑定在某个phase 执行223
13.3.4 推送镜像224
13.4 常见问题与总结226
14 使用Docker Compose 编排微服务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
14.1 Docker Compose 简介227
14.2 安装Docker Compose 227
14.2.1 安装Compose 228
14.2.2 安装Compose 命令补全工具228
14.3 Docker Compose 快速入门229
14.3.1 基本步骤229
14.3.2 入门示例229
14.3.3 工程、服务、容器230
14.4 docker-compose.yml 常用命令230
14.4.1 build 230
14.4.2 command 231
14.4.3 dns 231
14.4.4 dns_search 231
14.4.5 environment 231
14.4.6 env_file 232
14.4.7 expose 232
14.4.8 external_links 232
14.4.9 image 232
14.4.10 links 232
14.4.11 networks 233
14.4.12 network_mode 233
14.4.13 ports 233
14.4.14 volumes 233
14.4.15 volumes_from 234
14.5 docker-compose 常用命令234
14.5.1 build 234
14.5.2 help 235
14.5.3 kill 235
14.5.4 logs 235
14.5.5 port 235
14.5.6 ps 235
14.5.7 pull 235
14.5.8 rm 236
14.5.9 run 236
14.5.10 scale 236
14.5.11 start 236
14.5.12 stop 236
14.5.13 up 236
14.6 Docker Compose 网络设置237
14.6.1 基本概念237
14.6.2 更新容器237
14.6.3 links 238
14.6.4 指定自定义网络238
14.6.5 配置默认网络239
14.6.6 使用已存在的网络239
14.7 综合实战:使用Docker Comose 编排Spring Cloud 微服务240
14.7.1 编排Spring Cloud 微服务240
14.7.2 编排高可用的Eureka Server 243
14.7.3 编排高可用Spring Cloud 微服务集群及动态伸缩245
14.8 常见问题与总结247
后记. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

本书勘误

印次
  • 页码:P26  •  印次: 1

    文中代码示例@Value(“user.userServiceUrl”) 应该改为 @Value(“${user.userServiceUrl}”)

    zhuhai189 提交于 2017/8/5 11:06:06
    张春雨 确认于 2017/8/7 10:03:57
  • 页码:50  •  行数:1  •  印次: 1  •  修订印次: 5

    Eureka Serve —> Eureka Server

    zlren 提交于 2017/11/5 17:15:34
    张春雨 确认于 2017/11/13 14:28:43
  • 页码:205  •  行数:倒数第10行  •  印次: 5  •  修订印次: 5

    “而其他的仓库都不是镜像仓库”
    应为
    “而其他的仓库都不是官方镜像仓库”

    level 提交于 2017/11/8 10:34:08
    张春雨 确认于 2017/11/13 15:36:38
  • 页码:213  •  行数:6  •  印次: 5

    “和ARG不同的是” 应该改为“和ENV不同的是”

    level 提交于 2017/11/8 12:09:55
    张春雨 确认于 2017/11/13 15:35:53

读者评论

  • 第十四章按照书上说的compose.yml编写了,但是还是出现了 Cannot execute request on any known server
    我每个服务包括sever的zoneurl 都写了discovery

    guobaoqi发表于 2017/11/21 20:32:01
  • 第三章的例子输入http://localhost:8000/1
    发现返回值是null,我用的是ubuntu16.0.4。我发现data.sql和schema.sql都正确执行了

    greenn.cyper发表于 2017/11/3 22:05:11
    • 如果用findAll()则返回[],:(

      greenn.cyper发表于 2017/11/3 22:11:36
    • @greenn.cyper 仔细查看日志,发现这么一句话cfg.Environment : HHH000206: hibernate.properties not found 原来我把application.yml里面的hibernate写成hiberate了。
      文章写的很好,不拖沓,不堆字,很少看到这么优质的书了(ps:可能是我很少看书 :) )

      greenn.cyper发表于 2017/11/4 7:39:18
    • Eureka的 保护哲学是宁可保全,不可滥杀无辜,呵呵。不是下午电脑dhcp连接出问题,我现在应该敲到脱离Eureka使用ribbon了,敲了半天没啥毛病,很high, 自high

      greenn.cyper发表于 2017/11/4 21:00:04
  • 资源下载链接在哪?

    pl发表于 2017/5/22 10:23:48
    • 亲爱的读者您好,本书前言部分xii页有提及资源下载链接,您也可以在本页面右上方下载资源处下载。谢谢您的关注~
      • 1-11 章配套代码:
      https://github.com/itmuch/spring-cloud-docker-microservice-book-code
      • 12-14 章配套代码:
      https://github.com/itmuch/spring-cloud-docker-microservice-book-code-docker

      刘佳禾发表于 2017/5/22 18:05:29