微服务架构设计模式
易宝支付CTO陈斌、PolarisTech 联合创始人蔡书、才云科技CEO张鑫等多位专家鼎力推荐
基本信息


【插图】

编辑推荐
涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题
易宝支付CTO陈斌、PolarisTech 联合创始人蔡书、才云科技CEO张鑫等多位专家鼎力推荐
内容简介
目录
译者序
中文版序一
中文版序二
前言
引言
第1章 逃离单体地狱 / 1
1.1 迈向单体地狱的漫长旅程 / 2
1.1.1 FTGO应用程序的架构 / 3
1.1.2 单体架构的好处 / 4
1.1.3 什么是单体地狱 / 4
1.2 为什么本书与你有关 / 7
1.3 你会在本书中学到什么 / 8
1.4 拯救之道:微服务架构 / 8
1.4.1 扩展立方体和服务 / 9
1.4.2 微服务架构作为模块化的一种形式 / 11
1.4.3 每个服务都拥有自己的数据库 / 12
1.4.4 FTGO的微服务架构 / 12
1.4.5 微服务架构与SOA的异同 / 14
1.5 微服务架构的好处和弊端 / 15
前言
未来已经到来,只是还没有平均分布。
—威廉·吉布森,科幻小说作家
这句话的实质是在说,新的想法和技术需要一段时间才能通过社区传播开来并被广泛采用。我发现并深入关注微服务的故事,就是新思想缓慢扩散的一个极好例子。这个故事始于 2006 年,当时受到 AWS 布道师一次演讲的启发,我开始走上了一条最终导致我创建早期 Cloud Foundry 的道路,它与今天的 Cloud Foundry 唯一相同的是名称。Cloud Foundry 采用平台即服务(PaaS)模式,用于在 EC2 上自动部署 Java 应用程序。与我构建的其他每个企业级 Java 应用程序一样,我的 Cloud Foundry 采用了单体架构,它由单个 Java Web 应用程序(WAR)文件构成。
将初始化、配置、监控和管理等各种复杂的功能捆绑到一个单体架构中,这给开发和运维都带来了挑战。例如,你无法在不测试和重新部署整个应用程序的情况下更改它的用户界面。因为监控和管理组件依赖于维护内存状态的复杂事件处理(CEP)引擎,所以我们无法运行应用程序的多个实例!这是个令人尴尬的事实,但我可以说的是,我是一名软件开发人员,就让我这个无辜的码农来指出这些问题吧。
显然,单体架构无法满足应用程序的需求,但替代方案是什么?在eBay 和亚马逊等公司,软件界已经开始逐渐尝试一些新东西。例如,亚马逊在 2002 年左右开始逐步从单体架构迁移(https://plus.google.com/110981030061712822816/posts/AaygmbzVeRq)。新架构用一系列松散耦合的服务取代了单体。服务由亚马逊称为“两个比萨”的团队所维护:团队规模小到两个比萨饼就能让所有人吃饱。
亚马逊采用这种架构来加快软件开发速度,以便公司能够更快地进行创新并赢得竞争。结果令人印象深刻:据报道,亚马逊平均每11.6秒就能够将代码的更改部署到生产环境中!
2010年年初,当我转向其他项目之后,我终于领悟了软件架构的未来。那时我正在读Michael T. Fisher和Martin L. Abbott 撰写的《The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise》(Addison-Wesley Professional,2009)。该书中的一个关键思想是扩展立方体,如第2章所述,它是一个用于扩展应用程序的三维模型。由扩展立方体定义的 Y 轴扩展功能将应用程序功能分解为服务。事后来看,这是显而易见的,但对我来说,这是一个让我醍醐灌顶的时刻!如果将 Cloud Foundry 设计为一组服务,我本可以解决两年前面临的挑战!
2012年4月,我首次就这种架构方法发表了题为“Decomposing Applications for Scalability and Deployability”的演讲(www.slideshare.net/chris.e.richardson/decomposing-applications-for-scalability-and-deployability-april-2012)。当时,这种架构并没有一个被普遍接受的名称。我有时称它为模块化多语言架构,因为服务可以用不同的语言编写。
未来还没有平均分布的另一个佐证是,微服务这个词在 2011 年的软件架构研讨会上被用来描述这种架构(https://en.wikipedia.org/wiki/Microservices)。当我听到 Fred George 在 Oredev 2013 上发表演讲时,我第一次遇到这个词,我立刻喜欢上了它!
2014年1月,我创建了https://microservices.io 网站,以记录我遇到的与微服务有关的架构和设计模式。在 2014 年 3 月,James Lewis 和 Martin Fowler 发表了一篇关于微服务的博客文章(https://martinfowler.com/articles/microservices.html)。随着微服务这个术语被广泛传播,这篇博客文章使整个软件社区开始围绕微服务这个新概念展开更进一步的思考和行动。
小型、松散耦合的团队快速可靠地开发和运维微服务的思想正在通过软件社区慢慢扩散。但是,这种对未来的看法可能与日常现实截然不同。如今,业务关键型企业应用程序通常是由大型团队开发的大型单体应用。虽然软件版本不经常更新,但每次更新都会给所涉及的参与人员带来巨大的痛苦。IT经常难以跟上业务需求。大家都很想知道如何采用微服务架构来解决所有这些问题。
本书的目标就是回答这个问题。它将使读者对微服务架构、它的好处和弊端,以及应该何时使用微服务架构有一个很好的理解。书中描述了如何解决我们将面临的众多架构设计挑战,包括如何管理分布式数据,还介绍了如何将单体应用程序重构为微服务架构。但本书并不是鼓吹微服务架构的宣言。相反,它的内容围绕着一系列模式进行展开。模式是在特定上下文中发生的问题的可重用解决方案。模式的优点在于,除了描述解决方案的好处之外,还描述了成功实施解决方案时必须克服的弊端和问题。根据我的经验,在选择解决方案时,这种客观性会带来更好的决策。我希望你会喜欢阅读这本书,它会教你如何成功开发基于微服务架构的应用程序。
致谢
写作是一项孤独的活动,但是把粗略的草稿变成一本完整的图书,却需要来自各方的共同努力。
首先,我要感谢 Manning 出版社的 Erin Twohey 和 Michael Stevens,他们一直鼓励我在《POJOs in Action》之后再写一本书。我还要感谢我的编辑 Cynthia Kane 和 Marina Michaels。Cynthia Kane 帮助我启动了这本书,并在前几章与我合作。Marina Michaels 接替 Cynthia 并与我一起工作到最后。Marina 对书的内容提出了细致和建设性的意见,我将永远感激不尽。我还要感谢 Manning 出版社参与了这本书的出版的其他成员。
我要感谢技术编辑 Christian Mennerich、技术校对员 Andy Miles以及所有的外部审校员:Andy Kirsch、Antonio Pessolano、Areg Melik-Adamyan、Cage Slagel、Carlos Curotto、Dror Helper、Eros Pedrini、Hugo Cruz、Irina Romanenko、Jesse Rosalia、Joe Justesen、John Guthrie、Keerthi Shetty、Michele Mauro、Paul Grebenc、Pethuru Raj、Potito Coluccelli、Shobha Iyer、Simeon Leyzerzon、Srihari Sridharan、Tim Moore、Tony Sweets、Trent Whiteley、Wes Shaddix、William E. Wheeler 和 Zoltan Hamori。
我还要感谢所有购买 MEAP 预览版并在论坛或直接向我提供反馈的人。
我要感谢我曾经参与过的所有会议和聚会的组织者及与会者,他们给了我大量的机会,让我介绍和调整我关于微服务的想法。我要感谢我在世界各地的咨询和培训客户,让我有机会帮助他们将我关于微服务的想法付诸实践。
我还要感谢 Eventuate 公司的同事 Andrew、Valentin、Artem 和 Stanislav 对 Eventuate 产品和开源项目的贡献。
媒体评论
—— Tim Moore,Lightbend
系统性地阐述了一个重要的架构领域。
—— Simeon Leyzerzon,Excelsior Software
一本可靠的手册,可以加快你迁移到这个基于云的现代架构的速度。
—— John Guthrie,Dell/EMC
可帮你理解微服务方法并在现实生活中使用它。
—— Potito Coluccelli,Bizmatica Econocom
喻勇翻译的这本书是近几年我所看到的众多论述微服务架构书籍中最好的一本。该书围绕微服务的架构设计,深入浅出地介绍了微服务与SOA等其他架构的区别,软件系统服务的拆分策略,微服务的同步和异步通信模式,如何使用微服务进行事务管理,如何在微服务架构中设计业务逻辑。同时详细描述了微服务架构中的测试和生产部署策略。该书所总结出的架构经验对设计微服务架构有很好的指导作用,建议软件研发人员认真研读。
—— 陈斌,易宝支付CTO
这本书里,不仅有微服务领域已经识别出来的问题、解决思路和解决方案,也有相应的代码例子。这本书可以帮助微服务相关人员构建知行合一的能力……这是一本可以帮你在设计微服务架构时做出取舍的书,它能在你处理微服务相关问题左右为难的时候给你提供参考和建议。
—— 蔡书,独立顾问,PolarisTech 联合创始人
书中既包含了微服务的原理、原则,又包含了实际落地中的架构设计模式;既包含可举一反三的理念和概念,也包含类似领域驱动设计、Saga实现事务操作、CQRS构建事件驱动系统等具体可套用的范式……相信本书对于企业CIO推动公司数字化转型战略、软件开发者提升自身技术架构功力,以及云原生爱好者以微服务切入最新的云原生体系,都有着极其重要的实践指导意义。
—— 张鑫,才云科技CEO