前言

“微服务”是一个新名词,但其所代表的理念实际上由来已久。2006年,Werner Vogels(Amazon公司CTO)就曾经在JAOO 会议上做过关于Amazon Cloud和Amazon合作伙伴模型的演讲。在演讲中,他提到了奠定NoSQL基础的CAP定理。此外,他还谈到了一些集开发和运维于一体的小团队,这些团队的软件提供多组服务,且每组服务有各自的数据库。现在,这种团队协作方式被称作DevOps,这种软件架构就是我们说的微服务。

后来,有个客户需要将新技术模块集成到遗留项目中,让我给他们提供解决方案。经过几番将新模块直接集成到遗留代码中的尝试,我们最终开发了一个新应用。这个新应用采用完全不同于遗留项目的技术栈,新旧两个应用之间的耦合仅在于HTML链接以及一个共用的数据库。除了共用数据库,这实质上就是一个微服务的方案。那时还是2008年。

2009年,我的另一个客户将其整个基础架构划分成多组REST服务,每组服务交由不同团队开发。这在今天也可称为微服务。那时,很多业务建立在Web之上的公司都纷纷转向了类似的架构模式。再后来,我意识到持续交付对软件架构的重大影响,而微服务架构对持续交付而言有着诸多优势。

近年来,包括一些经验老到的架构师在内的许多开发人员都开始投身于微服务方案的实践中。这也是我写这本书的初衷。和其他所有框架一样,微服务架构不可能解决一切设计问题。然而,与现有方案相比,微服务是个不错的选择。

内容概览

本书围绕架构和组织的主题,详细地介绍了微服务。当然,具体的程序实现方案也占了相当大的篇幅。书中用了一个完整示例来介绍微服务的具体实现。关于纳米服务(nanoservice)的讨论,则阐明了模块化并未止步于微服务。本书提供了详尽的信息,让读者可以顺利地开始使用微服务。

目标读者

本书的目标读者是所有希望采用微服务作为架构方案的管理者、开发人员和架构师。

管理者

当团队的组织形式适合微服务架构时,微服务才能产生最佳效果。在本书导论部分,管理者可理解微服务的基本理念。在后面的章节中,管理者可重点关注微服务架构对组织机构的影响。

开发人员

开发人员可将本书当作构建微服务的技术大全,通过本书可以掌握微服务的实战技能。本书通过一个详细的微服务示例,以及大量的其他技术介绍(例如纳米服务的示例),来帮助开发人员理解基本概念。

架构师

通过本书,架构师可从架构角度认识微服务,并深入理解相关的技术问题和团队组织问题。

本书特别关注了一些有可能出现的实验情景,以便读者将学到的新知识用于实战。同时,本书还提供了一些获取相关信息的渠道,以帮助感兴趣的读者深入研究相关技术。

结构和内容

本书分为四部分。

第一部分 动机和基础知识

第一部分解释采用微服务的原因,并介绍微服务架构的基础知识。第1章介绍了微服务的基本特点,包括优点和缺点。第2章介绍了两个采用微服务的案例:一个电商应用和一个信号处理系统。这部分内容能让读者对微服务及其应用有一个大致的了解。

第二部分 微服务是什么,用还是不用

第二部分不仅详细地研究了微服务,还具体分析了微服务的优缺点。

 第3章从3个角度研究了“微服务”一词的定义:微服务的大小,康威定律(Conway’s Law,该理论认为软件团队的组织结构决定软件架构),以及基于领域驱动设计和限界上下文的技术视角。

 第4章详细介绍了采用微服务的原因。微服务的优势不仅存在于技术层面上,还体现在团队组织上。从业务角度考虑,也有充分的理由采用微服务。

 第5章分析了微服务所带来的独特挑战。其中既包括技术挑战,也包括架构、基础设施、运维方面的挑战。

 第6章主要分析了微服务与面向服务架构之间的区别。这两个概念乍一看似乎关系紧密,但实质上有非常多的不同之处。

第三部分 微服务的实现

第三部分主要研究微服务的实际应用,论述如何在程序中体现第二部分所说的微服务的优点,以及如何应对相关的挑战。

 第7章探讨了基于微服务的系统架构,涉及领域架构及相关的技术挑战。

 第8章介绍了微服务的集成,以及相互通信的不同方案。这部分内容不仅包含了REST、消息等通信方式,还涉及用户界面(UI级别的集成)和数据复制(数据库级别的集成)。

 第9章展示了微服务可用的架构,例如命令查询职责分离(CQRS)、事件溯源以及六边形架构。这一章最后指明了应对特定挑战所适合采用的技术。

 第10章主要关注测试。为了让不同微服务能独立部署,测试也应尽可能地独立。但测试不仅要针对各个独立的微服务,还要对系统做整体检查。

 第11章探讨了运维和持续交付。微服务架构产生了大量可部署的构件,因而会增加对基础设施的需求。这也是采用微服务时不得不面对的一个实质性障碍。

 第12章阐明了微服务是如何反过来影响团队结构的。微服务毕竟是一种架构,理应影响并改进团队结构。

第四部分 技术

第四部分在代码层面详细介绍了微服务的技术实现。

 第13章包含一个基于Java、Spring Boot、Docker和Spring Cloud实现的详尽示例。这一章旨在用一个容易运行的示例应用作为切入点,以实际的技术来阐释微服务的理念,并作为微服务编程的入门指引。

 第14章介绍了粒度比微服务更细的纳米服务。纳米服务需要特定的技术和方案来支持。这一章探讨了不同技术方案及其优缺点。

 第15章展示了如何开始采用微服务。

延伸阅读

本书包含了一些微服务专家从不同角度撰写的文章。每位专家用大概2页的篇幅总结了他们对微服务的主要看法。这些文章各具特色:有的与本书观点相辅相成,有的关注点与本书不同,还有的与本书观点相冲突。这说明,软件架构领域通常没有唯一正确的答案,你能看到不同观点百家争鸣。这些文章为读者提供了一个接触不同观点的机会,以便形成自己的见解。

阅读路线

本书内容适合不同类型的读者。当然,读者可以且应该阅读和本职业并非直接相关的章节,但表P-1仍然列出了不同类型的读者最适合阅读的章节。

图像说明文字

如果仅想从整体上了解微服务,那么推荐阅读每章的总结部分。想学到实际技能的读者可直接从第13章和第14章开始,这些章节介绍了实际的技术和代码。

各章节的“动手实践”部分通过实际练习,帮助你加深理解。如果某个章节特别吸引你,希望你可以完成相关的练习来更好地掌握这个章节的内容。

补充资料

本书勘误表、示例代码的链接以及其他信息可在https://microservices-book.com/网站上找到。示例代码可在https://www.github.com/ewolff/microservice/处获取。

读者在informit.com注册本书,可方便地获取下载、更新、修订的内容。访问informit.com/register,注册账号并登录后,可开始图书注册流程。输入本书英文版ISBN(9780134602417),然后点击提交按钮。这一流程完成后,就可以在“Registered Products”一栏下面找到本书的更多信息。

目录

  • 前言
  • 第一部分 动机和基础知识
  • 第1章 预备知识
  • 第2章 微服务应用案例
  • 第二部分 微服务是什么,用还是不用
  • 第3章 什么是微服务
  • 第4章 采用微服务的原因
  • 第5章 挑战
  • 第6章 微服务与SOA
  • 第三部分 微服务的实现
  • 第7章 微服务系统架构
  • 第8章 集成与通信
  • 第9章 单个微服务架构
  • 第10章 微服务与微服务系统的测试
  • 第11章 微服务的运维及持续交付
  • 第12章 微服务架构的组织效应
  • 第四部分 技术
  • 第13章 微服务架构示例 
  • 第14章 纳米服务技术
  • 第15章 把微服务用起来