https://blog.csdn.net/zpoison/article/details/80729052

https://blog.csdn.net/qq_35119422/article/details/81560833

https://blog.csdn.net/zhonglunsheng/article/details/83153451

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

1.SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中。各个服务之间通过网络调用。

2.微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华, 微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用 。这些小应用之间通过服务完成交互和集成。

微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想

2.ESB和微服务API网关。

1.ESB(企业服务总线),简单 来说 ESB 就是一根管道,用来连接各个服务节点。为了集成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通;

3.SOA架构特点:

系统集成:站在系统的角度,解决企业系统间的通信问题,把原先散乱、无规划的系统间的网状结构,梳理成规整、可治理的系统间星形结构,这一步往往需要引入 一些产品,比如 ESB、以及技术规范、服务管理规范; 这一步解决的核心问题是【有序】

系统的服务化:站在功能的角度, 把业务逻辑抽象成 可复用、可组装的服务 ,通过服务的编排实现业务的 快速再生, 目的:把原先固有的业务功能转变为通用 的业务服务,实现业务逻辑的快速复用 ;这一步解决 的核心问题是【复用】

业务的服务化:站在企业的角度,把企业职能抽象成 可复用、可组装的服务;把原先职能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力;“前面两步都是从技术层面来解决系统调用、系统功能复用的问题”。第三步,则是以业务驱动把一个业务单元封装成一项服务。这一步解决的核心问题是【高效】

4.微服务架构特点:

1.通过服务实现组件化

  • 开发者不再需要协调其它服务部署对本服务的影响。
  • 2. 按业务能力来划分服务和开发团队

  • 开发者可以自由选择开发技术,提供 API 服务
  • 3. 去中心化

  • 每个微服务有自己私有的数据库持久化业务数据
  • 每个微服务只能访问自己的数据库,而不能访问其它服务的数据库
  • 某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。
  • 数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。
  • 4.基础设施自动化(devops、自动化部署)

  • Java EE部署架构, 通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)
  • 5.主要区别:

  • 尽可能把接口设置成粗粒度,每个服务方法代表一个独立的功能,而不是某个功能的步骤。否则就会涉及到分布式事务
  • 服务接口建议以业务场景为单位划分。并对相近业务做抽象,防止接口暴增
  • 不建议使用过于抽象的通用接口  T T<泛型>,接口没有明确的语义,带来后期的维护
  • 每个接口都应该定义版本,为后续的兼容性提供前瞻性的考虑 version (maven -snapshot)
  • 建议使用两位版本号,因为第三位版本号表示的兼容性升级,只有不兼容时才需要变更服务版本
  • 当接口做到不兼容升级的时候,先升级一半或者一台提供者为新版本,再将消费全部升级新版本,然后再将剩下的一半提供者升级新版本
  • 预发布环境

  • 在provider端尽可能配置consumer端的属性
  • 比如timeout、retires、线程池大小、LoadBalance
  • 配置管理员信息

  • application上面配置的owner 、 owner建议配置2个人以上。因为owner都能够在监控中心看到
  • 配置dubbo缓存文件

  • 注册中心的列表
  • 服务提供者列表
  • 参考文献:

    http://www.uml.org.cn/zjjs/201708083.asp

    https://zhidao.baidu.com/question/1899225333752310100.html

    http://blog.sina.com.cn/s/blog_493a84550102wq50.html

    微服务与SOA区别

    SOA(面向服务的架构):面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

    微服务:微服务架构是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

    SOA和微服务的主要区别:

  • 微服务剔除SOA中复杂的ESB企业服务总线,所有的业务智能逻辑在服务内部处理,使用Http(Rest API)进行轻量化通讯
  • SOA强调按水平架构划分为:前、后端、数据库、测试等,微服务强调按垂直架构划分,按业务能力划分,每个服务完成一种特定的功能,服务即产品
  • SOA将组件以library的方式和应用部署在同一个进程中运行,微服务则是各个服务独立运行。
  • 传统应用倾向于使用统一的技术平台来解决所有问题,微服务可以针对不同业务特征选择不同技术平台,去中心统一化,发挥各种技术平台的特长。
  • SOA架构强调的是异构系统之间的通信和解耦合;(一种粗粒度、松耦合的服务架构)
  • 微服务架构强调的是系统按业务边界做细粒度的拆分和部署
  • 微服务的具体特点:

    (1)      独立部署,灵活扩展

    传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(如用户服务、商品服务等)为单位进行部署。

    (2)      资源的有效隔离

    微服务设计原则之一,就是每一个微服务拥有独立的数据源,假如微服务A想要读写微服务B的数据库,只能调用微服务B对外暴露的接口来完成。这样有效的避免了服务之间争用数据库和缓存资源所带来的问题。

    同时, 由于每一个微服务实例在Docker容器上运行,实现了服务器资源(内存、CPU资源等)的有效隔离

    (3)      团队组织架构的调整

    微服务设计的思想也改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端、后端、DBA、测试分别有自己对应的团队,属于水平团队组织架构。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。但实际上在企业中并不会把团队组织架构拆分得这么绝对,垂直架构只是一种理想的架构。

    微服务架构的不足之处:

    (1)      微服务把原有的项目拆分成多个独立工程,增加了开发、测试、运维、监控等的复杂度。

    (2) 微服务架构需要保证不同服务之间的数据一致性,引入了分布式事务和异步补偿机制,为设计和开发带来一定挑战

    所以微服务适用于复杂的大系统,小应用盲目的拆分只会增加其维护和开发成本...

    作者:徐兵元
    链接:https://www.zhihu.com/question/37808426/answer/90979979
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    首先, 可以肯定的是SOA和微服务的确是一脉相承的 ,大神Martin Fowler提出来这一概念可以说把SOA的理念继续升华,精进了一步。其核心思想是在应用开发领域,使用一系列微小服务来实现单个应用的方式途径,或者说 微服务的目的是有效的拆分应用,实现敏捷开发和部署 ,可以是使用不同的编程语言编写。而SOA可能包含的意义更泛一些,更不准确一些。
    其次,从实现方式上,两者都是中立性,语言无关,协议跨平台,相比SOA,微服务框架将能够带来更大的敏捷性,并为你构建应用提供 更轻量级、更高效率的开发 。而SOA更适合大型企业中的业务过程编排、应用集成。另外还有 微服务甚至是去ESB、去中心化、分布式 的,而SOA还是以ESB为核心,大量的WS标准实现。
    再次,从服务粒度上,既然是微,必然微服务更倡导 服务的细粒度,重用组合 ,甚至是每个操作(或方法)都是独立开发的服务,足够小到不能再进行拆分。而SOA没有这么极致的要求,只需要接口契约的规范化,内部实现可以更粗粒度,微服务更多为了 可扩充性、负载均衡以及提高吞吐量 而去分解应用,但同时也引发了打破数据模型以及维护一致性的问题。
    最后,从部署方式上,这个是最大的不同,对比Monolithic(有人翻译为单体)的Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子, 把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个 全栈应用,可以通过自动化方式独立部署, 每个服务运行在自己的进程中 ,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。