应用架构演进

传统垂直应用架构

06年前,比较流行的有LAMP架构,MVC架构(Spring,Struts,Hibernate),厚重的EJB企业架构也流行了很长一段时间。他们都属于垂直应用架构,技术比较单一,学习成本低,开发上手快,因此很长一段时间都处于统治地位。

举例说明MVC的垂直架构的示意图如下所示:

通常MVC架构的应用代码会统一打包成一个war包,部署在Tomcat等web容器中。不同的应用功能之间通过本地API进行调用,基本不存在跨进程的远程服务调用。

但是,垂直架构的缺点十分突出,主要表现在复杂应用的维护成本高,部署效率逐渐的降低,团队协作效率差,部分公共功能重复开发,代码重复率居高不下,系统可靠性不断的变差,新功能上线的周期越来越长。

RPC 架构

RPC全称Remote Procedure Call,是一种进程间的通信方式,允许像调用本地服务一样调用远程服务,它的具体实现方式可以不同,例如Spring 的HTTP Invoker,Facebook 的Thrift 二进制私有协议通信。

06年后,随着移动互联网的发展,远程分布式调用已经成为主流,RPC框架也犹如雨后春笋。RPC框架的普及标志着传统垂直应用架构时代的终结。

RPC 框架原理

RPC 框架的目标就是让远程过程调用更加简单,透明,RPC框架负责屏蔽底层的传输方式(TCP 或UDP), 序列化方式(XML,JSON,二进制)和通信细节。框架的使用者只需要知道了解谁在什么位置提供了什么样的远程服务接口即可,开发者不需要关心底层通信细节和调用过程。

RPC 框架实现的技术核心点有

  • 远程服务提供者需要以某种形式提供服务调用相关的信息,包括但是不限于服务接口定义,数据结构,或者中间态的服务定义文件。
  • 远程代理对象:服务调用者调用的服务实际上是远程服务的本地代理,对于Java语言来说,它的实现就是JDK的动态代理,通过动态代理的拦截机制,将本地调用封装成远程服务调用。
  • 通信:RPC框架与具体的协议无关,
  • 序列化:远程通信,需要将对象转化为二进制码流进行网络传输,不同的序列化框架,支持的数据类型,数据包大小,异常类型,性能等都不同。一般好的框架都支持多种序列化方式。

业界主流的RPC框架有Facebook的Thrift,Google的gRPC等。

RPC框架的挑战

在大规模服务化之前,应用可能只是通过RPC框架,简单的暴露和引用远程服务,通过配置简单的URL地址进行远程服务调用,当服务越来越多时,服务URL配置管理越来越困难, 硬件负载均衡器的单点压力也越来越大,此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。

随着业务的发展,服务间的依赖错综复杂,甚至分不清哪个应用需要在哪个应用之前启动,同时,服务的调用量越来越大,服务的容量问题也就暴露出来了。服务上线容易下线难,上线前的审批,下线通知,需要统一的服务生命周期管理泪流成进行管控,不同的服务安全权限不同,如何保证敏感服务不被误调用。服务化之后,服务治理问题,单凭RPC框架是无法解决的。

SOA 面向服务的架构(可以说RPC是SOA架构的一种实现)

SOA 是一种粗粒度,松耦合的以服务为中心的架构,接口之间通过明确的协议和接口进行通信。SOA帮助工程师们站在一个新的高度理解企业级架构中各种组件的开发和部署形式。相对于传统的非服务化架构,SOA能够更加从容的应对复杂企业系统集成和需求的快速变化。

它的设计原则主要有服务可复用,服务共享一个标准契约,服务是松耦合的,服务是底层逻辑的抽象,服务是可组合的,可编排的,服务是无状态的。所以SOA服务治理是关键。

微服务架构

微服务架构(MSA)是一种服务化架构风格,通过将功能分散到各个分散的服务中以实现对解决方案的解耦。

主要特征有,原子服务,专注于做一件事,高密度部署(重要的服务可以独立进程部署),敏捷交付,微自治(服务足够小,功能单一,可以独立打包,部署,升级)

微服务对比SOA

  • 服务拆分粒度:SOA首先要解决的就是异构应用的服务化,微服务强调的是独舞拆分要尽可能的小,最好是独立的原子服务
  • 服务依赖:传统的SOA服务,由于需要重用已有的资产,存在大量的服务间依赖:微服务的设计理念是服务自治,功能单一独立,,避免依赖其他服务产生耦合,耦合会带来更高的复杂度。
  • 服务规模:传统的SOA服务粒度较大,多数会采用将多个服务合并打成war包的方案,因此服务实例数比较有限,微服务强调尽可能的拆分,同时,很多服务会独立部署,这也会导致服务规模急剧增加,对服务治理和运维带来新挑战。
  • 架构差异 微服务化后,服务数量的激增会引起架构质量属性的变化,例如企业集成总线ESB逐渐被P2P虚拟总线替换,为了保证高性能,低时延,需要高性能的分布式服务框架保证微服务架构的实施。

用一张图概括服务化架构演进图如下:

(RPC算是SOA的一种简单实现)

分布式服务框架原理与实践