在本文中,我们将解释面向服务体系结构(SOA)和微服务的基础知识,讨论它们的主要区别,并看看哪种方法最适合您的情况。
如果你在IT或云计算领域工作,你可能很清楚面向服务架构(SOA)与微服务之间的争论。毕竟,现在每个人都在谈论微服务和敏捷应用程序。
乍一看,这两种方法听起来非常相似,而且在某些方面,它们是相似的。两者都涉及用于敏捷应用程序开发和部署的云或混合云环境,并且都可以扩展以满足大数据的速度和操作需求。两者都将大型、复杂的应用程序分解为易于使用的小型、灵活的组件。两者都不同于传统的单一体系结构,因为每个服务都有自己的责任。
然而,即使有这些关键的共同点,仔细研究这两种方法也会发现重要的区别。
什么是面向服务的体系结构(SOA)?
面向服务体系结构(SOA)是一种企业范围的应用程序组件软件开发方法,它利用可重用的软件组件或服务。在SOA软件体系结构中,每个服务都由执行特定业务功能所需的代码和数据集成组成—例如,检查客户的信用、登录网站或处理抵押贷款申请。
服务接口提供松散耦合,这意味着调用它们时,很少或根本不知道下面是如何实现集成的。由于这种松散耦合和服务的发布方式,开发团队可以通过在整个企业的其他应用程序中重用组件来节省时间。这既有好处,也有风险。作为对企业服务总线(enterpriseservicebus,ESB)的共享访问的结果,如果出现问题,它还可能影响其他连接的服务。
XML数据是基于SOA体系结构的解决方案的关键组成部分。例如,基于XML的SOA应用程序可以用来构建web服务。
SOA出现于20世纪90年代末,代表了应用程序开发和集成发展的一个重要阶段。在SOA成为一种选择之前,将单一应用程序连接到另一个系统中的数据或功能需要复杂的点对点集成,开发人员必须为每个新的开发项目重新创建这些集成。通过SOA公开这些功能消除了每次重新创建深度集成的需要。
SOA提供四种不同的服务类型:
- 功能性服务(即业务服务),对于业务应用程序至关重要。
- 企业服务,用于实现功能。
- 应用程序服务,用于开发和部署应用程序。
- 基础设施服务,它对后端进程(如安全性和身份验证)非常有用。
每项服务由三个部分组成:
- 接口,定义服务提供者如何执行来自服务使用者的请求。
- 契约,它定义了服务提供者和服务使用者应该如何交互。
- 实现,即服务代码。
可以组合SOA服务来创建更高级别的服务和应用程序。
什么是微服务?
与SOA一样,微服务体系结构由松散耦合、可重用和专门化的组件组成,这些组件通常相互独立地工作。微服务还使用高度的内聚,也就是有界上下文。有界上下文是指组件与其数据之间的关系,它是一个独立的实体或单元,依赖关系很少。微服务通常通过应用程序编程接口(API)进行通信,以构建执行特定业务功能(或特定业务领域的功能)的单个应用程序,从而使它们更灵活、更具伸缩性和弹性,而不是在企业范围内被采用。通常,Java是开发微服务的首选编程语言。也可以使用其他编程语言,如Golang和Python。
微服务是一种真正的云本地体系结构方法,通常在容器中运行,这使得它们在创建独立服务时更具可伸缩性和可移植性。团队可以使用微服务更轻松地更新代码,为不同的组件使用不同的堆栈,并独立地扩展组件,从而减少因单个功能可能面临太多负载而不得不扩展整个应用程序的浪费和成本。由于其独立性,微服务产生的服务比其他服务更具容错性。
SOA和微服务的主要区别:范围
这两种方法的主要区别在于范围。简单地说,面向服务的体系结构(SOA)具有企业范围,而微服务体系结构具有应用范围。
当你忽视这种差异时,每种方法的许多核心原则就变得不相容了。如果您接受范围上的差异,您可能会很快意识到这两者可能是互补的,而不是竞争。
以下是一些使用案例,在这些案例中,这种区别开始发挥作用:
复用
在SOA中,集成的可重用性是首要目标,而在企业级,争取某种程度的重用是必不可少的。SOA架构中的可重用性和组件共享提高了可伸缩性和效率。
在microservices体系结构中,创建一个在整个应用程序运行时重用的microservices组件会导致依赖关系降低灵活性和弹性。微服务组件通常更喜欢通过复制和接受数据复制来重用代码,以帮助改进解耦。
同步调用
SOA中的可重用服务在整个企业中都是可用的,主要使用restfulapi之类的同步协议。
然而,在微服务应用程序中,同步调用引入了实时依赖性,导致恢复能力的丧失。这些依赖关系还可能导致延迟,从而影响性能。在微服务应用程序中,基于异步通信的交互模式是优选的,例如事件源,其中发布/订阅模型用于使微服务组件在另一组件中的数据发生更改时保持最新。
重复数据
在SOA中提供服务的一个明确目标是让所有应用程序直接在其主要源同步地获取和更改数据,这减少了维护复杂数据同步模式的需要。
在微服务应用程序中,理想情况下,每个微服务都可以本地访问其所需的所有数据,以确保其独立于其他微服务,甚至独立于其他应用程序,即使这意味着在其他系统中存在一些数据重复。当然,这种重复增加了复杂性,因此必须与敏捷性和性能方面的收益相平衡,但这被认为是微服务设计的现实。
SOA和微服务之间的其他关键区别
- 通信:在微服务体系结构中,每个服务都是独立开发的,有自己的通信协议。使用SOA,每个服务必须共享一个称为企业服务总线(enterpriseservicebus,ESB)的公共通信机制。SOA管理和协调它通过ESB交付的服务。但是,ESB可能成为整个企业的单点故障,如果单个服务的速度减慢,整个系统可能会受到影响。
- 互操作性:为了保持简单,微服务使用轻量级消息传递协议,如HTTP/REST(表示状态传输)和JMS(Java消息传递服务)。soa对异构消息传递协议更开放,如SOAP(简单对象访问协议)、AMQP(高级消息传递队列协议)和MSMQ(Microsoft消息传递队列协议)。
- 服务粒度:微服务体系结构是由高度专业化的服务组成的,每个服务都被设计成可以很好地完成一件事情。另一方面,组成soa的服务可以从小型的、专门化的服务到企业范围的服务。
- 速度:通过利用共享公共体系结构的优势,soa简化了开发和故障排除。然而,这也使得soa的运行速度比微服务体系结构慢,微服务体系结构将共享最小化,以利于复制。
- 治理:SOA的本质涉及到共享资源,支持跨所有服务实现公共数据治理标准。微服务的独立性不支持一致的数据治理。这为每个服务提供了更大的灵活性,这可以鼓励整个组织进行更大的协作。
- 存储:SOA和微服务在存储资源的分配方式上也有所不同。SOA架构通常包括一个单一的数据存储层,由给定应用程序中的所有服务共享,而microservices将为任何需要它的服务指定一个服务器或数据库来存储数据。
从SOA到微服务的迁移
对于一些组织来说,SOA架构是取代整体的跳板,它提供了一个更加灵活和敏捷的环境。SOA服务可以在大型环境中开发和使用,但是它们不能满足希望在其权限范围内处理业务流程的单个业务的特定需求。DevOps可用于帮助组织从SOA体系结构过渡到微服务,以满足特定需求。
SOA与微服务:哪一个最适合你?
体系结构样式有其优点,那么如何确定哪种样式最适合您的目的呢?一般来说,这取决于应用程序环境的规模和多样性。
SOA和微服务都可以使用自动化来加速业务流程。更大、更多样化的环境倾向于面向服务的体系结构(SOA),SOA通过企业服务总线(ESB)支持异构应用程序和消息传递协议之间的集成。更小的环境,包括web和移动应用程序,不需要这样一个健壮的通信层,并且更容易使用微服务架构进行开发。
进一步了解SOA和微服务
有人会指出,SOA与微服务的争论要复杂得多,这是事实。还有很多。对于这些细微差别的更详细的技术解释,我们鼓励您深入研究SOA和microservices Learn Hub文章,这些文章提供了大量深入的信息。然而,从业务的角度来看,范围是关键的区别:
- https://www.ibm.com/cloud/learn/microservices
- https://www.ibm.com/cloud/learn/soa
- https://www.ibm.com/cloud/blog/agile-vs-waterfall
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2153.html
暂无评论