理解开发和部署应用程序的最佳方式是当今任何数据驱动组织的一个重要考虑因素。面向服务的体系结构(SOA)和微服务等选项为构建和运行应用程序提供了宝贵的灵活性,而传统的单一方法则没有。然而,为了确定哪一个最适合您的业务,很难理解两者之间的差异。
微服务将应用程序结构为一系列不同的、单一用途的服务,而SOA是一组模块化服务,它们“对话”在一起支持应用程序及其部署。这两种方法在体系结构、组件共享、数据治理、通信和其他元素方面存在重大差异,这些元素决定了每种方法最适合于哪种情况,以及它如何影响整个业务。
什么是面向服务的体系结构?
面向服务的体系结构主要是作为对构建应用程序的传统单片方法的响应而创建的。SOA将应用程序所需的组件分解为单独的服务模块,这些模块相互通信以满足特定的业务目标。每个模块都比单个应用程序小得多,并且可以在企业中部署以满足不同的目的。此外,SOA是通过云交付的,可以包括基础设施、平台和应用程序的服务。
SOA的两个主要角色是服务提供者和服务使用者。其服务提供者层包括SOA中涉及的不同服务,而使用者层作为用户界面进行操作。
SOA提供四种不同类型的服务:
1. 功能性服务用于业务操作
2. 企业服务实现该功能
3. 应用程序服务专门用于开发和部署应用程序
4. 基础设施服务用于非功能性流程,如安全性和身份验证
传统上,SOA使用企业服务总线(ESB)作为协调和控制这些服务的手段。
什么是微服务?
微服务体系结构通常被认为是SOA的一种演变,因为它的服务更加细粒度,并且功能相互独立。因此,如果应用程序中的一项服务失败,应用程序将继续运行,因为每项服务都有不同的用途。微服务中的服务通过应用程序编程接口(API)进行通信,并围绕特定的业务领域进行组织。这些服务组合在一起构成了复杂的应用程序。
由于每个服务都是独立的,因此微服务体系结构可以比用于应用程序构建和部署的其他方法更好地扩展。与其他应用程序开发方法相比,该特性还为微服务应用程序提供了更多的容错能力。微服务经常在云中构建和部署;在许多情况下,它们在容器中运行。
微服务与SOA:识别差异
SOA和微服务的许多主要特征是相似的。两者都涉及用于开发和运行应用程序的云或混合云环境,设计用于组合创建和使用应用程序所需的多种服务,并且每种服务都有效地将大型、复杂的应用程序分解为更小的部分,以便更灵活地安排和部署。因为微服务和SOA都在云环境中运行,所以它们都可以扩展以满足大数据规模和速度的现代需求。
然而,SOA和微服务之间存在许多差异,这决定了每个用例都适合:
架构
微服务体系结构基于更小、细粒度的服务,这些服务专注于一个单一目的,可以彼此独立运行,但可以交互以支持相同的应用程序。因此,微服务被设计成共享尽可能少的服务资源。由于SOA具有更大、更模块化的服务,这些服务彼此之间并不独立,所以它的体系结构是尽可能多地共享资源。
组件共享
微服务的独立性使共享组件的需求最小化,并使服务更能抵抗故障。此外,组件共享的相对缺乏使开发人员能够轻松地部署新版本,并比使用SOA更快地扩展单个服务。
另一方面,组件共享在SOA中更为常见。特别是,服务共享对ESB的访问。因此,如果一个服务存在与ESB相关的问题,它可能会损害其他连接服务的有效性
粒度
SOA的服务很大,一些模块化服务类似于单片应用程序。由于每个服务的可扩展性,SOA通常具有更广泛的关注范围。
微服务更细粒度的特性意味着单个服务在执行单个特定任务时表现出色。将这些任务组合在一个应用程序中。
数据存储
对于微服务,各个服务通常都有自己的数据存储。使用SOA,几乎所有服务都共享相同的数据存储单元。
共享相同的数据存储使SOA服务能够重用共享数据。通过在业务单元之间部署相同的数据或应用程序,此功能对于最大化数据的价值非常有用。然而,这种能力也会导致服务之间的紧密耦合和相互依赖。
治理
因为SOA基于共享资源的概念,所以它在所有服务中使用通用的数据治理机制和标准。
微服务中服务的独立性无法实现统一的数据治理机制。通过这种方法,治理更加轻松,因为部署微服务的个人可以自由选择每个服务遵循的治理措施,从而提高团队之间的协作。
规模和范围
规模和范围是微服务和SOA之间更显著的区别之一。微服务的细粒度特性大大减少了其部署项目的规模和范围。它相对较小的服务范围非常适合开发人员。相比之下,SOA的规模和范围越大,就越适合于各种服务的更复杂集成。SOA可以连接跨企业协作和其他大型集成工作的服务。
通信
SOA通信传统上由ESB处理,ESB提供服务之间“对话”的媒介。但是,使用ESB会减慢SOA中服务的通信速度。微服务依赖于更简单的消息传递系统,比如API,它与语言无关,能够实现更快的通信。
耦合和内聚
SOA基于共享组件,而微服务基于“有界上下文”的概念。有界上下文是组件及其数据的耦合,没有许多其他依赖关系,从而减少了共享组件的需要。微服务中的耦合还可能涉及其操作系统和消息传递,所有这些通常都包含在一个容器中。
这种类型的耦合会产生高内聚性,因此在影响应用程序性能之前,可以快速隔离和解决特定服务中的任何故障点。相比之下,SOA对共享的关注使其系统速度变慢,更容易出现故障。
远程服务
SOA和微服务使用不同的协议来访问远程服务。SOA的主要远程访问协议包括简单对象访问协议(SOAP)和消息传递,如高级消息传递队列协议(AMQP)和Microsoft消息传递队列(MSMQ)。
微服务最常见的协议是代表性状态传输(REST)和简单消息传递,如Java消息传递服务(JMS)。REST协议经常与API一起使用。微服务的协议比SOA的协议更同质,后者通常用于异构互操作性。
部署
易于部署是微服务和SOA之间的另一个主要区别。由于微服务中的服务更小,并且在很大程度上彼此独立,因此它们比SOA中的服务部署得更快、更容易。这些因素也使得微服务中的服务更容易构建。
由于服务是耦合在一起的,因此添加服务需要重新创建和重新部署整个应用程序,这使得SOA部署变得复杂。
微服务 vs SOA:哪一种更适合你的业务?
当决定微服务或SOA对于特定业务是否更好时,有几个要点要考虑。SOA是一种将单片应用程序分解为更小组件的模块化方法,而微服务提供了一种更小、更细粒度的方法来实现相同的目标。这两种架构都是在云中运行的,这增加了构建和部署应用程序的灵活性。最终,最佳方法取决于每个企业自身的独特需求和用例。
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2265.html
暂无评论