0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

soa和微服务的区别

lhl545545 来源:电子发烧友网 2018-02-07 14:11 次阅读

前言

微服务究竟是压垮SOA的最后一根稻草,还是能够拯救整个软件工程行业的万能药?人们对于微服务的概念进行了大量的讨论,其中有许多讨论是关于微服务与SOA之间的关联。详细请看下文分析

soa和微服务的区别

来自C2B2的顾问主管Matt Braiser在文中对于微服务概念产生背后的原因以及SOA的原则进行了一些基本的概括。这篇文章的基本思想是:这两种架构在原则上确实是相当近似的,但面向SOA或微服务进行架构的产品确实存在着各种不同之处,使得他们各自适用于不同的用例。Matt在对微服务的总体介绍中是这样说的:

经过分离的组件可以各自拥有独立的生命周期,并且按需进行扩展。不仅如此,这种方式也打破了组件之间的技术依赖,这就允许每个服务各自选择最适合的技术进行实现。通过将较大的问题分解为几个较小的问题,让每个问题更易于进行分析,也更利于开发者选择最适合的解决方案。

尽管有这些优点,但微服务也存在着一些不足之处。虽然在这一领域中具有实际工作经验的开发者基本上都已经很好地理解了这些问题,但针对他们的报道与讨论却相对很少:

通过这种方式对大问题进行分解也增加了整个解决方案的复杂度,尤其是在那些使用不同技术或方式创建各种服务的系统中体现得更为明显。这种架构将系统的整合点推移到了服务之间的接口,因此这些服务的接口需要进行良好的定义,在系统中也要对服务级别达成一致,并且还需要定义其他的非功能性需求。

在目前来看,微服务还是一种相对较新的技术,架构师与开发者们通常所使用的一些辅助性工具也还处于发展阶段,以上所提及的这些问题可能迟早会得到解决。但在Matt看来,微服务的应用还存在着一个关键问题,那就是数据的管理和所有权:

当某个原本采用一体性应用程序架构的系统被分解为多个小型服务时,在原本的一体性架构中集中保存在某处的数据,在新的微服务应用中经常会改为保存在多个地方,这种改变可能会带来维护数据一致性的挑战。

Matt指出,与微服务相关的产品通常会专注于服务组件的生命周期,鼓励开发者在实现服务时选择某些推荐的实现方式,例如Docker,并通过某些推荐的协议进行服务之间的交互,通常来说RESTful风格是一种自然的选择。

通常来说,RESTful服务最适合于为某个数据模型提供CRUD操作,而微服务架构中的服务往往能够被轻易地分解为这些CRUD类型的服务,因此它与RESTful就能够很好地结合在一起。而对于其他类型的服务来说,类RESTful风格的服务通常也是一种良好的选择,这种类RESTful的风格也会使用HTTP作为传输协议,但服务本身并不一定要100%地符合RESTful的原则。

soa和微服务的区别

在Matt在文中提到SOA之后,他很快深入地谈论了SOA与微服务之间的关联:

现如今,谈论SOA的各种不足似乎已经成为了一件很普遍的事。但如果你认真地观察,就会发现SOA的缺陷中的绝大部分与微服务是相同的,只是有关他们的案例更为具体一些。而两者的优势其实也大体相同,因为从本质上看,这两种技术所做的都是同一件事:将一个较大的问题分解为多个较小的问题。

随后,Matt进一步指出,那些通常被认为在实施或推广微服务方面具有领袖地位的公司,往往也乐于将他们的架构描述为面向服务的架构。不过,为了实现目标,这些公司通常会倾向于避免使用传统的SOA产品。按照Matt的观点来看,这些产品就是指专注于基于企业服务总线(ESB)的方案。但在Matt看来,之所以这些SOA产品名声不佳,是因为使用者在某些项目中将这些产品错误地用于进行应用程序的设计,而不是用于企业级架构的设计。这些产品本身在交付面向服务架构的方案开发时并不存在问题。

就其本身而论,这些产品的特性主要专注于企业级的用例,并提供了多种方法用于追踪业务单元级别的SLA。大多数SOA产品都要求在服务的通信中使用一种或是少量的协议及消息格式,例如HTTP、FTP、SOAP和JMS等等,并提供连接器的代码库以实现通信功能。

实际上,Kai W?hner相信ESB仍未消亡,它仍然能够在微服务架构中扮演重要的角色。

通过使用ESB,你能够实现这一产品原本的目标,包括集成、编排、路由、(某些类型的)事件处理、相关性以及业务活动的监控。你也可以通过(微)服务构建你的应用,通过这些服务实现你的需求,解决你在业务上的问题。随后,你将自动地将这些服务独立地部署到某个可伸缩的运行时平台上,为这些服务提供标准化的接口。这些服务是松耦合的,他们能够通过大量一般水平的硬件实现线性的扩展。

显然,不仅仅是Matt,还有许多人也相信SOA与微服务应用了相同的原则,只是在组织中的应用层次不同。SOA专注于对“大型服务”进行编排操作,但这些大型服务也可以通过对一系列微服务进行组合而实现。当然,正如我们在一篇较早的文章中所说,服务的大小并不是一种定义微服务的好方法:

Jeppe Cramon在一系列博客文章中表达了他对于微服务的观点,以及他在同步的双向通信方案所看到的耦合问题。在他看来,仅仅使用服务的大小定义微服务并不是一种良好的衡量方法,并且也无助于判断某个服务是否具有正确的职责。

soa和微服务的区别

实际上,Matt相信,微服务的出现应当归功于SOA原则的成功(另一部分人则发现通过实施微服务,将更易于理解面向服务的思想),他的总结如下:

作为一名开发者,如果你正在开发一个应用程序,那么微服务框架将能够带来更大的敏捷性,并为你提供更好的控制能力。而如果你的任务是在整个企业中对于大量的业务过程进行编排,那么SOA产品或许能够为你提供更适合的工具。

在2014年,我们曾经在一篇文章中报道过在来自Cap Gemini的Steve Jones与其他人之间进行的一次讨论,其观点是微服务并不是什么新鲜的东西。在当时,Steve是这么说的:

在我看来,微服务只是一种为经过良好架构设计的SOA解决方案实现的面向服务的交付方案。SOA提供了上下文的框架,同时也提供了微服务所坚持的大部分规则。不仅如此,SOA还提供了一种更宽泛的上下文,使微服务能够在复杂的企业中符合这些上下文。许多人在不断地抱怨SOA中的各种WS-*协议、ESB的庞大以及各种极端复杂的项目,其实这只是面临的挑战不同而已。

这样看来,Matt并不是唯一一个认为SOA与微服务之间存在着密切联系的人,只是这些讨论往往是由具有深厚SOA背景的人所发起的。或许是因为那些微服务的提倡者在过去几年中没有深入地钻研过SOA,也可能是他们发现SOA或是那些旨在帮助用户通过SOA方法进行开发的工具中缺少了某些方面的内容?举例来说,在今年早些时候,Bob Rhubart曾引用了Eberhard Wolff的文章,后者是adesso AG的技术咨询公告板的主管,同时也是一位自由职业的顾问以及培训师,他是这样谈论SOA与微服务的:

SOA是一种能够改变整个企业的IT结构的战略创新,它将企业系统划分为不同的服务,为企业赋予了更大的灵活性……微服务必须能够独立地进行部署,而SOA服务往往是按照一体性的部署方式实现的。因此,虽然SOA与微服务技术有一定程度的相似性,但他们的本质是完全不同的。

然而,就在同一篇文章中,Oracle ACE部门的总监Torsten Winterberg说到:在他看来,“微服务正是我们在过去十年间一直在谈论的那种SOA”。这种SOA与微服务之间的关联的争论很可能还会持续很长一段时间,或许就像REST与SOA的争论一样。实际上,TIBCO亚洲区的CTO Kevin Pool就将此称为一种良性的争论。

那么微服务的不同之处体现在哪里呢?在微服务架构中,每个操作(或方法)都是独立开发的。(在他的文章前半部分)我们所描述的那个单用户的SOA服务将分别实现为多个独立的微服务。这些服务之间一般不会定义正式的接口,或者仅仅是定义一种非常简单直接的接口。也无需定义具有复杂的架构层次和结构的中央式数据模型。好吧,或许我们需要定义某种通用的数据字典,但这一点在每个微服务中并非是强制性的,因为每个微服务都可以按照自身的需要,独立地整合相应的变更。每个微服务都实现了独立部署、停用或是重启等操作。在大多数场景中,各个独立的微服务将在一个统一的平台中执行。

Kevin在比较和对比SOA与微服务的不同之处时选择了一种非常特定于实现的视角,SOA的实现专注于ESB、SOAP和WSDL。不过,在今年早些时候,Coert van den Thillart在他的文章中对此给出了或许是最好的一次总结:

微服务架构风格与SOA究竟有多大区别,回答完全取决于个人观点。在围绕着服务的概念创建架构这一方面,微服务提供了一种更清晰、定义更良好的方式。两者之间最关键的区别在于,微服务专注于以自治的方式产生价值。

在对SOA和微服务的各方面特性与实现途径进行比较与对比后,George Lawton相信微服务为SOA技术引入了敏捷性,并且“修正了SOA中的一些遗留问题”:

微服务的原则与敏捷软件开发思想是高度一致的,而它与SOA原则的演化的目标也是相同的,则减少传统的企业服务总线开发的高复杂性。

对于他的这篇文章,目前看来至少有一位留言者表示了赞同意见:

我同意(包括其他留言)微服务并不是一种新思想的方法。在我看来,它更像是一种思想的精炼,并且更好地利用了先进的技术以解决问题,例如容器与自动化。

soa和微服务的区别

那么,你对此问题的观点是怎样的呢?微服务与SOA之间是否存在关联?我们所讨论的方向是否应偏重于如何通过技术(实现)手段以支持这两种架构,而不是专注于他们在架构上的区别?还是如同Matt所说,真正的区别在于数据的管理与所有权?这一争论是否完全没有存在的必要?或者是否正如乔治。桑塔亚那所说的,那些不能铭记过去的人注定要重蹈覆辙呢?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SOA
    SOA
    +关注

    关注

    1

    文章

    268

    浏览量

    27216
  • 微服务
    +关注

    关注

    0

    文章

    117

    浏览量

    7240
收藏 人收藏

    评论

    相关推荐

    【算能RADXA微服务器试用体验】Radxa Fogwise 1684X Mini 规格

    通过网络可以了解到,算能RADXA微服务器的具体规格: 处理器:BM1684X 算力:高达32Tops INT8峰值算力 内存:16GB LPDDR4X 内存 存储:64GB eMMC 编程框架
    发表于 02-28 11:21

    Java微服务随机掉线排查过程简析

    我们的业务共使用 11 台(阿里云)服务器,使用 SpringcloudAlibaba 构建微服务集群, 共计 60 个微服务, 全部注册在同一个 Nacos 集群。
    的头像 发表于 01-13 17:41 530次阅读
    Java<b class='flag-5'>微服务</b>随机掉线排查过程简析

    游戏公司不使用微服务架构的原因

    微服务基本只有 request/response 的模式。做不了 streaming?微服务通常要求应用是无状态的才能做到水平扩展。streaming 本身就是加入了状态
    的头像 发表于 12-29 11:18 206次阅读

    dubbo和spring cloud区别

    Dubbo和Spring Cloud是两个非常流行的微服务框架,各有自己的特点和优势。在本文中,我们将详细介绍Dubbo和Spring Cloud的区别。 1.架构设计: Dubbo是阿里巴巴开源
    的头像 发表于 12-04 14:47 508次阅读

    如何构建弹性、高可用的微服务

    基于微服务的应用程序可实现战略性数字转型和云迁移计划,对于开发团队来说,这种架构十分重要。那么,如何来构建弹性、高可用的微服务呢?RedisEnterprise给出了一个完美的方案
    的头像 发表于 11-26 08:06 229次阅读
    如何构建弹性、高可用的<b class='flag-5'>微服务</b>?

    设计微服务架构的原则

    微服务是一种软件架构策略,有利于改善整体性能和可扩展性。你可能会想,我的团队需不需要采用微服务,设计微服务架构有哪些原则?本文会给你一些灵感。文章速览:微服务设计的要素
    的头像 发表于 11-26 08:05 226次阅读
    设计<b class='flag-5'>微服务</b>架构的原则

    docker微服务架构实战

    随着云计算和容器化技术的快速发展,微服务架构在软件开发领域中变得越来越流行。微服务架构将一个大型的软件应用拆分成多个小型的、独立部署的服务,每个服务负责独立的业务功能。其中,Docke
    的头像 发表于 11-23 09:26 308次阅读

    springcloud微服务架构

    Spring Cloud是一个开源的微服务架构框架,它提供了一系列工具和组件,用于构建和管理分布式系统中的微服务。它基于Spring框架,旨在通过简化开发过程和降低系统复杂性来帮助开发人员构建弹性
    的头像 发表于 11-23 09:24 367次阅读

    Spring Cloud :打造可扩展的微服务网关

    Spring Cloud Gateway是一个基于Spring Framework 5和Project Reactor的反应式编程模型的微服务网关。它提供了丰富的功能,包括动态路由、请求限流、集成安全性等,使其成为构建微服务架构的理想选择。
    的头像 发表于 10-22 10:03 256次阅读
    Spring Cloud :打造可扩展的<b class='flag-5'>微服务</b>网关

    SpringCloud微服务架构:实现分布式系统的无缝协作

    在深入Spring Cloud之前,让我们首先了解一下什么是微服务架构。微服务架构是一种软件架构模式,将一个应用程序拆分为一组小型、独立的服务。每个服务都有自己的数据库和业务逻辑,并可
    的头像 发表于 10-12 16:21 257次阅读
    SpringCloud<b class='flag-5'>微服务</b>架构:实现分布式系统的无缝协作

    边缘计算微服务操作系统的设计与实现

    面对边缘计算运行环境不统一、适配难,工业边缘计算微服务开发难度高,微服务生态系统碎片化,以及工业边缘计算行业应用难以落地等技术和行业共性问题,本文实现了一种边缘计算微服务操作系统,包括边缘计算
    的头像 发表于 08-31 16:49 595次阅读
    边缘计算<b class='flag-5'>微服务</b>操作系统的设计与实现

    释放微服务架构全部潜力的关键

      释放微服务的力量 您是否正在努力构建高效、可扩展且有弹性的软件系统?作为软件开发人员或高级开发人员,您一定遇到过“微服务架构”一词。这种革命性的软件开发方法已被许多成功的科技巨头采用,例如
    的头像 发表于 06-25 11:54 324次阅读
    释放<b class='flag-5'>微服务</b>架构全部潜力的关键

    微服务之间涉及到的数据依赖问题应该怎么处理呢?

    微服务,顾名思义,就是将我们程序拆分为最小化单元来提供服务。在一体化系统中,各个微服务也是不可能独立存在的,那么微服务之间涉及到的数据依赖问题,应该怎么处理呢?我们从场景入手来分析考虑
    的头像 发表于 06-15 10:05 501次阅读
    <b class='flag-5'>微服务</b>之间涉及到的数据依赖问题应该怎么处理呢?

    从分层架构到微服务架构介绍(五)

    本文要介绍的是 服务化架构 (Service-Based Architecture, SBA )。 SBA 可以看成是单体架构和微服务架构之间的一个折中方案,它也是按照业务领域进行服务划分
    的头像 发表于 05-10 17:02 585次阅读
    从分层架构到<b class='flag-5'>微服务</b>架构介绍(五)

    我们的微服务中为什么需要网关?

    玩过微服务的小伙伴对 Spring Cloud 中的的 Spring Cloud Gateway 多多少少都有一些了解,松哥之前既写过相关的文章,也录过相关的视频跟小伙伴们介绍 Spring
    的头像 发表于 05-04 17:38 980次阅读
    我们的<b class='flag-5'>微服务</b>中为什么需要网关?