SOA架构和微服务架构的区别是什么?

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

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

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

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

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

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

ESB和微服务API网关。

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

2.API网关:API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。

API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。为什么微服务一定要有网关?这篇推荐你看下。

API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

3.SOA架构特点:

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

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

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

微服务架构特点:

1.通过服务实现组件化

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

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

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

3.去中心化

  • 每个微服务有自己私有的数据库持久化业务数据

  • 每个微服务只能访问自己的数据库,而不能访问其它服务的数据库

  • 某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。

  • 数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。

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

Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署。

每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。

关注微信公众号:Java技术栈,在后台回复:架构,可以获取我整理的 N 篇最新架构教程,都是干货。

5.主要区别:

6.Dubbo服务的最佳实践

分包

  • 服务接口、请求服务模型、异常信息都放在api里面,符合重用发布等价原则,共同重用原则

  • api里面放入spring的引用配置。也可以放在模块的包目录下。

粒度

  • 尽可能把接口设置成粗粒度,每个服务方法代表一个独立的功能,而不是某个功能的步骤。否则就会涉及到分布式事务

  • 服务接口建议以业务场景为单位划分。并对相近业务做抽象,防止接口暴增

  • 不建议使用过于抽象的通用接口泛型,接口没有明确的语义,带来后期的维护

版本

  • 每个接口都应该定义版本,为后续的兼容性提供前瞻性的考虑 version (maven-snapshot

  • 建议使用两位版本号,因为第三位版本号表示的兼容性升级,只有不兼容时才需要变更服务版本

  • 当接口做到不兼容升级的时候,先升级一半或者一台提供者为新版本,再将消费全部升级新版本,然后再将剩下的一半提供者升级新版本

预发布环境

推荐用法

  • 在provider端尽可能配置consumer端的属性

  • 比如timeout、retires、线程池大小、LoadBalance

配置管理员信息

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

配置dubbo缓存文件

  • 注册中心的列表

  • 服务提供者列表

近期热文推荐:

1.Java 15 正式发布, 14 个新特性,刷新你的认知!!

2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!

3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。

4.吊打 Tomcat ,Undertow 性能很炸!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

(0)

相关推荐

  • 一文详细讲解从接口集成到SOA架构思想

    作者:人月神话,新浪博客同名 简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践 今天这篇文章准备谈下从企业集成需求到SOA架构思想,再到ESB集成平台建设方面的内容.本篇 ...

  • 新时期数字化转型大趋势下-传统企业IT架构和组织重塑

    在前几天,我专门写了一篇文章谈企业数字化技术发展趋势分析,整个分析比较宏观.今天主要还是想聚焦回IT和信息化部门,探讨下数字化转型下的IT架构和能力重构. 在谈这个这个话题前,首先还是对去年我在华南C ...

  • 从SOA架构思想到中台和微服务,太多的基础概念需要澄清

    作者:人月神话,新浪博客同名 简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践 今天这篇文章作为对SOA,中台和微服务等大量基础概念的一次统一说明.我始终认为,当你在学习 ...

  • 程序员蜕变为架构师必须要知道的「架构理论」

    Java思享汇2020-07-20 20:02:52 架构目的和指标 架构目的: 架构设计的主要目的是为了解决软件系统复杂度带来的问题,是用最小的人力成本来满足需求的开发和响应需求的变化,用最小的运行 ...

  • ESB和SOA到底是什么?

    ESB和其相关缩写SOA,是困惑之源.ESB是企业服务总线的缩写,而SOA的意思是面向服务架构. 但这样解析并没有太多的内在含义.所以这里尽可能的提供一些更多的信息,而不是仅仅从企业的角度的来介绍ES ...

  • 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构

    如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...

  • 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)

    一.架构演变 1.系统架构.集群.分布式系统 简单理解 (1)什么是系统架构? [什么是系统架构?] 系统架构 描述了 在应用程序内部,如何根据 业务.技术.灵活性.可扩展性.可维护性 等因素,将系统 ...

  • MVC、RPC、SOA、微服务架构之间的区别

    MVC.RPC.SOA.微服务架构之间的区别 一.MVC架构 其实MVC架构就是一个单体架构. 代表技术:Struts2.springMVC.Spring.Mybatis 等等. 二.RPC架构 RP ...

  • 微服务架构的前世今生

    传统行业向互联网行业的转型 背景 2012年以后,因为移动互联网的兴起,随着网名数量的增多,需求变化大,用户群体大.导致已有的应用程序无法抗住大规模的并发,且版本迭代麻烦,扩展不够灵活,应对外界环境能 ...

  • 微服务架构下的API接口驱动开发,设计和集成

    今天谈下在微服务架构下,接口设计和开发方面的思考. 对于微服务架构,SOA和Http Rest API接口设计,在我前面的头条文章中均有专门的说明,因此对于基础方面的解释在本文不再重复.对于今天要写的 ...

  • Laravel 如何设计微服务架构,及如何进行微服务间沟通? | Laravel China 社区

    如题,我目前有需要用 Laravel 设计微服务架构的需求,但能找到的相关资料不多 目前已有的一个思考方向是使用 K8S 统合各个独立的 Laravel 小服务,再开放统一对外的 API Gatewa ...

  • 微服务架构-从理想到现实

    注:本文为我最近阅读<微服务架构设计模式>的一点感悟,我不准备详细去写对该书的读书笔记记录,而是结合我们自己所做的一些微服务架构实践情况做一些总结和复盘. 从单体应用到微服务 任何一个新的 ...

  • 传统企业IT架构和微服务转型-从需求问题到实施策略

    因此今天对传统企业IT架构转型,传统架构微服务化方面再做下总结整理. 传统企业IT架构转型概述 企业IT架构为什么要转型 传统企业内部信息化部门的核心目标仍然是基于业务驱动IT的思路,通过IT规划和应 ...

  • 浅谈微服务架构的设计模式

    微服务架构模式(MicroserviceArchitectPattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微型服务体系结构是一种体系结构模式,它主张把单个应用分成 ...