Way To MicroService

脱胎于SOA框架,微服务(MicroService)架构以其服务自治的技术理念在互联网时代大放异彩。笔者在此想谈谈微服务出现的历史必然,回顾其起源与发展,也许能帮助读者对微服务有更加深刻的了解。

SOA时代

经历上世纪70年代的软件危机后,软件工程这门研究软件开发最佳实践的学科登上历史舞台。

SOA作为软件工程史上里程碑式的存在,结束了分布式软件系统构件之间需要繁琐而复杂的点对点集成的蛮荒时代,以其ESB(企业服务总线)模式与WebService协议栈,快速征服了当时的软件开发者。

SOA

SOA的思想,正如其名:Service-Orient-Architecture,即通过称抽象软件为服务,使用通用化的接口管理与复用软件资源。

SOA以其规范化的统一连接,便利了软件复用,避免了软件之间复杂的点对点连接。服务间在 ESB 调度下无须相互依赖却能相互通信,既带来了服务松耦合的好处,也使得SOA技术极为契合企业业务分析技术中的BPM(业务流程编排)模式。二者的契合,使得SOA成为了传统公司组织业务流程工具的不二选择。

ESB

虽然ESB不是SOA理念中的必要组成,即使不使用ESB,也能够实现SOA架构,但是,ESB的存在极大的便利的实现过程,成为了SOA约定俗成的一部分。

ESB作为SOA系统的中间组件,承担了集成系统所有组成的功能,实现了服务发现、服务治理、日志等功能,从而对开发人员屏蔽分布式的细节,使其能够专注于业务。

疲软的SOA

SOA凭借其ESB、WebService等技术理念将企业内部或外部诸多服务组织在一起,从而实现了对企业资源的统筹及服务的分布式部署,是企业软件系统架构设计的优秀实践,但是,在近年兴起的互联网时代,却显得有些无力。

  1. SOA深厚的技术栈决定了其不可避免的重量级,WebService协议族的诸多扩展提供了对不同场景的应对,这些精密严格的协议,确实屏蔽了分布式架构本身的复杂性,但是过于深厚的技术栈本身也无疑极大地提升了对开发人员水平的要求
  1. 服务中,其他组织提供的服务的比重较大,企业无法对这些服务进行有效控制,SOA对接口的要求,使得企业无法很好地接入外部的服务。

微服务

起源

仔细想来,企业场景下的SOA实际上是一个十分中心化的架构,全部服务围绕ESB开发、治理,因而服务(哪怕是外部服务)也必须按照SOA指定的接口规范来接入。这对传统的企业化软件并非什么问题,内部服务自不必说,统一安排即可;外部服务,也仅需进行少量沟通(使用SOA的企业往往是金主,服务开发方愿意为客户进行定制服务)即可谈拢。

而互联网时代呢?这无疑是一个近乎完全信息化的时代。大多互联网公司仅仅提供脱离实际物质资产的信息类服务,成功往往源于一个引领时代的idea。在这些公司的视角,软件不是企业组织业务的手段,而是业务本身,能否快速上线服务成为了企业能否成功的关键。因而,SOA过度严苛的规范,成为了开发的负担;同时,大多数的服务提供方不再拥有业务上的金主,而是广泛地为所有服务使用者提供同质化的服务,这就无法满足SOA对外部服务符合企业内部规范的需求。

既然问题找到了,那么就好办了。

答案即放弃统一的规范与中心化的ESB,实现服务的自治,微服务就此脱胎。

2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API通信。

微服务的分布式方案

上文提到,SOA的出现解决了点对点集成复杂,服务资源复用困难的问题。在放弃SOA的ESB后,微服务的开发者就需要自己来处理服务的调用、治理等问题了。所幸,今时不同往日,已有了太多成熟的分布式框架可选,开发者也不需要再原始地接入服务了。

上图的分布式框架,横跨服务发现、服务治理、分布式存储等多个领域,为微服务开发提供了极大的便利,倒不如说,正是有着这些技术的存在,微服务才得以诞生。

自治的服务

如果说微服务与普通的服务有什么不同,那么最为显著的特征,就是自治

微服务的开发团队对自己的服务有近乎完全的掌控,从技术选型、架构设计到部署运维,都是团队内部的决定,只要能够提供所承诺的服务即可。

自治,决定了微服务许多显著的特性:

  1. 快速迭代:作为一个独立的服务,微服务能够独自进行版本迭代而不影响整个体系中的其他组件
  2. 自动化运维:微服务的快速迭代,决定了其对自动化运维的需要
  3. 数据去中心化:服务的自治,必然意味着数据的自治,在数据高度耦合的情况下,又谈何自由
  4. 弱管道,强终端:SOA中的ESB在微服务中被各异的轻量级框架所代替,服务的治理再次回归终端
  5. ……

同时,微服务很好地继承了SOA易于复用的服务的技术理念。或许正如Martin Flower所说,我们应当将SOA视为微服务的超集,而传统的基于ESB的SOA,同微服务一般仅是SOA理念的的一种实现。

现今的微服务

虽然脱胎于SOA,但经过多年的独立发展,微服务已然抹去了大多数SOA的影子,成了一类独立的软件架构。

微服务服务自治的理念,与其他技术领域的相关技术一同发展,如今,容器技术、CI/CD已然成为微服务开发不可缺少的一环。

总结

在分布式发展初期,企业用SOA来屏蔽分布式细节;而如今,为了服务解耦与高效开发,互联网企业拥抱了微服务;近来,云计算提供商更是有掀起无服务浪潮,将分布式细节交给云提供商来处理。

从中,我们不难发现,服务所需算力在资源化、服务本身在资源化、服务所需的管理亦在资源化,一如曾经的水、能源,本来每家每户自管理水井、燃料,现如今,通过供水设施、供电设施、天然气管道便能随用随取。这也是信息、算力资源化的大势所趋。