系统架构师-面向服务架构(SOA)全解

1、为什么需要SOA架构

1.1 系统集成问题

  1. 异构系统整合
  • 例如,一个企业可能同时拥有用 Java 开发的企业资源规划(ERP)系统、用 C# 开发的客户关系管理(CRM)系统以及用 Python 开发的数据分析系统。通过 SOA,可以将这些系统的特定功能以服务的形式暴露出来,然后根据业务需求进行组合和调用,实现数据的共享和业务流程的协同。
  1. 可扩展性
  • 比如,企业要增加一个新的市场推广活动管理功能,可以开发一个独立的服务来实现这个功能,并将其集成到现有的 SOA 架构中。这样,既可以满足新的业务需求,又不会干扰到其他正在运行的业务模块。

1.2 业务灵活性问题

  1. 快速响应业务变化
  • 例如,当市场需求发生变化,企业需要调整产品销售策略时,可以通过重新组合现有的服务来实现新的销售流程,而无需对整个系统进行大规模的开发和修改
  1. 服务复用
  • 比如,一个用于用户身份验证的服务可以在企业的多个系统中复用,无论是内部员工管理系统还是面向客户的电子商务平台,都可以调用这个服务进行用户身份验证。

1.3 技术独立性问题

  1. 技术升级与替换
  • 例如,企业决定将数据库从一种类型转换为另一种类型,只需要对相应的数据服务进行调整,而不会影响到其他业务服务和整个系统的运行
  1. 降低技术风险
  • 如果企业只依赖于一种特定的技术,一旦该技术出现问题或不再被支持,可能会对整个系统造成严重影响。而在 SOA 架构下,企业可以根据实际情况选择最适合的技术来实现各个服务,从而降低技术风险。

2. SOA架构及需要解决的问题

在这里插入图片描述

从应用的角度定义,可以认为 SOA是一种应用框架,它着眼于日常的业务应用,并将它们划分为单独的业务功能和流程,即所谓的服务

从软件的基本原理定义,可以认为SOA是一个组件模型,它将应用程序的不同功能单元 (称为服务)通过这些服务之间定义良好的接口和契约联系起来。

简单理解,SOA即将业务功能封装为服务(应用框架),通过接口使不同服务进行通信(组件模型)

所以需要解决的问题

  1. 我有一个服务,我如何给别人使用?我又怎么使用别人的服务?
  2. 不同服务应该如何通信

为了解决这些问题,所以就开始制定协议

3. SOA协议

3.1 SOA的发展史

3.1.1 萌芽:xml

通过XML,开发人员摆脱了HTML语言的限制,可以将任何文档转换成XML格式,然后跨越因特网协议传输

3.1.2 标准化阶段: SOAP、WSDL、UDDI

三个著名的 Web服务标准和规范:

  • 简单对象访问协议 (Simple Object Access Protocal,SOAP)
  • Web服务描述语言 (Web Services Description Language,WSDL)
  • 通用服务发现和集成协议 (Universal Discovery Description and Integration,UDDI)

3.1.3 成熟应用阶段: SCA/SDO/WS-Policy

SCA 和 SDO构成了SOA 编程模型的基础,而WS-Policy建立了SOA组件之间安全交互的规范。

3.2 SOA主要协议

3.2.1 UDDI(通用服务发现和集成协议)

对应需要解决的服务发现使用问题,UDDI就是一个注册中心,可以去注册中心注册,然后其他人可以发现注册的服务。
微软和IBM的公共UDDI注册中心早在2006年就已经关闭了,所以更像是一个历史产物,现在使用的模式是在公司内部搭建自己的注册中心

3.2.2 WSDL(web服务描述语言)

WSDL(Web Services Description Language,Web服务描述语言),是一个用来描述Web服务说明如何与Web服务通信XML语言。通过WSDL, 可描述Web服务的三个基本属性。 (1)服务做些什么——服务所提供的操作(方法)。 (2)如何访问服务——和服务交互的数据格式以及必要协议。 (3)服务位于何处——协议相关的地址,如 URL。

顾名思义,它首先是一门语言,这个语言就是用来描述web服务和通信,其实就是很常见的get/post等等方法,http或者https,端口号是多少

简单理解,它就是SOA通信传递的数据格式

3.2.3 SOAP(简单对象访问协议)

SOAP是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它包括4个部分:1. SOAP封装 (Envelop), 定义了一个描述消息中的内容是什么,是发送的,谁应当接收并处理它以及如何处理它们的框架;2. SOAP编码规则 (Encoding Rules), 用于表示应用程序需要使用的 数据类型 的实例;3. SOAP RPC表示 (RPC Representation) 是远程过程调用和应答的协定;4.SOAP绑定 (Binding) 是使用底层协议交换信息。

WSDL已经确定需要传递的数据长什么样,现在就是需要解决服务之间通信传递的问题,所以需要SOAP。

但是不要忘记我们上面还有一个图

在这里插入图片描述

如图,服务间的通信首先可以通过这个叫ESB的家伙进行通信,它同时兼顾了数据通信的协议和传递的数据格式问题

一个典型的在 ESB环境中组件之间的交互过程是:首先由服务请求者触发一次交互过程,产生一个服务请求消息,并将该消息按照ESB 的要求标准化,然后标准化的消息被发送给服务总线。 ESB 根据请求消息中的服务名或者接口名进行目的组件查找,将消息转发至目的组件,并最终将处理结果逆向返回给服务请求者。

到这里,我们有两种方案

  1. ESB
  2. UDDI+SOAP+WSDL
    在这里插入图片描述

按教材的分发,ESB是企业服务总线模式,而UDDI就是服务注册表模式,至于通信及通信格式这些问题,可以采用SOPA+WSDL的方案,这些都不是必须的,都可以根据实际情况调整

3.2.4 REST(表述性转移)

(表述性状态转移,这个名字挺好的TOT)

做开发最熟的RESTful api,就是这种理念的实现,不多赘述
在这里插入图片描述

4. SOA设计模式

如上,我们已经讲了服务注册表模式和企业服务总线模式
现在我们讲微服务模式

在这里插入图片描述

看图说故事,右边的微服务架构,第一眼就看到少了ESB,SOA把系统分为服务,微服务把系统分为微服务,所以微服务=SOA?

当然不是

另一个问题,微服务是SOA的一种?SOA包含了微服务?

微服务可以被认为是 SOA 的一种演进形式,但两者并不是严格的包含关系。微服务是在 SOA 的基础上发展而来的一种架构风格,它在服务粒度、技术实现和部署方式等方面与 SOA 存在差异。虽然两者有一定的相似之处,但不能简单地认为微服务是 SOA 的一种,也不是严格的包含关系。

SOA与微服务的区别

  1. 粒度:

SOA:服务通常较大,可能包含多个功能,因此 API 可能更加复杂,往往需要更大的数据载荷。
微服务:服务较小且专注,API 通常更简洁,针对单一功能或资源。

  1. 通信协议:

SOA:可能使用多种协议(如 SOAP、REST、JMS),并常常依赖企业服务总线(ESB)来管理和协调服务间的通信。
微服务:通常更倾向于轻量级协议(如 REST、gRPC),直接服务间通信,避免中间层。

  1. 耦合度:

SOA:服务间可能存在较强的耦合,依赖于共享的模式或数据模型。
微服务:服务间的耦合较松散,每个微服务可以独立变化,使用各自的数据模型。

  1. 治理:

SOA:通常需要更多的治理和规范,特别是在大型企业环境中。
微服务:更强调去中心化的治理,团队可以自主决定服务的实现和技术栈。
总体来说,微服务更注重灵活性和独立性,而 SOA 更注重集成和治理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435301.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformers 中的 Softmax 可以并行加速么?

Transformers 中的 Softmax 可以并行加速么? 面试题 Softmax 如何并行? Softmax 计算公式 安全的 Softmax 运算 Softmax函数在深度学习中广泛应用于多分类问题的输出层,它通过指数化和归一化将一个实数向量转换为概率分布。然而&#xff…

基于springboot vue 大学生竞赛管理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

YoloV10改进策略:BackBone改进|PoolFormer赋能YoloV10,视觉检测性能显著提升的创新尝试

摘要 在深度学习的广阔领域中,目标检测作为计算机视觉的基石任务之一,始终吸引着研究者的广泛关注。近期,我们大胆尝试将前沿的PoolFormer主干网络引入经典的目标检测框架YoloV10中,这一创新性融合不仅为YoloV10注入了新的活力,更在检测精度与效率上实现了双重飞跃,成为…

【Linux学习】【Ubuntu入门】2-1 Linux系统下运行C语言输出hello word

1.双击打开VMware软件,点击开启此虚拟机后,等待点击头像输入密码进入 2.“CtrlAltt”调出命令行终端,输入命令sudo apt-get install vim安装vim,输入命令sudo apt-get install gcc安装gcc 3.输入命令vi hello.c进入C语言编写环境&…

Web端云剪辑解决方案,提供多轨视频、音频、特效、字幕轨道可视化编辑

传统视频剪辑软件的繁琐安装、高昂硬件要求以及跨平台协作的局限性,让无数创意者望而却步。美摄科技作为云端视频编辑技术的领航者,携其革命性的Web端云剪辑解决方案,正重新定义视频创作的边界,让专业级视频剪辑触手可及&#xff…

【Linux】Docker下载与使用-nginx

目录 一、Docker介绍 二、Docker结构 三、下载Daocker 1. 在linux上下载docker,执行以下命令即可: 2. 开启docker 3. 执行以下操作并进行使用 四、在Docker上安装nginx 一、Docker介绍 Docker:是给予Go语言实现的开源项…

深入探讨 Docker:远程登录与镜像管理

深入探讨 Docker:远程登录与镜像管理 走一路,寻索一路。每有胡杨树,我必仔细浏览,驻足长久,如急于兑现一个久远的梦。而更多平常的日子如同荒原本身一样朴实无华,如同岁月一样不露形色,只守着一…

统信服务器操作系统【SSH登录常见问题】解决方案

方案适用于统信服务器操作系统D/E/A版。 文章目录 前言问题及解决方案问题一问题现象问题原因问题方案问题二问题现象问题原因问题方案问题三问题原因问题方案问题四问题现象问题原因问题方案问题五问题现象问题原因问题方案问题六问题现象问题原因问题方案前言 介绍日常使用s…

SPI驱动学习七(SPI_Slave_Mode驱动程序框架)

目录 一、SPI_Slave_Mode驱动程序框架1. Master和Slave模式差别1.1 主设备 (Master)1.2 从设备 (Slave)1.3 示例 2. SPI传输概述2.1 数据组织方式2.2 SPI控制器数据结构 3. SPI Slave Mode数据传输过程4. 如何编写程序4.1 设备树4.2 内核相关4.3 简单的示例代码4.3.1 master和s…

Jenkins本地安装配置与远程访问管理本地服务详细流程

文章目录 前言1. 安装Jenkins2. 局域网访问Jenkins3. 安装 cpolar内网穿透软件4. 配置Jenkins公网访问地址5. 公网远程访问Jenkins6. 固定公网地址 前言 本文主要介绍如何在Linux CentOS 7中安装Jenkins并结合cpolar内网穿透工具实现远程访问管理本地部署的Jenkins服务. Jenk…

活动报名| 探索存内计算的未来,共话AGI时代

活动日期:2024年09月28日 下午1:00-6:00 活动地点:杭州技术转移中心 三楼路演厅 议程亮点: 存内计算技术架构以及最新趋势AGI开源项目交流存内计算实操上板体验 存内计算 ——突破物理极限的下一代算力技术 直接…

kubernetes存储入门(kubernetes)

实验环境依旧是三个节点拉取镜像,然后在master节点拉取资源清单: 然后同步会话,导入镜像; 存储入门 ConfigMap volume卷--》volumemount(挂载卷) Glusterfs NFS ISCSI HostPath ConfigMap Secret E…

玄机--蚁剑流量

木马的连接密码是多少 黑客执行的第一个命令是什么 id 黑客读取了哪个文件的内容,提交文件绝对路径 /etc/passwd 黑客上传了什么文件到服务器,提交文件名 黑客上传的文件内容是什么 黑客下载了哪个文件,提交文件绝对路径 蚁剑流量特征总结 …

基于SpringBoot+Vue+MySQL的在线酷听音乐系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展,网络已成为人们日常生活中不可或缺的一部分。在线音乐服务因其便捷性和丰富性,逐渐成为用户获取音乐内容的主要渠道。然而,传统的音乐播放平台往往存在歌曲资源有限…

SpringCloud 2023各依赖版本选择、核心功能与组件、创建项目(注意事项、依赖)

目录 1. 各依赖版本选择2. 核心功能与组件3. 创建项目3.1 注意事项3.2 依赖 1. 各依赖版本选择 SpringCloud: 2023.0.1SpringBoot: 3.2.4。参考Spring Cloud Train Reference Documentation选择版本 SpringCloud Alibaba: 2023.0.1.0*: 参考Spring Cloud Alibaba选择版本。同时…

C Primer Plus 第7章——第二篇

你该逆袭了 第7章:重点摘录 三、逻辑运算符1、备选拼写:iso646.h 头文件2、优先级3、求值顺序4、范围 四、一个统计单词的程序1、针对代码,提出疑问,第8章节进行讲解2、我结合自己的理解,自己写的代码 五、条件运算符 &#xff1f…

解决macOS MySQL安装后不能远程访问的问题

主要是因为我的后端服务是通过docker部署的, 无法和宿主机的MySQL进行通信. 首先输入 use mysql; 之后输入 update user set host “%” where user “root”; 最后输入 flush privileges; 合起来就是: use mysql;update user set host "%" where user &qu…

TypeScript 基本使用指南【前端 26】

TypeScript 基本使用指南 引言 TypeScript 是 JavaScript 的一个超集,它添加了类型系统和一些其他特性,使得开发大型应用时更加高效和可靠。TypeScript 代码最终会被编译成普通的 JavaScript 代码,这意味着你可以在任何支持 JavaScript 的环…

轻量级日志管理系统SpringBoot3+Loki+grafana的使用实例

目录 文章目录 目录1、简介2、SpringBoot3应用发送日志到Loki2.1、基本介绍2.2、添加依赖2.3、配置文件application.yml2.4、创建logback配置2.5、添加日志示例2.6、运行SpringBoot3 3、在grafana中查看日志3.1、登录grafana3.2、查询日志3.3、查询我们的SpringBoot发送过来的日…

828华为云征文|针对Flexus X实例云服务器的CPU和内存性能测评

目录 一、Flexus X实例云服务器简介 1.1 产品摘要 1.2 产品优势 1.3 本次测评服务器规格 二、CPU性能测试 2.1 操作说明 2.2 操作步骤 2.2 结果分析 三、测试内存负载 3.1 操作说明 3.2 操作步骤 3.3 结果分析 四、测试终评 一、Flexus X实例云服务器简介 1.1 产品…