1.3 微服务架构与SOA的比较
SOA(Service-Oriented Architecture)即面向服务架构,是一种粗粒度、松耦合的面向服务架构设计方法。SOA可以看作B/S模型、XML/Web Service技术之后的自然延伸。
SOA是一种企业级的架构设计方法,使用企业服务总线(ESB)的方式,构建一个能够更高效、更可靠、更具重用性的企业信息系统。相比于C/S和B/S等模式的设计,使用SOA架构的系统已经取得了很大的进步,系统可以更加从容地面对业务的急剧变化,所以SOA曾经风靡一时,例如Dubbo、Dubbox、Mule、WSO2、CXF等都是较为优秀的SOA开源工具。
微服务架构与SOA从表面上看是有一点相似的,以至于早期有人认为微服务就是一个细粒度的SOA。实际上,它们的区别还是很大的。
区别之一:微服务通信的轻量级设计与SOA重量级设计。这也是两种架构的最大区别。微服务的通信设计使用简单的HTTP,一般基于REST协议实现。而SOA一般使用复杂的协议,如WebService或BPEL(Business Process Execution Language,业务流程执行语言)等,还需要使用服务描述性语言来定义标准接口。
区别之二:微服务的自治性与SOA的集中式管理。微服务架构使用去中心化的扁平化管理方式,每个服务都是一个独立的应用程序:独立管理、使用独立的数据库、独立部署和独立运行。SOA是一种整体式架构,使用集中式的管理方式和统一的数据中心。所以微服务的开发和部署更加灵活和快速,可以更快地响应需求的变化和业务的更新。
区别之三:SOA与微服务架构的应用的规模不同,SOA是在企业计算领域中产生的一种架构设计方法,在应用规模上的范围有限。而微服务架构是产生于互联网环境中的一种设计方法,它更能适应无限广阔的环境,以及互联网高流量、高并发的规模扩展。
微服务架构的高可用设计、自由伸缩、负载均衡、故障转移等特性是SOA设计不够重视的地方。微服务的高可用设计通过微服务治理,为每个微服务的管理和部署提供了一个可以扩展的无限广阔的空间,它可以表现为一个三维结构,如图1-3所示。
图1-3
在这个三维结构中,如果我们用y轴表示微服务应用,用x轴表示微服务应用副本,用z轴表示微服务治理,那么它将提供服务路由和负载均衡管理等功能。如果有需要,它还可以提供分区管理的功能。这种三维结构让微服务天生就具备了自由伸缩的条件,以及可以进行无限扩展的能力。