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

SOA架构和微服务架构的区别1 SOA 架构和微服务架构的区别首先 SOA 和微服务架构一个层面的东西 而对于 ESB 和微服务网关是一个层面的东西 一个谈到是架构风格和方法 一个谈的是实现工具或组件 nbsp 1 SOA ServiceOrien 面向服务的架构 他是一种设计方法 其中包含多个服务 服务之间通过相互依赖最终提供一系列的功能 一个服务通常以独立的形式存在与操作系统进程中 各个服务之间

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

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

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

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

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

2.ESB和微服务API网关。

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

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

2.API网关:API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

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

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

 

3.SOA架构特点:

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

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

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

4.微服务架构特点:

1.通过服务实现组件化

  • 开发者不再需要协调其它服务部署对本服务的影响。

2.按业务能力来划分服务和开发团队

  • 开发者可以自由选择开发技术,提供 API 服务

3.去中心化

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

4.基础设施自动化(devops、自动化部署)

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

5.主要区别:

功能

SOA

微服务

组件大小

大块业务逻辑

单独任务或小块业务逻辑

耦合

通常松耦合

总是松耦合

公司架构

任何类型

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

管理

着重中央管理

着重分散管理

目标

确保应用能够交互操作

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

 

6.Dubbo服务的最佳实践

 分包

  • 服务接口、请求服务模型、异常信息都放在api里面,符合重用发布等价原则,共同重用原则
  • api里面放入spring 的引用配置。 也可以放在模块的包目录下。

粒度

  • 尽可能把接口设置成粗粒度,每个服务方法代表一个独立的功能,而不是某个功能的步骤。否则就会涉及到分布式事务
  • 服务接口建议以业务场景为单位划分。并对相近业务做抽象,防止接口暴增
  • 不建议使用过于抽象的通用接口  T T
    <泛型>
    ,接口没有明确的语义,带来后期的维护

版本

  • 每个接口都应该定义版本,为后续的兼容性提供前瞻性的考虑 version (maven -snapshot)
  • 建议使用两位版本号,因为第三位版本号表示的兼容性升级,只有不兼容时才需要变更服务版本
  • 当接口做到不兼容升级的时候,先升级一半或者一台提供者为新版本,再将消费全部升级新版本,然后再将剩下的一半提供者升级新版本

预发布环境

推荐用法

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

 配置管理员信息

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

配置dubbo缓存文件

  • 注册中心的列表
  • 服务提供者列表

参考文献: 

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

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

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

 

 

 

 


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212032.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:00
下一篇 2026年3月18日 下午9:00


相关推荐

  • Distiller:量化算法

    Distiller:量化算法Quantization 量化算法注意 对于任何需要量化感知训练的以下方法 请参阅这里 了解如何使用 Distiller 的机制调用它 基于范围的线性量化 Range BasedLinearQ 让我们在此分解使用的术语 线性 Linear 表示通过乘以数字常数 比例因子 来量化浮点值 基于范围 Range Based 意味着为了

    2026年3月19日
    3
  • 集成学习-Voting

    集成学习-Voting一、什么是集成学习集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。一般情况下,集成学习中的多个学习器都是同质的”弱学习器”。上面的描述来自百度百科,看定义的话知道是基于‘弱学习器’的,很多讲集成学习的教程都会先讲决策树,然后讲到随机森林和GBDT,也就是bagging和boosting,…

    2025年6月19日
    4
  • Idea激活码永久有效Idea2019.2.4激活码教程-持续更新,一步到位「建议收藏」

    Idea激活码永久有效Idea2019.2.4激活码教程-持续更新,一步到位「建议收藏」Idea激活码永久有效2019.2.4激活码教程-Windows版永久激活-持续更新,Idea激活码2019.2.4成功激活

    2022年6月17日
    108
  • python与anaconda安装(先安装了python后安装anaconda,基于python已存在的基础上安装anaconda)——逼死强迫症、超详解[通俗易懂]

    python与anaconda安装(先安装了python后安装anaconda,基于python已存在的基础上安装anaconda)——逼死强迫症、超详解[通俗易懂]目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入#一、安装python欢迎…

    2022年6月5日
    594
  • AI 开发实践,小白如何用5千行代码打造个人项目?(完整经验复盘 + Cursor 提效攻略)

    AI 开发实践,小白如何用5千行代码打造个人项目?(完整经验复盘 + Cursor 提效攻略)

    2026年3月15日
    4
  • 函数依赖关系的例子_部分函数依赖

    函数依赖关系的例子_部分函数依赖这里写自定义目录标题完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:2.部分函数依赖:传递函数依赖:完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:通过{学生学号,选修课程名}可以得到{该生本门选修课程的成绩},而通过单独的{学生学号}或者单独的{选修课程名}都无法得到该成绩,则说明{该生本门选修课程的成绩}完全依赖于{学生学号,选修课程名}2.部分函数依赖:通过{学生学号,课程号}可以得到{该生姓名},而通过单独的{学生学号}已经能够得到{该生姓名},则说明{该生姓

    2025年5月25日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号