分布式系统的演进
SOA到微服务
从20世纪70年代的模块化编程,80年代的面向事件设计,90年代的基于接口/构件设计,再到本世纪出现的SOA——基于服务的架构。服务化的架构成为了构造分布式计算的应用程序的方法。
它将应用程序功能作为服务发送给最终用户或者其他服务。它采用开放标准与软件资源进行交互,并采用标准的表示方式。开发、维护和使用SOA要遵循以下几条基本原则。
- 可重用,粒度合适,模块化,可组合,构件化以及有互操作性。
- 符合开放标准(通用的或行业的)。
- 服务的识别和分类,提供和发布,监控和跟踪。
随着SOA的发展,工业界根据实践经验,在过去的数十年内不断地对SOA进行裁剪和优化。比如,SOA早期的SOAP、WSDL和XML基于这些重量级协议基本上已经被抛弃了,而改成了更轻量化的RESTful和JSON这样的方式。ESB(Enterprise Service Bus,企业服务总线)这样非常重的东⻄也被简化成了Pub/Sub的消息服务,最终也出现了现在流行的轻量级的服务化架构——微服务。
在整个进化过程中,面向服务的架构有经历了以下三个阶段:
20世纪90年代前,是单体架构,软件模块高度耦合。因为都是高度耦合在一起的。就像⻮轮一样,当你调一个服务时,这个服务会调用另一个服务,然后又调用另外的服务……于是整个系统就转起来了。 但是这本质是比较耦合的做法。
2000年左右出现了比较松耦合的SOA架构,这个架构需要一个标准的协议或是中间件来联动其它相关联的服务(如ESB)。这样一来,服务间并不直接依赖,而是通过中间件的标准协议或是通讯框架相互依赖。这其实就是IoC(控制反转)/DIP(依赖倒置原则)的设计思想在架构中的实践。它们都依赖于一个标准的协议或是一个标准统一的交互方式,而不是直接调用。
2010年后,出现了微服务架构MSA(Micro Service Architecture),这个架构更为松耦合。每一个微服务都能独立完整地运行(自包含),后端单体的数据库也被微服务这样的架构分散到不同的服务中。而它和传统SOA的差别在于,服务间的整合需要一个服务编排或是服务整合的引擎。就好像交响乐中需要有一个指挥来把所有乐器编排和组织在一起。一般来说,这个编排和组织引擎可以是工作流引擎,也可以是网关。当然, 还需要辅助于像容器化调度这样的技术方式,如Kubernetes。
微服务到云原生
在从SOA转向微服务的过程中,在服务交互上发生的另一个根本转变就是服务不依赖于所具有的集中式智能路由层,而是依赖于具有某些平台级功能的智能端点。服务的实现是通过在每个微服务中嵌入传统ESB的部分功能,并转为使用不具有业务逻辑元素的一些轻量级协议。在不可靠的网络层(使用诸如Hystrix之类的库)实现服务交互。 随着演化,因为Kubernetes的出现,服务交互进化为服务网格(Sevice Mesh)。
服务网格吸引人之处在于,它甚至要比传统的ESB更智能。网格可以执行动态路由、服务发现、基于延迟的负载平衡、响应类型、指标和分布式跟踪、重试、超时,包括其它所能想到的所有特性。这就是第三代的服务化架构:CNA - Cloud Native Architecture。
与ESB的不同,服务网格只有一个集中路由层,每个微服务通常都具有自己的路由器,即一个使用额外中央管理层执行代理逻辑的“跨斗模式容器”(Sidecar Container)。更重要的是,管道(即平台和服务网格)中并不维持任何业务逻辑。管道完全聚焦于基础架构问题,而让服务聚焦于业务逻辑。上图表示了为适应云环境的动态和不可靠特性,ESB和微服务在认知上的演变情况。
如果查看服务的其他一些方面,企业就会注意到Cloud Native不仅影响了端点和服务交互。Kubernetes平台(及其所有附加技术)还负责资源的管理、调度、部署、配置管理、扩展和服务交互等。与其称之为“智能代理哑管道”,更好的描述应是一种具备正确职责的智能平台和智能服务。它不仅是与端点相关,而且也是一个完整的平台,实现主要聚焦于业务功能的服务在所有基础架构上的自动化。
技术趋势
随着服务化架构的演进,企业IT也开始向分布式、互联网、云计算、分层构架的方向演进。
尤其是在大型企业跨部⻔、跨职能的场景下,企业的技术架构要做到即要保障各个部⻔的特殊性和快速性,又要保障整个企业的协同一致性。于是,整个行业的企业架构都在向分布式平台化的方向发展。
虽然传统各个部⻔组织的系统具有非常不错的独立性、隔离性并可以分开治理。但是其劣势也非常明显,系统间互相割裂,技术架构不统一,无法面向应用按需分配,跨系统需要协调开发、联调、测试,管理和系统对接都变得异常地复杂,资源的浪费和整体的运维都有非常高的成本。
而对于分布式平台化的架构,一方面可以非常自然出现共享业务实现快速开发,另一方面也可以通过虚拟化技术进行资源共享,提高资源利用率和降低运维成本。同时,可以打造“大中台、小前台”的企业战略级架构,以中台方式,提供企业的整体能力开发体系,不但可以以更有效率、更为统一的组织架构形态,并可以通过应用和平台的解耦,为对外输出打造和建设企业生态圈提供了强有力的技术支撑。