成功地开发基于微服务架构的应用软件,需要掌握一系列全新的架构思想和实践。在这本独特的书籍中,微服务架构的先驱、Java开发者社区的意见领袖ChrisRichardson收集、分类并解释了44个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信等难题。
本书将教会你如何开发和部署生产级别的微服务架构应用。这套宝贵的架构设计模式建立在数十年的分布式系统经验之上,Chris还为开发服务添加了新的模式,并将它们组合成可在真实条件下可靠地扩展和执行的系统。本书不仅仅是一个模式目录,还提供了经验驱动的建议,以帮助你设计、实现、测试和部署基于微服务的应用程序。
本书包含:
如何(以及为什么)使用微服务架构
服务拆分的策略
高效的测试策略
包括容器和Serverless在内的部署模式
本书专为熟悉标准企业应用程序架构的开发人员编写,使用Java编写所有示例代码。
克里斯·理查森(ChrisRichardson)
世界著名的软件大师,《POJOSinAction》等技术名著的作者,也是著名开源项目CloudFoundry和Eventuate的创始人。他的研究领域包括微服务架构设计、分布式数据管理、事件驱动的应用架构、领域驱动设计、持续交付、Spring框架、Scala、NoSQL数据库等。
喻勇
本书由微服务架构的先驱、Java开发者社区的意见领袖ChrisRichardson亲笔撰写,旨在帮助架构师和程序员学会使用微服务架构成功开发应用程序。书中描述了如何解决我们将面临的众多架构设计挑战,包括如何管理分布式数据,还介绍了如何将单体应用程序重构为微服务架构,涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题。本书并不是鼓吹微服务架构的宣言,作者既介绍了微服务的原理、原则,又详细讲解了实际落地中的架构设计模式,将使你理解微服务架构、它的好处和弊端,以及应该何时使用微服务架构。本书将帮助你建立微服务的全局视野,并学会在纷繁复杂的情况下做出正确的架构选择和取舍。
写给中文版读者的话
7年前,我带着对美食和技术的热情,开始了我的首次中国之旅。在那之前,我对中国的美食和软件社区都知之甚少。7年之后,经过多次中国之行,我对这两者都有了深刻的认识:我爱上了地道的中国菜,也对中国的软件开发者印象深刻。
2012年我首次访问中国,参加我在VMware公司的同事Frank举办的几场开发者会议。我一口气在北京和上海做了好几场演讲,包括云计算、CloudFoundry、Node.js、Spring、NoSQL数据库,当然,还有微服务。我与2000多位参加会议的来宾讨论CloudFoundry,这次旅行让我意识到中国开发者社区的规模和热情,也让我有机会品尝了地道的中国菜。我甚至还忙里偷闲,在北京参加了一天中餐烹饪课程。
2013年,Frank再次邀请我来到北京,参加中国首场SpringOne大会,发表关于微服务和NoSQL的演讲。这次旅行的亮点是访问豆瓣和百度,这是我与中国科技公司的第一次近距离接触。他们的规模和创新技术都给我留下了非常深刻的印象。在这次旅行中,我参观了北京奥林匹克公园,回忆了曾在这里举行的2008年北京奥运会开幕式。我也抓住机会,继续“进修”中餐烹饪课程。
中国企业和开发者对微服务架构的热情让我印象深刻。但如同我给所有客户的忠告一样,我想对本书的读者说:
第一,要记住微服务不是解决所有问题的万能“银弹”。
第二,编写整洁的代码和使用自动化测试至关重要,因为这是现代软件开发的基础。
第四,确保你的服务松耦合,并且可以独立开发、测试和部署,不要搞成分布式单体(DistributedMonolith),那将会是巨大的灾难。
第五,也是最重要的,不能只是在技术上采用微服务架构。拥抱DevOps的原则和实践,在组织结构上实现跨职能的自治团队,这必不可少。
还必须记住:实现微服务架构并不是你的目标。你的目标是加速大型复杂应用程序的开发。
最后,我要感谢中国的所有客户,让我有机会与你们探讨微服务。我还要感谢那些让我能够讨论技术而不用学说中文(这可比微服务难多了)的同传翻译。我希望你会喜欢阅读这本书,它会教你如何成功开发微服务。我期待着再次访问中国,与我的读者见面,帮助更多企业客户实施微服务架构。
ChrisRichardson
2019年2月13日
中文版序一
良马难乘,然可以任重致远;良才难令,然可以致君见尊。
—墨子
曾经有一个客户把他们遇到的微服务问题列出来给我看,当时我觉得头绪万千但又无从说起,于是想到了墨子的这句话。
如果现在有人问我这个问题,那么我会推荐他们一边看ChrisRichardson的这本书,一边在实践中尝试和体验各种模式的优势与特点,然后大家一起讨论遇到的问题并提出解决思路。
大概从五六年前开始,我在工作中越来越多地谈到了微服务,并参与了一些客户应用的微服务改造,其中不乏成功的例子,当然也有没达到预期的情况。随着网络基础设施的高速发展,以及越来越多的企业和组织需要通过互联网提供服务,在考虑构建可以支持海量请求以及多变业务的软件平台时,微服务架构成为多数人的首选。微服务架构的出现是符合事物发展规律的:当问题足够大、有足够多的不确定性因素时,人们习惯把大的问题拆分成小的问题,通过分割、抽象和重用小而可靠的功能模块来构建整体的方案。但是当这些小的、可重用的部分越来越多时,又会出现新的问题。在相似的阶段,人们遇到的问题通常也是相似的,这个时候我们需要一些共识,需要用一些通用的词汇来描述问题以及解题思路和方案,这也是人们知识的总结。微服务模式就是这样一种总结和概括,是一种可以通用的共识,用于描述微服务领域中的问题及解决方案、方法和思路。这是我向大家推荐这本书的理由之一:讨论微服务的时候,这本书提供了必要的共同语言。
我们生活在一个高速发展的时代,微服务领域的技术、产品、模式日新月异,我们非常有幸参与和见证这个时代的发展。我们从解决昨天的问题里走出来,又走向更多的问题。在这个过程中,我们解决的问题的规模和复杂度都是成倍提升的。相信很多和我一样喜欢体验这种从无到有的过程、喜欢亲手解决问题的成就感、喜欢用独立思维去面对问题的人,都会喜欢这本书。在此,再次对ChrisRichardson先生表示感谢,他为这个领域贡献了宝贵的知识财富。
蔡书
独立顾问,PolarisTech联合创始人
中文版序二
国际数据公司(IDC)研究表明,2018~2021年间,全球数字化转型方面的直接支出将达到5.9万亿美元。埃森哲(Accenture)指出,目前在中国仅有7%的企业成功地实现了数字化转型,而这些成功转型的公司,它们的业绩复合增长率是尚未转型的同行企业的5倍之多。
数字化转型依赖技术创新。美国风险投资机构Work-Bench在《2018企业软件调研年报》中推论:以微服务为代表的云原生技术是帮助企业实现有效数字化转型的唯一技术途径。数字化转型背景下客户的预期越来越高,需要企业的线上业务能快速迭代满足动态的市场需求,并能弹性扩展应对业务的突发式增长;而微服务由于其敏捷灵活等特性成了满足这些诉求的最佳答案。因此,微服务可成为企业进行数字化转型的强力催化剂。
微服务的概念虽然直观易懂,但“细节是魔鬼”,微服务在实操落地的环节中存在诸多挑战。我们在为企业提供PaaS、人工智能、云原生平台等数字化转型解决方案时也发现,企业实现云原生,并充分利用PaaS能力的第一步,往往是对已有应用架构进行现代化微服务改造,而如何进行微服务拆分、设计微服务逻辑、实现微服务治理等实操问题成为很大的挑战。
本书英文原作由微服务权威架构师ChrisRichardson先生所著。书中既包含了微服务的原理、原则,又包含了实际落地中的架构设计模式;既包含可举一反三的理念和概念,也包含类似领域驱动设计、Saga实现事务操作、CQRS构建事件驱动系统等具体可套用的范式。本书可以帮助读者把传统的单体巨石型应用循序渐进地改造为微服务架构,从微服务的拆分,微服务架构下业务逻辑的设计以及事务、API、通信等的实现,一直到微服务系统的测试与生产上线,帮助读者建立从无到有的完整微服务系统搭建的生命周期。
本书译者在云计算、云原生与微服务领域有多年实践经验和建树,译文既精确地还原了原著的内容,又结合译者自身的理解,让中文版本更加通俗易懂。虽身在云计算行业多年,我在通读译著后依然受益匪浅。相信本书对于企业CIO推动公司数字化转型战略、软件开发者提升自身技术架构功力,以及云原生爱好者以微服务切入最新的云原生体系,都有着极其重要的实践指导意义。
张鑫
才云科技CEO
译者序
2012年年初,我有幸加入了VMware公司的CloudFoundry团队,与ChrisRichardson、PatrickChanezon、JoshLong等业界大咖共事,在全球范围内开展CloudFoundry开发者社区和生态建设工作。7年前,云计算的市场格局与现在大为不同。那时,IaaS正高歌猛进,PaaS的价值仍旧备受质疑,“十二原则”还不为人所知,云端分布式系统的架构演化也正“摸着石头过河”。在这个时候,ChrisRichardson率先在业界提出了“FunctionalDecomposition”(功能性拆分)的概念,提出云计算环境下的分布式软件,应该按照功能性拆分的方式进行架构重构。这个想法与稍后业界公认的“微服务”概念不谋而合。
在VMware公司工作期间,以及之后各自的创业经历中,我跟Chris保持着良好的个人关系和工作合作关系。Chris是一个风趣、博学、经验丰富的架构师,他在软件行业有将近30年的经验,在Java社区更是享有盛名。在离开VMware公司后,他建立了microservices.io网站,专注微服务架构的咨询和培训工作,我也曾为他牵线搭桥,使他有机会为国内的企业客户提供咨询服务。
面对这些迷茫,Chris曾对我说,软件的架构设计,就是选择和取舍。面对围绕微服务的众多杂音,开发者和架构师应该具备选择和取舍的能力,应该站在比较高的角度俯瞰全局、权衡利弊,做出正确的架构和技术选择。这也是最初Chris写作本书的动机之一:为架构师提供一个微服务的全局视野,并教会架构师如何在纷繁复杂的情况下做出正确的架构选择和取舍。
本书的中文版出版后,我将与Chris重启针对中国市场的微服务咨询和培训业务。为此,我们发布了中文网站www.chrisrichardson.cn,并有针对性地设计了微服务培训和技术咨询的服务项目。我们期待与读者面对面交流的机会。