面向服务架构(SOA)是10年前提出的概念,而微服务架构则是现在最火的架构形式,这两者具体是什么呢?又有何区别呢?
首先我们先简单的介绍一下什么是面向服务的架构,它的英文全称:service-oriented architecture,这不是一种特定的技术,而是一种分布式计算的软件设计方法。它是一个组件模型,它将应用程序的不同服务通过这些服务之间定义好的接口联系起来。接口是采用中立的方式进行定义的,通用性高,可以独立在不同的硬件平台、操作系统和编程语言上进行使用。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。(引用维基百科)
以下指导原则是开发、维护和使用SOA的基本原则:
1、 可重复使用,高交互操作性。
2、 通用的匹配开放标准,对各厂商的产品兼容性高。
3、服务的识别和分类,提供和发布,监控和跟踪
那么微服务架构是什么呢?微服务(Microservices)是一种软件的架构风格。它的具体架构可以参考这篇文章。它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模组化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通讯。(引用维基百科)
了解了这么多,简单介绍一下这两者之间的区别:
1. 微服务说的直白一些就是组合化,它的每部分需要实现的功能可以有不同的小程序单独构成,然后相互之间协同实现一个大的目标。这个角度上来说,它们是一脉相承的额,但是面向服务的架构,没有微服务的分离度高,相互之间的关联度还是相对较高。举一个很简单的例子,就拿常见的医院和诊所,医院就是微服务架构,不同的部分分工不同,但是诊所就是一个医生必须全科,啥都要做,这就是SOA。
2. 微服务相比较来说,在各个组件上可以使用不一样的编程语言。
SOA是一种传统的软件体系结构,通过应用程序的不同组件之间的网络通信协议实现向其他软件组件提供服务,在10多年前使用极为广泛。微服务架构某种意义上基于SOA进行发展的,但是微服务的创建仅限于一个特定的业务功能,在各个相互配合的组件中,各自是独立的,基本上没有集中式管理,各自的实现也可以使用不同的编程语言和不同的数据库。
但是微服务相比较SOA有以下几个优点:
1、微服务更加关注于解耦,不追求系统之间的相关性。
2、微服务的系统发生改变只需要构建一个新的服务,简单快捷,但是SOA则需要对整个系统进行修改。
3、微服务使用的协议一般都是轻量级的协议,就像HTTP、Thrift API等协议,但是SOA则是使用更为复杂多样的多种消息协议。微服务的容错性能会更好,即使一个微服务出现问题,其他的微服务也会正常工作。
4、每个微服务都有单独的数据库,SOA则是共享一个数据库。
5、微服务的规模更小,SOA则是一个较大的规模。SOA可以是一个整体,也可以是多个微服务组成的。