SOA和微服务架构与实践的区别

SOA与微服务的比较SOA与微服务的比较亿仁网百家号面向服务架构(SOA)已经存在有些年头了,这是一种用于设计软件的伟大原则。在SOA中,所有组件都是独立自主的,并能为其他组件提供服务。要替换掉系统中的某些部分而不对整个系统造成较大的影响本是个难题,然而只要维护好系统各模块之间的低耦合,该难题便能迎刃而解,这也是我们之前谈及微服务时所认可的。大体上,SOA与微服务架构是非常相像的。那么它们之间的区别到底是什么呢?微服务是细粒度的SOA组件。换句话说,某单个SOA组件可以被拆成多个微服务,而这些微服务通过分工协作,可以提供与原SOA组件相同级别的功能,如下图所。微服务是细粒度的SOA组件,它们是关注点更窄的轻量级服务。微服务与SOA之间的另一个不同之处是服务互联和编写服务时所使用的技术。J2EE是一个遵守企业级标准的用于编写SOA架构的技术栈。Java命名与目录接口(JNDI)、企业级JavaBean(EJB)以及企业服务总线(ESB)都是SOA应用赖以构建和维护的生态土壤。即便ESB是标准,在2005年之后毕业的工程师却鲜有听说过ESB的,至于用过ESB的那就更少了。而当代的,例如Rubyon Rails这样的框架甚至不会去考虑如此复杂的软件部件。而另一方面,微服务推崇执行的标准(例如HTTP)却是人们广泛了解并共同使用的。我们可以通过选择合适的语言或工具来构建某个组件(微服务),进而获得本章“技术多样性”小节所提到的关键好处。除了技术栈与服务规模之外,在SOA与微服务之间还有一个更大的区别:领域模型。在本章前面的内容中,我们曾讨论过去中心化。有管理的去中心化,也有数据的去中心化。在一个基于微服务的软件中,每个微服务应该在本地存储自身管理的数据,并将领域模型分别隔离到单个服务中。而在面向SOA的软件中,数据往往存储在单个大型的数据库中,服务之间会共享领域模型。本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。亿仁网百家号最近更新:简介:造物之前,必先造人。作者最新文章相关文章主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:www.xttblog.com。个人QQ群:、
个人大数据技术博客:https://www.iteblog.com
关于是什么,又是什么,两者之间有何关联真是众说纷纭、困惑颇多。很多人都加入了这场讨论,从ThoughtWorks的到Cap Gemini的全都参与了进来。
微服务是什么?微服务是一种架构设计模式。在微服务架构中,业务逻辑被拆分成一系列小而松散耦合的分布式组件,共同构成了较大的应用。每个组件都被称为微服务,而每个微服务都在整体架构中执行着单独的任务,或负责单独的功能。每个微服务可能会被一个或多个其他微服务调用,以执行较大应用需要完成的具体任务;系统还为任务执行——比如搜索或显示图片任务,或者其他可能需要多次执行的任务提供了统一的解决处理方式,并限制应用内不同地方生成或维护相同功能的多个版本。使用微服务架构还提供这样一种机制:增加新加入开发者的生产效率,并减少新功能的推广时长。每个微服务的代码库与相关工具集都很有限;开发者无需再去了解庞大而复杂的系统,只需理解自己所做的那部分微服务相关子集,便能贡献生产力。由于无需考虑应用的现有部分使用了什么语言或工具集,或者较大应用的其他开发者是否了解这些语言和工具,只需使用当前任务最趁手的工具,因此微服务开发起来非常迅速。为了充分利用速度优势,让小团队开发成为可能,团队需要自主权;他们必须能迅速作出决定,避免过度监管。要想支持这一点,工作团队应当包括所有相关人员,从产品经理到发布运行人员。由于微服务组件是松散耦合并通过API通讯的,各方在大多决定时拥有高度自主权并不会影响应用的整体功能。只要微服务能发布API,并能用这些API执行所需的功能,整体系统就能运作良好。由于在一个微服务架构中有许多独立的组件,在弹性网络(比如公共或私有云)上使用现代化的DevOps对于确保整体系统在大多数情况下正常运转就显得尤为重要。特别是像与额外实例的自动部署相关联的健康与负载自动监控(为了尽可能减少未充分利用的实例)这样的东西在很多情况下就变得至关重要。SOA是什么?服务导向式架构(SOA)是集成多个较大组件(一般是应用)的一种机制,它们将整体构成一个彼此协作的套件。一般来说,每个组件会从始至终执行一块完整的业务逻辑,通常包括完成整体大action所需的各种具体任务与功能。组件一般都是松耦合的,但这并非SOA架构模式的要求。尽管没有严格要求,SOA一般使用某种集中式管理,比如审查委员会、主架构师或架构委员会来严格定义每个系统组件应当做什么,如何执行。相同类型的功能可能会按需在多个组件中分别定义与记录,而每个组件所使用的语言与工具集有可能是集中确定与统一的,也可能不是。SOA可能使用任何类型的SDLC、组织架构或符合这种管理的开发模型;敏捷、瀑布、看板管理或者一些组合形式都是可用而不违反SOA原则的。此外,现代化的DevOps和云部署对SOA当然很有效,在这种系统中缩减组件数量并非必需。但在这些系统中,就算在最好的情况下,一些较大的组件也可能太过复杂而难以实现自动化,在最坏的情况下甚至完全无法实现。举个例子,自动化部署的一个标准可能得需要100%通过一套自动化测试。这将确保现有的功能在新版本中仍旧可用(没有回归),而新功能也按照预期实现。随着功能交互越来越多,看似不相关的开发工作意外破坏现有功能某些方面的可能性有所增加。此外一些测试可能很敏感,由于坏境或网络因素而出现失败个例。在100个测试案例中,5%的随机测试出现1%的失败率不会对普通发布造成大的阻碍。而在成千上万的测试中,同样的几率可能会造成较大影响,很多时候会造成至少一个随机故障。因此,即便要发布的版本没有什么实际的错误,也会因为无法通过这条标准而无法部署。直接对比——建立购物车我们来看一个在线购物网站。这个网站会有一些不同的功能,比如产品目录、用户帐号还有购物车等等。使用SOA的开发公司一般会将购物网站拆分成主要的业务逻辑组,并将每个部分作为独立应用分别开发,最后集成到一起。举个例子,整个购物车及其所有功能是由一大群人所开发的一个应用,他们需要了解整个购物车的工作机制,以便能够修改。在这个应用中,是代码负责显示物品、增加或移除购物车商品、查看库存、处理运费选项、处理税率计算、处理汇率、在更改时更新显示并将最终的订单细节发到用户邮箱里(还有其他等等)。用来显示购物车商品的代码包括在购物车应用中,可能与在浏览目录视图中用来显示商品名称的代码截然不同,从而造成需要维护的两套代码相似但不相同,还可能造成大应用UX上的某些不一致。使用微服务架构的开发公司会将购物车切分成较小的任务导向服务。不再是购物车应用了,而可能是税率计算服务、添加/移除商品服务、运费服务、汇率服务和最终订单撰写服务。购物车功能可能也会用到一些常用的服务——它们会用在购物应用的很多地方,比如显示商品服务、显示产品图片服务、查看库存服务、用户支付偏好服务以及邮件服务。而“购物车”、“产品目录、“用户账户”之间并没有分界,通用代码被封装成各种服务,待需要时用在各种功能中。当公司向中心授权组织请求展示产品时,必须修改展示来源,还得将浏览统计添加到购物应用中。在SOA架构中,产品目录应用和购物车应用必须独立各自更新,以体现变更。需要对两个应用进行重测试,以确保变更没有影响其他功能,然后再重新部署。如果在这两个有改动的应用中还有其他功能有所变更,这一过程可能会进一步拖延(取决于开发进度的实现情况),而无法发布。一旦重新部署,负责展示的新机制速度可能明显要比旧机制慢,从而成为瓶颈。延迟会导致客户投诉,然后问题被报告给管理层。有管理者决定要通过向整个产品目录应用与购物车应用部署额外实例,以处理额外的负载,应对延迟问题(如果有适当的监控与部署规则,这可能是自动执行的)。由于整个应用需要扩展,整个过程需要大量的额外处理能力与存储空间,在未执行额外部署的情况下,很多功能可能只能勉强运行。而在微服务这里,只需进行一项改变——更新产品展示服务。这项服务可以独立进行快速的更改、测试与部署,而不会影响到大系统中的其他部分。此外,一旦发现瓶颈(很可能是通过自动化监控),无需向产品目录功能或者购物车服务所使用的其他服务部署更多实例,就能(可能是自动的)部署这项服务的额外实例,从而限制了支持额外部署所需的资源。以上所有都是建立在想要发布一个大型在线商店,向各地各类人等售卖各类产品的假设上。如果假设你只想向美国境内的客户贩卖一种商品,并且只使用UPS作为物流的话。大量架构与复杂的在线商店都是没有必要的。虽然仍需追踪用户信息、提供购物车与结算功能、展示产品信息与图片,甚至一些评论评价,但每一项功能所需都比复杂的在线商店要少得多。产品分类需求、计算不同运费选项的需求、系统处理增加/移除延时差异的需求还有所有其他综合商城所需的功能都不再需要。在这种情况下,使用SOA将购物车、用户账户与产品展示组件与网站相集成可能要比使用微服务架构(像上面描述的那样有更为细致的组件定义)更有意义。在这种简单的设置中,不仅每个较大的组件被降低到复杂程度可控的范围内,而且实现这类网站所需的开发与其他员工的人数都会很少,无需将小型独立团队进行拓展。相似却不相同微服务与SOA有很多相同之处。两者都属于典型的、包含松耦合分布式组件的系统结构。但是两种架构背后的意图是不同的:SOA尝试将应用集成,一般采用中央管理模式来确保各应用能够交互运作。微服务尝试部署新功能,快速有效地扩展开发团队。它着重于分散管理、代码再利用与自动化执行。总结:
大块业务逻辑
单独任务或小块业务逻辑
通常松耦合
总是松耦合
小型、专注于功能交叉的团队
着重中央管理
着重分散管理
确保应用能够交互操作
执行新功能,快速拓展开发团队
哪种适合你的公司呢?完全取决于你的选择。原文链接:
(译者/Vera 责编/钱曙光)(责编/钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件,交流探讨可加微信qshuguang2008,备注姓名+公司+职位)「CSDN 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshuguang2008入群,备注姓名+公司+职位。SOA和微服务架构的区别_百度知道
SOA和微服务架构的区别
我有更好的答案
果一句话来谈SOA和微服务的区别,即微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,数据库访问,设计,运行和运维的小应用。这些小应用之间通过服务完成交互和集成,同时SOA的思想进入到单个业务系统内部实现真正的组件化。每个小应用从前端web ui,到控制层,数据库都完全是独立的一套。在这里我们不用组件而用小应用这个词更加合适,每个小应用除了完成自身本身的业务功能外,重点就是还需要消费外部其它应用暴露的服务,逻辑层,同时自身也将自身的能力朝外部发布为服务。微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发
为您推荐:
其他类似问题
soa的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。四大理由解析你需要微服务架构来源:TechTarget中国&&作者:Todd Biske 14:38:4310年前,正值或差不到了SOA炒作的巅峰。时光冉冉,再看看现在,情况已经大为改观。那么,我们为什么仍然需要微服务架构呢?这些变化我们一个个来看看吧。分享到:
本文关键字:
为什么我们需要微服务架构?我们如何才能从中受益?&10年前,正值或差不到了炒作的巅峰。那时候,你的服务部署可能涉及到J2EE应用,要进行基于EAR文件的部署,或者是一种更加面向集成的办法&通过ESB聚焦于遗留的集成点并以基于SOAP的服务将其暴露出来。你所有的服务可能都是一两支团队的,因为他们是唯一理解这一技术的人。尽管Thomas Erl当初那本有关SOA的书很火,但大多数服务并未遵循他的服务导向原则。应用服务器或ESB生产时仍然部署在物理硬件上。&时光冉冉,再看看现在,情况已经大为改观。组织已经有了多得多的服务,且分别由许多不同的团队拥有。这一切都不是用Java写的。服务被部署到虚拟机(VM)上,也许甚至是以外的公有云上。那么,我们为什么仍然需要微服务架构呢?这些变化我们一个个来看看吧。&我们仍然需要微服务架构的理由&首先,你的服务多得多了。实际上,你多的可能是操作,但那些被捆绑进了服务里面。只需看看那些操作的使用情况,我敢打赌,它们将遵循帕累托原则:你得流量里面80%(或更多)来自于20%(或更少)的服务。如果这些服务的每一个都由同样规模的基础设施来提供的话,你的资源利用率可能就会非常糟糕。此外,哪怕是在服务里面,也可能不是所有的操作消耗的流量都一样的。对于特定的操作你却不能(单独)伸缩能力;而是在整个服务水平上进行。如果你还使用J2EE服务器的话,在同一集群下你甚至还会有多个EAR,且不得不针对全部增加或移除能力。简而言之,你无法根据处于独立操作级的依赖性和需求做出基础设施决策。&其次,这些服务被扩散到了更多的团队中间。这会恶化资源利用率的问题,因为此两支不同的团队往往不希望共享基础设施。因此,就得提供更多的服务器,哪怕能力本来就够。更糟糕的是,组织总是在变的。一旦管理层做出的改变组织无法匹配服务的组织形式该怎么办?你能否轻易绕开这些东西?记住,这不仅仅是这些基础设施,还包括底层源代码以及相关项目。&其三,并非所有的东西都是用Java EE或.NET写的。带框架的应用服务器服务天下的日子已经一去不复返。不要误解我的意思,那些框架还在,如果说有什么区别的话,现在的趋势正朝着你只需部署所需的模式发展。&最后一点是云。尽管我们还没有到达那种程度,但会继续看到越来越多的按需付费模式的出现,而不是2005年那种为固定能力付费的模式,无论你的应用场景如何。尽管这一模式在财务方面并不简单(涉及到资本支出、运营支出等等),但你很难否认这一趋势在近期内会有所改变。这意味着基础设施会继续朝着实用模式发展,最终消费者可以按照需要提高或降低能力。如果情况是这样的话,我们需要一种能力能尽快就绪的模式,且负载应该仅可能的低。这意味着我们不能等应用服务器加载完一堆未必需要的东西。相反,我们希望扩充的部分正好是我们需要的,不多也不少。&那么,当我们把这些要素一起考虑时,微服务架构模式的情况就很明了了。尽管2005年的SOA的好处仍然有效,基于云的基础设施、DevOps等这些带来的变化现在已经使得颗粒度到操作级的服务管理成为可能。我们仍处在这一努力的早期阶段,在管理所有这些移动组件上仍存在着最大的鸿沟。幸运的是,我们有很多好的例子可以学习。找一位老一点的有大型主机经验的同事问问看,他们是如何在主机航管理所有那些独立的微服务的。只需记住把那叫做事务。责编:李玉琴微信扫一扫实时了解行业动态微信扫一扫分享本文给好友 分享到:
发表评论姓名:&&&&邮箱:&&&&验证码:
著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
创新平台技术,助力政企私有云建设金蝶中间件有限公司 奉继承 博士第16届软博会高峰论坛,……
信息化规划
通过咨询项目或年度顾问方式,帮助您架起业务和IT的桥梁,解决业务和IT创新融合、现有系统取舍难、IT架构、建设路径、IT治理、IT支出优化等IT策略问题。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
通过电话,与您交流信息化现状及要解决的管理问题,帮助您确定IT建设的基本思路,回答您在IT规划方面的常见困惑。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
声明:此服务畅享IT不收取任何费用!
如觉满意,可为畅享IT向您的朋友圈进行口碑宣传。
与您签订总包或三方合同,帮您解决业务和IT规划落地走样、IT详细设计缺失、难以寻觅靠谱的技术供应商、多个供应商协调难、维护升级服务保障难等棘手问题。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
供应商选型
为您推荐与企业需求、预算相匹配的靠谱服务商、产品商,解决产品选型没有底、服务商质量难保障的问题。
对需求设计给出建议,对企业准备的需求文件提出评审意见。
通过典型客户参观、专家评价等方式,对您预选择的供应商给出第三方评价。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
声明:此服务畅享IT不收取任何费用!
!如觉满意,可为畅享IT向您的朋友圈进行口碑宣传。
与您签订监理合同,以里程碑专家评审、项目变更协调、风险控制研讨、供应商关系协调、CIO智力网络等为主要服务内容,与甲乙方一起实现上线成功。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
通过电话,交流您IT建设的现状及面临的问题,在IT建设路径、供应商选择、IT项目棘手问题处理等方面提供智力和资源支持。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
声明:此服务畅享IT不收取任何费用!
!如觉满意,可为畅享IT向您的朋友圈进行口碑宣传。
开发维护外包
畅享IT帮助寻找可靠的、性价比高的开发力量,签订外包合同或三方合同,为企业提供可信赖的开发量,为IT供应商解决开发力量不足的问题。
畅享IT帮助寻找靠谱的、性价比高的维护力量,签订外包合同,对客户满意度负责,为客户解决维护运营服务保障难的问题。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
对IT系统、IT项目或IT管理进行评估,出具中立评估报告,解决IT评价难、取舍难的问题。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
企业若对供应商产品或服务不满意,可请畅享IT做案例采访,进行曝光。
拨打400-698-9918
立刻联系您身边的IT顾问,获得专业梳理(节假日不休)
声明:此服务畅享IT不收取任何费用!
!如觉满意,可为畅享IT向您的朋友圈进行口碑宣传。
400-698-9918

我要回帖

更多关于 微服务架构图 的文章

 

随机推荐