微服务是什么?

微服务是一种架构设计模式。在微服务架构中,业务逻辑被拆分成一系列小而松散耦合的分布式组件,共同构成了较大的应用。每个组件都被称为微服务,而每个微服务都在整体架构中执行着单独的任务,或负责单独的功能。每个微服务可能会被一个或多个其他微服务调用,以执行较大应用需要完成的具体任务;系统还为任务执行——比如搜索或显示图片任务,或者其他可能需要多次执行的任务提供了统一的解决处理方式,并限制应用内不同地方生成或维护相同功能的多个版本。

使用微服务架构还提供这样一种机制:增加新加入开发者的生产效率,并减少新功能的推广时长。每个微服务的代码库与相关工具集都很有限;开发者无需再去了解庞大而复杂的系统,只需理解自己所做的那部分微服务相关子集,便能贡献生产力。由于无需考虑应用的现有部分使用了什么语言或工具集,或者较大应用的其他开发者是否了解这些语言和工具,只需使用当前任务最趁手的工具,因此微服务开发起来非常迅速。

为了充分利用速度优势,让小团队开发成为可能,团队需要自主权;他们必须能迅速作出决定,避免过度监管。要想支持这一点,工作团队应当包括所有相关人员,从产品经理到发布运行人员。由于微服务组件是松散耦合并通过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尝试将应用集成,一般采用中央管理模式来确保各应用能够交互运作。微服务尝试部署新功能,快速有效地扩展开发团队。它着重于分散管理、代码再利用与自动化执行。

总结:

功能 SOA 微服务

组件大小

大块业务逻辑

单独任务或小块业务逻辑

耦合

通常松耦合

总是松耦合

公司架构

任何类型

小型、专注于功能交叉的团队

管理

着重中央管理

着重分散管理

目标

确保应用能够交互操作

执行新功能,快速拓展开发团队

哪种适合你的公司呢?完全取决于你的选择。

from:http://www.sohu.com/a/194609789_444159

大家都在谈的SOA和微服务 你真的理解吗相关推荐

  1. 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别

    内容大纲: 1.介绍Restful.SOAP.RPC.SOA以及微服务 2.重点谈谈SOA与微服务的区别 3.以及为什么要使用微服务架构 什么是Restful Restful是一种架构设计风格,提供了 ...

  2. 浅谈分布式、SOA与微服务

    记得面试邮储银行软开部,面试官问到SOA和微服务的区别,忘记当时怎么说的了,总之回答的不是很好,下来也查了很多,但网上的说法真的是仁者见仁,各执一词,事实也是如此,有关分布式,SOA,微服务从来没有一 ...

  3. SOA和微服务架构的区别?

    知乎用户 289 人赞同了该回答 谢多人邀请,其实前面几位的回答已经差不多了,在这里仅谈下自己的简单总结. 微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多 ...

  4. 简单聊聊SOA和微服务

    本文转载自:http://dockone.io/article/2399 前两天和一个朋友聊天,他向我咨询如何从零开始构建一个健壮.强大的软件系统,聊着聊着他忽然问我,「听大家都在说微服务(下文中有的 ...

  5. SOA和微服务架构的区别

    SOA和微服务架构的区别? 1 条评论 分享 默认排序按时间排序 10 个回答 203赞同 反对,不会显示你的姓名 知乎用户 大型电信行业SOA实施经验,SOA规划咨询,- 203 人赞同 谢多人邀请 ...

  6. 万字长文解析:分布式架构、SOA、微服务架构、API网关、ESB服务总线架构之间的关联及演进

    1架构演进 架构十五年:改变的是形态,不变的是目的 业务驱动架构形态变化 过去十几年,随着互联网发展以及业务的多样化,系统的架构也在不断发生变化,总体上来说大体经历了从单体应用架构-垂直应用架构-分布 ...

  7. soa和微服务的区别

    1.SOA架构和微服务架构的区别 首先SOA和微服务架构一个层面的东西,而对于ESB和微服务网关是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件. 1.SOA(Service Or ...

  8. 微服务架构以及SOA和微服务架构的区别

    微服务架构模式(Microservice Architect Pattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成 ...

  9. 【服务化架构】SOA和微服务架构、灵活架构

    文章目录 一.SOA ESB 二.微服务 微服务和Docker 三.关于 SOA和微服务关系 的几种观点 四.QA 关于ESB的单点故障 关于微服务的去中心化 和 API网关 五.灵活架构 导读 SO ...

最新文章

  1. Weka 开发[1]-Instances类
  2. 一篇SSM框架整合友好的文章(二)
  3. 25个Java机器学习工具库--转载
  4. android组合动画还原,Android - Fragment,View动画,组合动画,属性动画
  5. springboot运行原理
  6. C++ STL一些注意事项
  7. 图嵌入知识表征の初体验
  8. 程序员,你的粮草何在?
  9. 数据库练习题总题库选择判断简答操作题
  10. HUAWEI USG6000系列 NGFW Module V100R001 典型配置案例
  11. Ubuntu无法进入操作系统的恢复和备份操作
  12. 批处理bat中@echo on/off是什么意思?
  13. Vue3 小菠萝 Pinia使用
  14. Vue中Swiper以及vue-awesome-swiper的安装和问题
  15. Linux内核详解与内核优化方案
  16. mac更新系统后xcode-select --install使用问题
  17. 再阿里云服务器卸载安骑士并且屏蔽云盾
  18. git 删除远程的tag
  19. web程序发布后发送传真失败记要
  20. Maven下载安装及使用

热门文章

  1. Docker java项目发布/开发环境搭建
  2. 12V转5V 5V转3.3V电路
  3. 基本最小二乘到递推最小二乘
  4. java处理灰度图像时的问题
  5. timescale说明
  6. 设备和服务器连接 并保存到数据库
  7. DirectShow播放器(LAVFilter + EVR)开发例子
  8. C语言培训目标,c语言学习目标
  9. 利用HFS快速搭建本地Http服务器及文件实时更新问题
  10. Claymore's Dual Ethereum+Decred AMD+NVIDIA GPU Miner(参数)