Statistics
35
Views
0
Downloads
0
Donations
Uploader

高宏飞

Shared on 2025-12-14
Support
Share

Author约翰·卡内尔

No description

Tags
No tags
Language: 中文
File Format: PDF
File Size: 11.3 MB
Support Statistics
¥.00 · 0times
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

(This page has no text content)
目 录 版权信息 版权声明 内容提要 译者序 前言 资源与支持 致谢 关于本书 关于作者 关于封面插图 第1章 欢迎迈入云世界,Spring 1.1 什么是微服务 1.2 什么是Spring,为什么它与微服务有关 1.3 在本书中读者会学到什么 1.4 为什么本书与你有关 1.5 使用Spring Boot来构建微服务 1.6 为什么要改变构建应用的方式 1.7 云到底是什么 1.8 为什么是云和微服务 1.9 微服务不只是编写代码 1.9.1 核心微服务开发模式 1.9.2 微服务路由模式 1.9.3 微服务客户端弹性模式
1.9.4 微服务安全模式 1.9.5 微服务日志记录和跟踪模式 1.9.6 微服务构建和部署模式 1.10 使用Spring Cloud构建微服务 1.10.1 Spring Boot 1.10.2 Spring Cloud Config 1.10.3 Spring Cloud服务发现 1.10.4 Spring Cloud与Netflix Hystrix和Netflix Ribbon 1.10.5 Spring Cloud与Netflix Zuul 1.10.6 Spring Cloud Stream 1.10.7 Spring Cloud Sleuth 1.10.8 Spring Cloud Security 1.10.9 代码供应 1.11 通过示例来介绍Spring Cloud 1.12 确保本书的示例是有意义的 1.13 小结 第2章 使用Spring Boot构建微服务 2.1 架构师的故事:设计微服务架构 2.1.1 分解业务问题 2.1.2 建立服务粒度 2.1.3 互相交流:定义服务接口 2.2 何时不应该使用微服务 2.2.1 构建分布式系统的复杂性 2.2.2 服务器散乱 2.2.3 应用程序的类型 2.2.4 数据事务和一致性 2.3 开发人员的故事:用Spring Boot和Java构建微服务 2.3.1 从骨架项目开始 2.3.2 引导Spring Boot应用程序:编写引导类 2.3.3 构建微服务的入口:Spring Boot控制器 2.4 DevOps工程师的故事:构建运行时的严谨性 2.4.1 服务装配:打包和部署微服务 2.4.2 服务引导:管理微服务的配置 2.4.3 服务注册和发现:客户端如何与微服务通信 2.4.4 传达微服务的“健康状况” 2.5 将视角综合起来
2.6 小结 第3章 使用Spring Cloud配置服务器控制配置 3.1 管理配置(和复杂性) 3.1.1 配置管理架构 3.1.2 实施选择 3.2 构建Spring Cloud配置服务器 3.2.1 创建Spring Cloud Config引导类 3.2.2 使用带有文件系统的Spring Cloud配置服务器 3.3 将Spring Cloud Config与Spring Boot客户端集成 3.3.1 建立许可证服务对Spring Cloud Config服务器的依赖 3.3.2 配置许可证服务以使用Spring Cloud Config 3.3.3 使用Spring Cloud配置服务器连接数据源 3.3.4 使用@Value 注解直接读取属性 3.3.5 使用Spring Cloud配置服务器和Git 3.3.6 使用Spring Cloud配置服务器刷新属性 3.4 保护敏感的配置信息 3.4.1 下载并安装加密所需的Oracle JCE jar 3.4.2 创建加密密钥 3.4.3 加密和解密属性 3.4.4 配置微服务以在客户端使用加密 3.5 最后的想法 3.6 小结 第4章 服务发现 4.1 我的服务在哪里 4.2 云中的服务发现 4.2.1 服务发现架构 4.2.2 使用Spring和Netflix Eureka进行服务发现实战 4.3 构建Spring Eureka服务 4.4 通过Spring Eureka注册服务 4.5 使用服务发现来查找服务 4.5.1 使用Spring DiscoveryClient查找服务实例 4.5.2 使用带有Ribbon功能的Spring RestTemplate调用服务 4.5.3 使用Netflix Feign客户端调用服务 4.6 小结
第5章 使用Spring Cloud和Netflix Hystrix的客户端弹性模式 5.1 什么是客户端弹性模式 5.1.1 客户端负载均衡模式 5.1.2 断路器模式 5.1.3 后备模式 5.1.4 舱壁模式 5.2 为什么客户端弹性很重要 5.3 进入Hystrix 5.4 搭建许可服务器以使用Spring Cloud和Hystrix 5.5 使用Hystrix实现断路器 5.5.1 对组织微服务的调用超时 5.5.2 定制断路器的超时时间 5.6 后备处理 5.7 实现舱壁模式 5.8 基础进阶——微调Hystrix 5.8 基础进阶微调Hystrix 重新审视Hystrix配置 5.9 线程上下文和Hystrix 5.9.1 ThreadLocal与Hystrix 5.9.2 HystrixConcurrencyStrategy实战 5.10 小结 第6章 使用Spring Cloud和Zuul进行服务路由 6.1 什么是服务网关 6.2 Spring Cloud和Netflix Zuul简介 6.2.1 建立一个Zuul Spring Boot项目 6.2.2 为Zuul服务使用Spring Cloud注解 6.2.3 配置Zuul与Eureka进行通信 6.3 在Zuul中配置路由 6.3.1 通过服务发现自动映射路由 6.3.2 使用服务发现手动映射路由 6.3.3 使用静态URL手动映射路由 6.3.4 动态重新加载路由配置 6.3.5 Zuul和服务超时 6.4 Zuul的真正威力:过滤器 6.5 构建第一个生成关联ID的Zuul前置过滤器 在服务调用中使用关联ID
6.6 构建接收关联ID的后置过滤器 6.7 构建动态路由过滤器 6.7.1 构建路由过滤器的骨架 6.7.2 实现run()方法 6.7.3 转发路由 6.7.4 整合 6.8 小结 第7章 保护微服务 7.1 OAuth2简介 7.2 从小事做起:使用Spring和OAuth2来保护单个端点 7.2.1 建立EagleEye OAuth2验证服务 7.2.2 使用OAuth2服务注册客户端应用程序 7.2.3 配置EagleEye用户 7.2.4 验证用户 7.3 使用OAuth2保护组织服务 7.3.1 将Spring Security和OAuth2 jar添加到各个服务 7.3.2 配置服务以指向OAuth2验证服务 7.3.3 定义谁可以访问服务 7.3.4 传播OAuth2访问令牌 7.4 JSON Web Token与OAuth2 7.4.1 修改验证服务以颁发JWT令牌 7.4.2 在微服务中使用JWT 7.4.3 扩展JWT令牌 7.4.4 从JWT令牌中解析自定义字段 7.5 关于微服务安全的总结 7.6 小结 第8章 使用Spring Cloud Stream的事件驱动架构 8.1 为什么使用消息传递、EDA和微服务 8.1.1 使用同步请求-响应方式来传达状态变化 8.1.2 使用消息传递在服务之间传达状态更改 8.1.3 消息传递架构的缺点 8.2 Spring Cloud Stream简介 Spring Cloud Stream架构 8.3 编写简单的消息生产者和消费者 8.3.1 在组织服务中编写消息生产者
8.3.2 在许可证服务中编写消息消费者 8.3.3 在实际操作中查看消息服务 8.4 Spring Cloud Stream用例:分布式缓存 8.4.1 使用Redis来缓存查找 8.4.2 定义自定义通道 8.4.3 将其全部汇集在一起:在收到消息时清除缓存 8.5 小结 第9章 使用Spring Cloud Sleuth和Zipkin进行分布式跟踪 9.1 Spring Cloud Sleuth与关联ID 9.1.1 将Spring Cloud Sleuth添加到许可证服务和组织服务中 9.1.2 剖析Spring Cloud Sleuth跟踪 9.2 日志聚合与Spring Cloud Sleuth 9.2.1 Spring Cloud Sleuth与Papertrail集成实战 9.2.2 创建Papertrail账户并配置syslog连接器 9.2.3 将Docker输出重定向到Papertrail 9.2.4 在Papertrail中搜索Spring Cloud Sleuth的跟踪ID 9.2.5 使用Zuul将关联ID添加到HTTP响应 9.3 使用Open Zipkin进行分布式跟踪 9.3.1 添加Spring Cloud Sleuth和Zipkin依赖项 9.3.2 配置服务以指向Zipkin 9.3.3 安装和配置Zipkin服务器 9.3.4 设置跟踪级别 9.3.5 使用Zipkin跟踪事务 9.3.6 可视化更复杂的事务 9.3.7 捕获消息传递跟踪 9.3.8 添加自定义跨度 9.4 小结 第10章 部署微服务 10.1 EagleEye:在云中建立核心基础设施 10.1.1 使用亚马逊的RDS创建PostgreSQL数据库 10.1.2 在AWS中创建Redis集群 10.1.3 创建ECS集群 10.2 超越基础设施:部署EagleEye 手动将EagleEye服务部署到ECS 10.3 构建和部署管道的架构
10.4 构建和部署管道实战 10.5 开始构建和部署管道:GitHub和Travis CI 10.6 使服务能够在Travis CI中构建 10.6.1 构建的核心运行时配置 10.6.2 安装预构建工具 10.6.3 执行构建 10.6.4 标记源代码 10.6.5 构建微服务并创建Docker镜像 10.6.6 将镜像推送到Docker Hub 10.6.7 在Amazon ECS中启动服务 10.6.8 启动平台测试 10.7 关于构建和部署管道的总结 10.8 小结 附录A 在桌面运行云服务 附录B OAuth2授权类型
版权信息 书名:Spring微服务实战 ISBN:978-7-115-48118-4 本书由人民邮电出版社发行数字版。版权所有,侵权必究。 您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不 得以任何方式复制和传播本书内容。 我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识 产权。 如果购买者有侵权行为,我们可能对该用户实施包括但不限于关 闭该帐号等维权措施,并可能追究法律责任。 著     [美] 约翰·卡内尔(John Carnell) 译     陈文辉 审  校  张卫滨 责任编辑  杨海玲 人民邮电出版社出版发行  北京市丰台区成寿寺路11号 邮编  100164  电子邮件  315@ptpress.com.cn 网址  http://www.ptpress.com.cn
读者服务热线: (010)81055410 反盗版热线: (010)81055315
版权声明 Original English language edition, entitled Spring Microservices in Action by John Carnell published by Manning Publications Co., 209 Bruce Park Avenue, Greenwich, CT 06830. Copyright © 2017 by Manning Publications Co. Simplified Chinese-language edition copyright © 2018 by Posts & Telecom Press. All rights reserved. 本书中文简体字版由Manning Publications Co.授权人民邮电出 版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本 书内容。 版权所有,侵权必究。
内容提要 本书以一个名为EagleEye的项目为主线,介绍云、微服务等概念 以及Spring Boot和Spring Cloud等诸多Spring项目,并介绍如何将 EagleEye项目一步一步地从单体架构重构成微服务架构,进而将这个 项目拆分成众多微服务,让它们运行在各自的Docker容器中,实现持 续集成/持续部署,并最终自动部署到云环境(Amazon)中。针对在重 构过程中遇到的各种微服务开发会面临的典型问题(包括开发、测试 和运维等问题),本书介绍了解决这些问题的核心模式,以及在实战 中如何选择特定Spring Cloud子项目或其他工具解决这些问题。 本书适合拥有构建分布式应用程序的经验、拥有Spring的知识背 景以及对学习构建基于微服务的应用程序感兴趣的Java开发人员阅 读。对于希望使用微服务构建基于云的应用程序,以及希望了解如何 将基于微服务的应用部署到云上的开发人员,本书也具有很好的学习 参考价值。 致我的兄弟Jason!即使在你处在最黑暗的时刻,你也向我展示了 力量和尊严的真正含义。作为兄弟、丈夫和父亲,你是一个好榜样。
译者序 让我们把时间调回到2003年6月。那一年,承载着“传统J2EE寒冬 之后的崭新起点”美好愿景的Spring项目开始立项,并以1.0版本进行 推进。时光荏苒,从Spring Framework 1.0发展到现在的Spring Framework 5.0,Spring早已从当初Java企业级开发领域的挑战者、颠 覆者,变成了标准的制定者,成为Java企业级开发事实上的标准开发 框架。 经过十多年的发展,Spring家族现在已枝繁叶茂,涵盖J2EE开 发、依赖维护、安全、批处理、统一数据库访问、大数据、消息处 理、移动开发以及微服务等众多领域。在Spring家族的诸多项目里 面,最耀眼的项目莫过于Spring Framework、Spring Boot和Spring Cloud。Spring Framework就像是Spring家族的树根,是Spring得以在 Java开发领域屹立不倒的根本原因,它的目标就是帮助开发人员开发 出好的系统;Spring Boot就像是树干,它的目标是简化新Spring应用 的初始搭建以及开发过程,致力于在蓬勃发展的快速应用开发领域成 为领导者;Spring Cloud就如同是Spring这棵参天大树在微服务开发 领域所结出的硕果。 在近几年,微服务这一概念十分火热,因为它确实能解决传统的 单体架构应用所带来的顽疾(如代码维护难、部署不灵活、稳定性不 高、无法快速扩展),以至于涌现出了一批帮助实现微服务的工具。 在它们之中,Spring Cloud无疑是最令人瞩目的,不仅是因为Spring 在Java开发中的重要地位,更是因为它提供一整套微服务实施方案, 包括服务发现、分布式配置、客户端负载均衡、服务容错保护、API网 关、安全、事件驱动、分布式服务跟踪等工具。 本书对微服务的概念进行了详细的介绍,并介绍了微服务开发过 程中遇到的典型问题,以及解决这些问题的核心模式,并介绍了在实 战中如何选择特定Spring Cloud子项目解决这些问题。本书非常好地 把握了理论和实践的平衡,正如本书作者所言,本书是“架构和工程 学科之间良好的桥梁与中间地带”。相信读者阅读完本书之后,会掌
握微服务的概念,明白如何在生产环境中实施微服务架构,学会在生 产中运用Spring Cloud等工具,并将项目自动部署到云环境中。 我第一次接触Spring Cloud,是由于我所负责的一个项目需要从 典型的单体应用架构重构成微服务架构,而当时部门主管选定的技术 方案就是Spring Cloud。从那时起,我才真正开始深入了解Spring Cloud。当时,Spring Cloud算是比较新的技术,国内有关Spring Cloud和微服务方面的优秀技术书籍凤毛麟角,我只能选择参阅Spring 的官方文档以及国外的一些技术博客。当时Manning出版社尚未出版的 Spring Microservices in Action 走入了我的视野。通读完这本书的 早期预览版之后,我认为它是目前市面上将微服务和Spring Cloud结 合介绍得最好的技术书籍,于是我便毛遂自荐,向人民邮电出版社的 杨海玲编辑表达了希望成为这本书的中文译者的意愿。不久之后,她 回复了我,请我担任这本书的译者,我欣然答应,从此开启了披星戴 月的翻译日子。 虽然翻译本书花费了我大量的业余时间,但我也在这个过程中学 到了许多。感谢杨海玲编辑和张卫滨老师在翻译过程中对我的指导与 指正。同时,我想要感谢我的爱人在这个过程中对我的支持与奉献, 还要感谢我那即将出生的孩子,你们是我坚持的动力来源。 限于时间和精力,也囿于我本人的知识积累,在翻译过程中难免 犯错。如果读者发现本书翻译中存在哪些不足或纰漏之处,欢迎提出 宝贵意见。读者可以通过memphychan@gmail.com联系我。希望本书能 够对您有用! 陈文辉 2018年4月于东莞
前言 具有讽刺意味的是,在写书的时候,所写的书的最后一部分往往 是这本书的前言。这往往也是最棘手的部分。为什么?因为你必须向 所有人解释为什么你对一个主题如此热情,以至于你最后花了一年半 的时间来写一本关于这个主题的书。很难说清楚为什么有人会花这么 多的时间在一本技术书上。人们很少会为名或为利撰写软件开发书 籍。 我写本书的原因就是——我热爱编码。这是对我的一种召唤,也 是一种创造性的活动,它类似于绘画或演奏乐器。软件开发领域之外 的人很难理解这一点。我尤其喜欢构建分布式应用程序。对我来说, 看到一个应用程序跨几十个(甚至数百个)服务器工作是一件令人惊 奇的事情。这就像看着一个管弦乐队演奏一段音乐。虽然管弦乐队的 最终作品很出色,但完成它往往需要大量的努力与练习。编写大规模 分布式应用程序亦是如此。 自从25年前我进入软件开发领域以来,我就目睹了软件业与构建 分布式应用程序的“正确”方式作斗争。我目睹过分布式服务标准 (如CORBA)兴起与陨落。巨型公司试图推行大型的而且通常是专有的 协议。有人记得微软公司的分布式组件对象模型(Distributed Component Object Model,DCOM)或甲骨文公司的J2EE企业Java Bean 2(EJB)吗?我目睹过技术公司和它们的追随者涌向沉重的基于XML的 模式来构建面向服务的架构(SOA)。 在各种情况下,这些用于构建分布式系统的方法常常在它们自身 的负担下崩溃。我并不是说这些技术无法用来构建一些非常强大的应 用程序。它们陨落的真相是它们无法满足用户的需求。10 年前,智能 手机刚刚被引入市场,云计算还处于起步阶段。另外,分布式应用程 序开发的标准和技术对于普通开发人员来说太复杂了,以致于无法在 实践中理解和使用。在软件开发行业,没有什么能像书面代码那样说 真话。当标准妨碍到这一点时,标准很快就会被抛弃。
当我第一次听说构建应用程序的微服务方法时,我是有点儿怀疑 的。“很好,另一种用于构建分布式应用的银弹方法。”我是这样想 的。然而,随着我开始深入了解这些概念,我意识到微服务的简单性 可以成为游戏规则的改变者。微服务架构的重点是构建使用简单协议 (HTTP和JSON)进行通信的小型服务。仅此而已。开发人员可以使用 几乎任何编程语言来编写一个微服务。在这种简单中蕴含着美。 然而,尽管构建单个微服务很容易,实施和扩展它却很困难。要 让数百个小型的分布式组件协同工作,然后从它们构建一个弹性的应 用程序是非常困难的。在分布式计算中,故障是无从逃避的现实,应 用程序要处理好故障是非常困难的。套用我同事Chris Miller和Shawn Hagwood的话:“如果它没有偶尔崩溃,你就不是在构建。” 正是这些故障激励着我写这本书。我讨厌在不必要的时候从头开 始构建东西。事实上,Java是大多数应用程序开发工作的通用语言, 尤其是在企业中。对许多组织来说,Spring框架已成为大多数应用程 序事实上的开发框架。我已经用Java做了近 20 年的应用程序开发 (我还记得Dancing Duke applet),并且使用Spring近10年了。当我 开始我的微服务之旅时,我很高兴看到Spring Cloud的出现。 Spring Cloud框架为许多微服务开发人员将会遇到的常见开发和 运维问题提供开箱即用的解决方案。Spring Cloud可以让开发人员仅 使用所需的部分,并最大限度地减少构建和部署生产就绪的Java微服 务所需的工作量。通过使用其他来自Netflix、HashiCorp以及Apache 基金会等公司和组织的久经考验的技术,Spring Cloud实现了这一 点。 我一直认为自己是一名普通的开发人员,在一天结束的时候,需 要按期完成任务。这就是我写这本书的原因。我想要一本可以在我的 日常工作中使用的书。我想要一些直接简单的(希望如此)代码示 例。我总是想要确保本书中的材料既可以作为单独的章使用也可以作 为整体来使用。我希望读者会觉得本书很有用,希望读者会喜欢读 它,就如同我喜欢写它一样。
资源与支持 本书由异步社区出品,社区(https://www.epubit.com/)为您提 供相关资源和后续服务。 配套资源 本书提供如下资源: 本书源代码; 书中彩图文件; 要获得以上配套资源,请在异步社区本书页面中点击 , 跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权 益,该操作会给出相关提示,要求输入提取码进行验证。 提交勘误 作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在 疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。 当您发现错误时,请登录异步社区,按书名搜索,进入本书页 面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本 书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获 赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖 品。
与我们联系 我们的联系邮箱是contact@epubit.com.cn。 如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮 件标题中注明本书书名,以便我们更高效地做出反馈。 如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技 术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异 步社区在线提交投稿(直接访问www.epubit.com/ selfpublish/submission即可)。 如果您是学校、培训机构或企业,想批量购买本书或异步社区出 版的其他图书,也可以发邮件给我们。 如果您在网上发现有针对异步社区出品图书的各种形式的盗版行 为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行 为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我 们持续为您提供有价值的内容的动力之源。 关于异步社区和异步图书 “异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出 版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异 步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高
品质技术文章和视频课程。更多详情请访问异步社区官网 https://www.epubit.com。 “异步图书”是由异步社区编辑团队策划出版的精品IT专业图书 的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业 编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版 领域包括软件开发、大数据、AI、测试、前端、网络技术等。 异步社区 微信服务号
致谢 当我坐下来写下这些致谢时,我忍不住回想起2014年我第一次跑 马拉松的情景。写一本书就如同跑马拉松。写这本书的提案和大纲很 像训练过程,它会让你的想法成型,会把你的注意力集中在未来的事 情上。是的,在这个过程接近尾声的时候,它可能会变得有点乏味和 残酷。 开始写这本书的那一天就像是比赛日。你充满活力与激情地开始 了马拉松比赛。你知道你在尝试做比以往所有事情都要重大的事情, 这既令人兴奋又让人神经紧张。虽然这是你已经训练过的,但同一时 间,在你的脑海中总会有一些怀疑的声音,说你完成不了你开始的事 情。 我从跑步中学到了比赛不是一次一公里地完成的,相反,跑步是 一只脚在另一只脚前面地跑。长跑是个人脚步的总和。当我的孩子们 在为某件事而挣扎时,我笑着问他们:“你如何写一本书?那就是一 次一词,一次一步。”他们通常会不以为然,但到最后,除了这条无 可争辩的铁律之外就没有别的办法了。 然而,当你跑马拉松的时候,你可能是一名竞赛的参与者,但你 永远不会孤军奋斗。在这个过程中,有整个团队在那里为你提供支 持、时间和建议。撰写这本书的经历亦是如此。 我首先想感谢Manning出版社为我撰写这本书所给予的支持。策划 编辑Greg Wild耐心地与我一起工作,帮助我精炼了本书中的核心概 念,并引导我完成了整个提案过程。在此过程中,我的开发编辑Maria Michaels让我保持坦诚,并鞭策我成为一名更优秀的作者。我还要感 谢我的技术编辑Raphael Villela和Joshua White,他们不断检查我的 工作,并确保我编写的示例和代码的整体质量。我非常感谢这些人在 整个项目中投入的时间、才华和承诺。我还要感谢在撰写和开发过程 中对书稿提供反馈意见的审稿人:Aditya Kumar、Adrian M. Rossi、 Ashwin Raj、Christian Bach、Edgar Knapp、Jared Duncan、Jiri
The above is a preview of the first 20 pages. Register to read the complete e-book.