分享

微服务与SOA架构有什么本质区别?

 快读书馆 2018-08-21

21CTO导读:了解微服务和SOA架构之间的真正差异,本文讲解两者区别以及开发中不同的用法。


最近,关于这两种架构之间的差异,或者两者是否在差异,已经有很多人在讨论。


为了深入研究引发了数百个争论的这个问题,我们首先简要地定义SOA和微服务架构及其它的起源,之后我们将对它们进行比较,看看如何更好地区分它们。


面向服务的架构体系(SOA)


面向服务的架构是一种软件体系架构,其中应用程序的不同组件通过网络通信协议向其它组件提供服务。通信可以涉及简单的数据传递,或者涉及彼此协调连接服务的两个或更多个服务。这些不同的服务执行一些小功能,例如验证付款,创建用户帐户或提供社交账号登录等。


面向服务的架构不是关于如何模块化应用程序,而是关于如何通过集成分布式,单独维护和部署的软件组件来组合应用程序。它通过技术和标准实现,使组件更容易通过网络进行通信与协作。


SOA中有两个主要角色:服务提供者和服务使用者。软件代理可以扮演两种角色。消费者(Consumer)层是用户(人,应用程序的其他组件或第三方)与SOA交互的点,提供者(Provider)层由SOA中的所有服务组成。



SOA在90年代中期得名,当时一家名为Gartner Group的公司认识到软件架构中的这一新兴趋势,采用它并在全球范围内推广。通过这样实施,人们成功地加快了这种架构模式的采用和进一步发展。使用分布式服务作为软件架构的第一个记录可以追溯到80年代早期。


微服务(MicroService)


从某种程度上讲,微服务是面向服务架构发展的下一步。基本上,这种架构类型是开发软件,Web或移动应用程序作为独立服务套件的一种特殊方式 - a.k.a微服务。创建这些服务仅用于一个特定的业务功能,例如用户管理,用户角色,电子商务购物车,商品展示 ,搜索引擎,社交账号登录等。此外,它们之间完全相互独立,这意味着它们可以用不同的编程语言并使用不同的数据库,集中式服务管理几乎不存在,微服务使用轻量级HTTP,REST或Thrift API互相进行通信。


微服务这个词本身源于2011年5月在威尼斯附近举办的软件架构师研讨会。他们首次使用“微服务”这一术语来描述参与者最近在探索的共同架构风格。


2012年5月,这个小组决定将“微服务”作为最合适的名称。事实上,微软,亚马逊,Netflix和Facebook等主要科技公司已经使用微服务超过十年了。在提出普遍接受的名称之前,其他人称他们为“微网络服务”或“细颗粒度SOA”。


是的,乍一看我们似乎在谈论与SOA相同的事情。但是,我引用微软服务领域的先驱Martin Flower的话,他说我们应该将SOA视为微服务的超集。


那么,它们之间真正的差异在哪里?


我们可以说两种架构都有相似之处而不是差异,但是,最终它们是两种不同类型的架构。首先,我将以表格的形式介绍将架构的特定的区分部分。接下来,我将详细阐述其中的一些内容。



我们把在上表中显示的一些内容来进一步详细说明,为大家解释其中之差异:


开发 - 在这两种体系结构中,可以使用不同的编程语言和工具开发服务,从而为开发团队带来技术的多样性。可以在多个团队中组织开发,但是,在SOA架构中,每个团队都需要了解常见的通信机制。另一方面,通过微服务,服务可以独立于其它服务运行和部署。因此,可以更频繁地部署新版本的微服务或独立扩展服务。


“有界上下文” 


SOA架构鼓励共享组件,而微服务试图通过“有界上下文”来最小化共享。有界上下文指的是将组件及其数据作为单个单元耦合,具有最小的依赖性。由于SOA依赖于多种服务来满足业务请求,因此基于SOA构建的系统可能比微服务慢。

通信 - 在SOA中,ESB的单点故障可能成为影响整个系统的瓶颈。由于每个服务都通过ESB进行通信,如果其中一个服务速度变慢,可能会阻塞ESB请求该服务。而另一方面,微服务在容错方面就要好得多。例如,如果一个微服务有内存故障,那么只有那个微服务会受到影响,其他的微服务将继续定期处理请求。


互操作性 - SOA通过其消息传递中间件组件促进多个异构协议的使用。而微服务试图通过减少集成选择的数量来简化架构模式。因此,如果要在异构环境中使用不同协议并集成多个系统,则需要考虑SOA。如果可以通过相同的远程访问协议访问所有服务,那么微服务对开发团队来说是更好的选择。


大小 - 最后但并非不重要的是,SOA和微服务之间的主要区别在于大小和范围。微服务中的前缀“微”指的是内部组件的颗粒度,这意味着它们必须比SOA要小得多。微服务中的服务组件通常只有一个目的,他们能做得很好。另一方面,在SOA中,服务通常包含更多业务功能,并且它们通常作为完整的子系统来实现。


小结


我们不能简单地说一个架构比另一个架构好。它主要取决于你正在构建的应用程序之目的。SOA更适合需要与许多其它应用程序集成,用于大型复杂企业应用程序环境。较小的应用程序不适合SOA,因为它们不需要消息传递中间件组件。 另一方面,微服务更适合于较小且分区良好的基于Web的系统。 此外,如果你正在开发移动或Web应用程序,那么微服务可以让作为开发人员的你获得更大的控制权。


最后,我们得出一个结论:两个架构用于不同的目的 - 微服务和SOA是两种不同类型的体系架构。



作者:Rade Despodovski

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多