前言几年前,我们当中的一些人还在讨论微服务是一个有趣的想法。后来的事情你已经知道了,它已经成为全球数以百计的公司的默认软件架构(这当中有许多初创公司,他们创办的目的可能是为了解决微服务引发的问题),并且让每个人在跑去跳上这辆马车的同时,又在担心它最终会消失在地平线上。我必须承认,造成这种现象,我要承担部分的责任。自从我在2015 年就微服务写了《Building Microservices》一书后,我就靠与其他人合作来帮助人们理解这种架构类型而谋生。我一直在努力,打破对于概念的炒作,而帮助公司决定微服务是否适合他们。对于我的许多拥有现有(并非面向微服务的)存量系统的客户来说,挑战在于如何采用微服务架构。你如何在不停止所有其他工作的情况下,对现有系统进行重新架构?这就是本书的意义所在。同样重要的是,我的目标是给你一个对于微服务架构带来的挑战的诚实的评估,并帮助你了解开始这个旅程是否适合你。你将学到什么?本书旨在从思考和执行的维度,深入探讨如何将现有系统分解为微服务架构。我们将触及与微服务架构相关的许多主题,但重点在拆分事物的方面。有关微服务架构的通用性指南,我之前的书《Building Microservices》是一个不错的开始。事实上,我强烈建议你把那本书看作是本书的配套书籍。第1 章包含了对什么是微服务的概述,以及进一步探讨了导致我们形成这类架构的想法。它对刚接触微服务的读者来说应该很有效,但我同样强烈建议那些有微服务实施经验的人不要跳过这一章。我认为在技术发展的浪潮中,一些重要的微服务的核心思想常常被忽略。这些是本书将反复提到的概念。了解更多关于微服务的知识是好事,但知道它们是否适合你则是另一回事。在第2 章中,我将指导你如何去评估微服务是否适合你,并为你提供一些真正重要的指导方针,从而管理从单体架构到微服务架构的过渡过程。在这章中,我们将触及从领域驱动设计到组织变革模型的所有内容。即使你决定不采用微服务架构,这些重要的基础也将使你处于有利地位。在第3 章和第4 章中,我们将深入探讨与拆分单体相关的技术问题。我们会探索一个真实世界的例子,并提取出了迁移的原则。第3 章的重点是应用拆分,第4章是深入研究数据库拆分的技术。如果你真的想从一个单体系统转移到一个微服务架构,我们必须要将数据库拆分开来!第5 章探讨了随着采用微服务架构的推进而会出现的各种挑战。这些微服务系统可以带来巨大的好处,但同时,许多复杂的问题也会随之而来,这些问题是你之前从未遇到过的。在这一章中,我会帮助你在问题开始出现时就能及时发现它们,并会提供处理微服务带来的痛点难点的相关方法。O’Reilly 在线学习平台(O’Reilly Online Learning)近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。联系我们任何有关本书的意见或疑问,请按照以下地址联系出版社。美国:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)奥莱利技术咨询(北京)有限公司我们为这本书建立了一个网页,在那里我们列出了勘误表、样例和任何其他信息。你可以访问这个页面来获取这些信息:https://oreil.ly/monolith-to-microservices。请发送电子邮件至:errata@oreilly.com.cn,来对本书进行评论或提出技术问题。关于我们的书籍、课程、会议和新闻的更多信息,请见我们的网站:http://www.oreilly.com。我们的Facebook:http://facebook.com/oreilly。我们的Twitter:http://twitter.com/oreillymedia。我们的YouTube:http://www.youtube.com/oreillymedia。鸣谢如果没有我出色的妻子Lindy Stephens 的帮助和理解,这本书是不可能完成的。这本书是为她而写的。Lindy,很抱歉在各种截止日期来来去去时,我是如此的脾气暴躁。我还要感谢可爱的吉尔曼·斯德恩家族的所有支持,我很幸运,有这样一个美好的家庭。本书极大地受益于那些自愿付出时间和精力去阅读各种草稿并提供宝贵见解的人们。我特别想感谢Chris O’Dell, Daniel Bryant, Pete Hodgson, Martin Fowler,Stefan Schrass 和Derek Hammer 在这方面所付出的努力。还有一些人以多种方式做出了他们的贡献,因此我还要感谢Graham Tackley, Erik Doernenberg,Marcin Zasepa, Michael Feathers, Randy Shoup, Kief Morris, Peter Gillard-Moss,Matt Heath, Steve Freeman, Rene Lengwinat, Sarah Wells, Rhys Evans 和Berke Sokhan。如果你在本书中发现错误,这些错误是我的,不是他们的。O’Reilly 的团队也给予了我极大的支持,我想重点感谢我的编辑Eleanor Bru和Alicia Young,此外还有Christopher Guzikowski, Mary Treseler 和Rachel Roumeliotis。我还想对Helen Codling 和她在世界其他地方的同事说一声感谢,感谢他们继续带着我的书去参加各种会议,感谢Susan Conant 在不断变化的出版世界中让我保持清醒,感谢Mike Loukides 最初让我参与奥莱利。我知道还有很多人在幕后帮助我,所以也要感谢你们所有人。除了那些直接为本书做出贡献的人之外,我还想鸣谢其他一些人,不管他们是否意识到,他们都为本书的诞生做出了贡献。因此,我想感谢(排名不分先后):Martin Kelppmann, Ben Stopford, Charity Majors, Alistair Cockburn, Gregor Hohpe,Bobby Woolf, Eric Evans, Larry Constantine, Leslie Lamport, Edward Yourdon,David Parnas, Mike Bland, David Woods, John Allspaw,Alberto Brandolini, Frederick Brooks, Cindy Sridharan, Dave Farley, Jez Humble, Gene Kim, James Lewis, Nicole Forsgren, Hector Garcia-Molina, Sheep &Cheese, Kenneth Salem, Adrian Colyer,Pat Helland, Kresten Thorup, Henrik Kniberg, Anders Ivarsson, Manuel Pais, Steve Smith, Bernd Rucker, Matthew Skelton, Alexis Richardson, James Governor 和Kane Stephens。与通常情况一样,我很可能漏掉了某些对这本书做出巨大贡献的人。对于这些人,我只能说很抱歉忘记了感谢你,希望你能原谅我。最后,有些人时不时地问我写这本书时使用的工具。我使用Visual Studio Code和Jo?o Pinto 的AsciiDoc 插件在AsciiDoc 中写作。这本书是用Git 进行源代码控制的,使用O’Reilly 的Atlas 系统。我主要在我的笔记本电脑上写作,使用外部的Razer 机械键盘,但在最后也大量使用了运行工作副本的iPad Pro 来完成最后几项工作。这使我能够在旅行中写作,有一次,我在去奥克尼群岛的渡轮上写了关于数据库重构的文章,这个经历令人难忘。而由此产生的晕船症状是完全值得的。