SOA

  百科里面的定义:面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。
其实前面一句话才是重点,后面一句是废话:因为当今的服务间调用大都通过http请求调用,接口已经独立于操作系统、硬件平台和编程语言,而rpc调用已经有类似thrift之类的框架,你根本不清楚电脑对面(http请求)和你交谈的是人还是狗。
SOA的作用是让不同服务间的调用解耦,从服务间耦合的直接调用变成通过数据总线的调用。

消息总线

  数据总线是SOA的核心(面两张图引用自博客),下面两张图最能说明问题:它解决了服务之间复杂的依赖关系。至于消息总线的实现方式SOA是不管的,它更多的是一种思想,其中一种实现是:数据总线作为一个服务注册单元,服务通过它发现其它服务,而服务间的调用实际还是直接调用,并不走数据总线。这种实现和微服务非常相似,由此引出了SOA和微服务的区别的问题。

面向组件架构是什么 面向关系的架构的定义_面向组件架构是什么


面向组件架构是什么 面向关系的架构的定义_面向组件架构是什么_02

SOA和微服务的区别

  微服务的注册中心根据其它服务上报的心跳维护一份服务名单,服务A要调用服务B,它先从自己通过注册中心同步到本地的服务名单查找B的地址,再拼接请求去调用服务B。注册中心就是一个数据总线,A到B的请求并没有走数据总线,但是却通过数据总线达到了解耦的目的。SOA还有一个名称叫做服务治理,如果你搜索springcloud(微服务)服务治理,搜出来的一定是eureka,eureka就是springcloud的注册中心。
  SOA和微服务都被称作“架构”,而且看起来它俩好像没什么区别,我们不妨把SOA看做是比微服务抽象层次更高的一种架构,一种思想,把微服务看做一种实现,例如我们可以考虑设计另一种完全不同于微服务的数据总线:所有服务间调用的请求和响应数据全部走数据总线。这样看来,微服务只不过比SOA更接地气,在服务治理、负载均衡、路由等方面走得更远一些。