微服务架构的演变

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_41619981/article/details/82057271

微服务是一种服务间松耦合的、每个服务之间高度自治并且使用轻量级协议进行通信的可持续集成部署的分布式架构体系。这一句包含了微服务的特点,微服务架构和其他架构有什么区别?以下对比一些常见的架构。

单体架构

        单体架构是最简单的软件架构,常用于传统的应用软件开发以及传统Web应用。传统Web应用,一般是将所有功能模块都打包(jar,war)在一个Web容器(JBoss、Tomcate)中部署、运行。随着业务复杂度增加、技术团队规模扩大。在一个单体应用中维护代码,会降低开发效率。即使是处理一个小需求,也需要将所有机器上的应用全部部署一遍,增加了运维的复杂度。

SOA架构

        当某一天使用单体架构发现很难推进需求的开发、以及日积月累的技术债,很多企业会开始做单体服务的拆分。拆分的方式一般有水平拆分以及垂直拆分。垂直拆分把一个应用拆成松耦合的多个独立的应用,让应用可以独立部署,有独立的团队进行维护。水平拆分把一些通用的,会被很多上层服务调用的模块独立拆分出去,形成一个共享的基础服务,这样拆分可以对一些性能瓶颈的应用进行单独的优化和运维管理,也一定程度防止了垂直拆分的重复造轮子。 
SOA也叫面向服务的架构,从单体服务到SOA的演进,需要结合水平拆分以及垂直拆分。SOA强调用统一的协议进行服务间的通信,服务间运行在彼此独立的硬件平台但是需通过统一的协议接口相互协作,也即将应用系统服务化。举个易懂的例子,单体服务如果相当于一个快餐店,所有的服务员都是一样的,又要负责收银结算,又要负责做汉堡,又要负责端盘子,又要负责打扫,服务员之间不需要有交流,一个用户来了一个服务员从前到后负责到底。SOA相当于让服务员有职责分工,收银员负责收银,厨师负责做汉堡,保洁阿姨负责打扫等等。所有服务员需要同一种语言交流,方便工作协调。

微服务和SOA

        微服务也是一种服务化,不过其和SOA架构的服务化概念也是有区别的。可以从几个关键字来理解:

  1. 松耦合: 每个微服务内部都可以使用DDD(领域驱动设计)的思想进行设计领域模型,服务间尽量减少同步的调用,多使用消息的方式让服务间的领域事件来进行解耦。
  2. 轻量级协议:Dubbo是SOA的开源的标准实现之一,类似的还有像gRPC、Thrift等。微服务更倾向于使用Restful风格的API,轻量级的协议可以很好得支持跨语言开发的服务,可能有的微服务用Java实现,有的用Go语言,有的用C++,但所有的语言都可以支持Http协议通信,所有的开发人员都能理解Restful风格API的含义。
  3. 高度自治和持续集成:从底层的角度来说,SOA更加倾向于基于虚拟机或者服务器的部署,每个应用都部署在不同的机器上,一般持续集成工具更多是由运维团队写一些shell脚本以及提供基于共同协议(比如dubbo管理页面)的开发部署页面。微服务可以很好得和容器技术结合,容器技术比微服务出现得晚,但是容器技术的出现让微服务的实施更加简便。目前Docker已经成为很多微服务实践的基础容器。因为容器的特色,所以一台机器上可以部署几十个几百个不同的微服务。如果某个微服务流量压力比其他微服务大,可以在不增加机器的情况,在一台机器上多分配一些该微服务的容器实例。同时,因为Docker的容器编排社区日渐成熟,类似Mesos,Kubernetes以及Docker官方提供的swarm都可以作为持续集成部署的技术选择。

        其实从架构的演进的角度来看,整体的演进都是朝着越来越轻量级,越来越灵活的应用方向。甚至到近两年日渐成熟起来的Serverless(无服务)架构。从单体服务到分层的服务,再到面向服务、再到微服务甚至无服务。对于架构的挑战是越来越大的。

猜你喜欢

转载自blog.csdn.net/sinat_41619981/article/details/82057271