像微服务这样的炒作似乎是凭空而来的。事实完全不是这样:许多范式转变使得微服务现在成为可能。在一系列博客中,我将从历史角度介绍微服务,并解释它为何会像现在这样受到热捧。在这篇博客中,我将对所有这些发展进行简要概述;在以后的博客中我将每次详细阐述一个主题。
微服务作为一种软件架构风格,将应用程序开发为一套相对较小的服务,每个服务都在自己的环境中运行,并基于简单的“轻量级”机制相互通信。这些服务围绕业务能力构建,独立部署,完全自动化。存在最低限 保加利亚号码数据 度的集中服务协调,可以基于不同的技术进行开发。
当将微服务与其他风格进行比较时,它们经常与“整体式架构”进行对比。在我看来,最好将它与服务导向(以下简称 SOA)进行比较:它主要是对我们从中吸取的教训的回应。本质上,这是一个从集中化到分散化的经典转变:SOA 需要强大的集中协调,而微服务则提倡强大的分散化。
自性传播疾病出现以来,许多观念发生了转变:
世界观:认识到世界是由不同的世界观组成的复杂体系;领域驱动设计告诉我们信息具有“有限的上下文”,并且在其之外它是无用的;
重用:重用主要是一种节省成本的手段,也是实现数据一致性的一种手段;事实证明,两者都没有最初想象的那么明显。在不同的“有界上下文”之间重用是一个坏主意,因为它会引入很多不必要的复杂性;
一致性:从数据库事务的角度来看,ACID 是一种与微服务的核心异步通信不太相符的口号;通过放弃永久的一致性,新的可能性就出现了;
资源的有限性:摩尔定律,即芯片上的电路数量每两年翻一番,仍然适用;一切都变得越来越快、越来越大(例如内部存储器),所以我们不必那么“节俭”;
前置时间:仍有组织每年发布几次,但越来越少;每天发布多次正成为常态;
这些范式转变得到了对信息系统发展观点改变的支持,我们不能孤立地看待这一点:
DDD,领域驱动设计:将问题域划分为子域,每个子域都有自己的语言;需要仔细在子域名之间进行“翻译”,以避免混淆;
CQRS,命令查询职责分离:严格将处理命令的逻辑(即在模型中实现状态改变)与使该信息可读取的逻辑分开;既复杂度降低了,而且可扩展性也提高了;
ES,事件源:基于“发布订阅”机制的解耦,其中“世界”由发生的事件定义;
技术推动因素:云、容器技术、测试和部署自动化,所有支持去中心化驱动的发展;
在微服务被誉为圣杯之前,需要注意的是:与每一波去中心化浪潮一样,混乱也潜伏着。