SOA首先在90年代中期得名,当时一家名为Gartner Group的公司认识到软件架构中的这一新兴趋势,采用它并在全球范围内推广它。通过这样做,他们成功地大大加快了这种架构模式的采用和进一步发展。但是,使用分布式服务作为软件架构的第一个记录可以追溯到80年代早期。
Microservices
从某种程度上讲,微服务是面向服务架构(SOA)演化的下一个阶段。基本上说,这种架构类型是开发软件,Web或移动应用程序作为独立服务套件的一种特殊方式 - 又叫做微服务。创建这些服务仅用于一个特定的业务功能,例如用户管理,用户角色,电子商务购物车,搜索引擎,社交媒体登录等。此外,它们彼此之间完全相互独立,这意味着它们可以写入不同的编程语言并使用不同的数据库
集中式服务管理几乎不存在
,微服务使用轻量级HTTP,REST或Thrift API进行相互通信。
这个词本身源于2011年5月在威尼斯附近举办的软件架构师研讨会。他们首次使用“微服务”这一术语来描述参与者所看到的许多人最近一直在探索的共同建筑风格。2012年5月,同一小组决定将“微服务”作为最合适的名称。然而,微软,亚马逊,Netflix和Facebook等主要科技公司已经使用微服务十多年了。在提出普遍接受的名称之前,其他人称他们为“微网络服务”或“细粒度SOA”。
是的,乍一看,我们似乎在谈论与SOA相同的事情。但是,我将请求微软服务领域的先驱Martin Flower的话,他曾经说过我们应该将SOA视为微服务的超集。
So, Where’s the Difference?
我们可以说两种架构都有相似之处而不是差异,但是,最终,它们是两种不同类型的架构。为了支持我的主张,首先,我将以表格的形式介绍将它们区分开来的架构的特定部分。稍后,我将更详细地阐述其中的一些内容。开始了!
使用轻量级协议,如HTTP,REST或Thrift API
我将在上表中显示的某些方面进一步详细说明,并进一步解释其中的差异:
-
开发 - 在这两种体系结构中,可以使用不同的编程语言和工具开发服务,从而为开发团队带来技术多样性。可以在多个团队中组织开发,但是,在SOA中,每个团队都需要了解常见的通信机制。另一方面,通过微服务,服务可以独立于其他服务运行和部署。因此,更容易经常部署新版本的微服务或独立扩展服务。您可以在此处进一步了解微服务的这些优点。
-
“绑定上下文” - SOA鼓励共享组件,而微服务试图通过“绑定上下文”最小化共享。绑定上下文指的是将组件及其数据作为单个单元耦合,具有最小的依赖性。由于SOA依赖于多种服务来满足业务请求,因此基于SOA构建的系统可能比微服务慢。
-
通信 - 在SOA中,ESB可能成为影响整个系统的单点故障。由于每个服务都通过ESB进行通信,如果其中一个服务速度变慢,它可能会阻塞ESB请求该服务。另一方面,微服务在容错方面要好得多。例如,如果一个微服务有内存故障,那么只有那个微服务会受到影响。所有其他微服务将继续定期处理请求。
-
互操作性 - SOA通过其消息传递中间件组件促进多个异构协议的使用。微服务试图通过减少集成选择的数量来简化架构模式。
因此,如果要在异构环境中使用不同协议集成多个系统,则需要考虑SOA。如果可以通过相同的远程访问协议访问所有服务,那么微服务对您来说是更好的选择。
-
大小 - 最后但并非最不重要的是,
SOA和微服务之间的主要区别在于大小和范围。微服务中的前缀“微”指的是内部组件的粒度,这意味着它们必须比SOA趋向于小得多。微服务中的服务组件通常只有一个目的,他们做得很好。另一方面,在SOA中,服务通常包含更多的业务功能,并且它们通常作为完整的子系统实现。
结论
人们不能简单地说一个架构比另一个架构好。它主要取决于您正在构建的应用程序的目的。
SOA更适合需要与许多其他应用程序集成的大型复杂企业应用程序环境。
话虽这么说,
较小的应用程序不适合SOA,因为它们不需要消息传递中间件组件。
另一方面,
微服务更适合于较小且分区良好的基于Web的系统。此外,如果您正在开发移动或Web应用程序,那么微服务可以让您作为开发人员获得更大的控制权。
最后,我们可以得出结论,因为它们用于不同的目的 -
微服务和SOA确实是不同类型的架构。
参考资料
IBM
DZone