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

news2025/5/12 14:13:31

概述

服务指的是系统对外提供的功能集

从应用的角度定义,可以认为SOA是一种应用框架,将日常业务划分为单独的业务功能和流程(即服务),SOA使用户可以构建、部署和整合这些服务。

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

业务流程是指为了实现某种业务目的所进行的流程或一系列动作

BPEL:面向Web服务的业务流程执行语言,是一种使用Web服务定义和执行业务流程的语言

SOA架构以企业服务总线连接各个系统,是集中式的技术架构,应用服务间相互依赖导致部署复杂,应用间交互使用远程通信,降低了响应速度。

微服务架构是SOA架构的进一步优化,去除了ESB企业服务总线,是一个真正意义上去中心化的分布式架构,降低了微服务之间的耦合程度。

参考架构

以服务为中心的企业集成架构:

连接服务——企业服务总线ESB(Enterprise Service Bus)

ESB的基本特征和能力包括:

  • 描述服务的元数据和服务注册管理
  • 传递数据,并拥有对数据进行转换的能力
  • 发现、路由、匹配和选择的能力,查找对应服务
  • 安全支持、服务质量保证、可管理性和负载平衡等

业务逻辑服务 

功能:

  1. 整合已有应用:应用和信息访问服务
  2. 整合新开发的应用:业务应用服务
  3. 整合客户和业务伙伴(B2C/B2B):伙伴服务,提供与企业外部的服务连接

控制服务

  1. 数据整合:信息服务,提供集成数据的能力
  2. 流程整合:流程服务,完成业务流程的编排、事务、集成人工活动等
  3. 用户访问整合:交互服务,实现用户访问集成,包括:交付服务、体验服务、资源服务等

开发服务 

开发环境和工具中为不同开发者的角色提供的功能。如:建模服务、设计服务、实现服务、测试服务

业务创新和优化服务

以业务性能管理(BPM)技术为核心提供业务事件发布、收集和关键业务指标监控能力,

包括:

  1. 公共事件框架服务:提供IT和业务事件的激发、存储和分类
  2. 采集服务:分析感兴趣的服务
  3. 监控服务:通过监控,计算和管理业务流程的关键性能指标

IT服务管理 

为业务流程和服务提供安全、高效和健康的运行环境

协议和规范

最基本的协议包括:UDDI、WSDL和SOAP

UDDI(统一描述、发现和集成协议):用于查找发现服务,使得商业实体能够彼此发现

WSDL(Web服务描述语言):用来描述Web服务和说明如何与Web服务通信的XML语言,描述三个基本属性:服务做什么、如何访问服务、服务位于何处

SOAP:在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议 

SOA的设计原则 

  • 无状态:服务无需任何状态,可以独立运行
  • 单一实例:服务只提供单一功能
  • 明确定义的接口:长时间稳定,一旦公布,不能随意更改
  • 自包含和模块化:服务内部封装了一些活动和组件,服务需要自行管理和恢复
  • 粗粒度:服务数量少,消息量大
  • 松耦合:服务之间交互频次低,私有数据对使用者不可见
  • 重用功能:服务应该是可重用的
  • 互操作性、兼容和策略声明:形成完整的声明 

SOA的设计模式 

服务注册表模式

服务注册:开发者向注册表公布他们制作的服务功能

服务位置:注册表帮助使用者查找符合自身要求的服务

服务绑定: 使用者利用检索到的服务合同来开发代码

企业服务总线模式

由中间件技术实现的支持面向服务矿建的基础软件平台,企业服务总线本质上是一个中间件。

这种交互过程不再是点对点的直接交互模式,而是由事件驱动的消息交互模式(隐式调用)

微服务模式 

不再强调传统SOA框架中的ESB,特点:复杂应用解耦、独立、技术选型灵活、容错、松耦合易扩展,常见微服务设计模式:

  1. 聚合器微服务:聚合器调用多个微服务实现系统应用程序所需功能。一种是将检索到的数据信息进行处理并直接展示;另一种是获取到的数据信息增加业务逻辑处理后,再进一步发布成一个新的微服务
  2. 链式微服务:收到请求后,返回一个经过合并处理的行营,服务之间形成一条调用链
  3. 数据共享微服务:当服务之间存在强耦合关系,可能存在多个微服务共享缓存与数据库存储的现象
  4. 异步消息传递微服务: 将消息写入一个消息队列中,实现业务逻辑以异步方式运行

图片来源于网络 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AJAX原理

AJAX使用XHR 对象和服务器进行数据交互 XHR <p class"my-p"></p><script>const xhr new XMLHttpRequest()xhr.open(GET,http://hmajax.itheima.net/api/province)xhr.addEventListener(loadend,()>{// console.log(xhr.response)const data …

Paddle Serving|部署一个自己的OCR识别服务器

前言 之前使用C部署了自己的OCR识别服务器&#xff0c;Socket网络传输部分是自己写的&#xff0c;回过头来一看&#xff0c;自己犯傻了&#xff0c;PaddleOCR本来就有自己的OCR服务器项目&#xff0c;叫PaddleServing&#xff0c;这里记录一下部署过程。 1 下载依赖环境 1.1 …

Web开发—Vue工程化

文章目录 前言 Vue工程化 一、介绍 二、环境准备 1.介绍create-vue 2.NodeJS安装 3.npm介绍 三&#xff0c;Vue项目创建 四&#xff0c;项目结构 五&#xff0c;启动项目 六&#xff0c;Vue项目开发流程 七&#xff0c;API风格 前言 Vue工程化 前面我们在介绍Vue的时候&#…

Word如何制作三线表格

1.需求 将像这样的表格整理成论文中需要的三线表格。 2.直观流程 选中表格 --> 表格属性中的边框与底纹B --> 在设置中选择无&#xff08;重置表格&#xff09;–> 确定 --> 选择第一行&#xff08;其实是将第一行看成独立表格了&#xff0c;为了设置中线&…

【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南

&#x1f525; 本文详细讲解如何从零搭建一个完整的DeepSeek AI对话系统&#xff0c;包括Spring Boot后端和React前端&#xff0c;适合AI开发入门者快速上手。即使你是编程萌新&#xff0c;也能轻松搭建自己的AI助手&#xff01; &#x1f4da;博主匠心之作&#xff0c;强推专栏…

用C语言实现的——一个支持完整增删查改功能的二叉排序树BST管理系统,通过控制台实现用户与数据结构的交互操作。

一、知识回顾 二叉排序树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;&#xff0c;又称二叉查找树或二叉搜索树&#xff0c;是一种特殊的二叉树数据结构。 基本性质&#xff1a; ①有序性 对于树中的每个节点&#xff0c;其左子树中所有节点的值都小于该节点的…

论文阅读笔记——ROBOGROUND: Robotic Manipulation with Grounded Vision-Language Priors

RoboGround 论文 一类中间表征是语言指令&#xff0c;但对于空间位置描述过于模糊&#xff08;“把杯子放桌上”但不知道放桌上哪里&#xff09;&#xff1b;另一类是目标图像或点流&#xff0c;但是开销大&#xff1b;由此 GeoDEX 提出一种兼具二者的掩码。 相比于 GR-1&#…

『 测试 』测试基础

文章目录 1. 调试与测试的区别2. 开发过程中的需求3. 开发模型3.1 软件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特点/缺点 3.3 螺旋模型3.3.1 螺旋模型的特点/缺点 3.4 增量模型与迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的测试 4 测试模型4.1 V模型4.2 W模型(双V…

robomaster机甲大师--电调电机

文章目录 C620电调ID设置速率 电调发送报文电调接收报文cubemx程序初始化发送接收 C620电调 ID设置 速率 1Mbps 电调发送报文 发送的数据为控制电机的输出电流&#xff0c;需要将can数据帧的ID设置为0x200 电调接收报文 机械角度&#xff1a;电机的0到360度映射到0到几千转…

少儿编程机构用的教务系统

在编程教育行业快速发展的今天&#xff0c;培训机构面临着学员管理复杂、课程体系专业性强、教学效果难以量化等独特挑战。爱耕云教务系统针对编程培训机构的特殊需求&#xff0c;提供了一套全方位的数字化解决方案&#xff0c;帮助机构实现高效运营和教学质量提升。 为什么编…

基于VSCode+PlatformIO环境的ESP8266的HX1838红外模块

以下是针对ESP8266开发板的红外遥控解码系统开发教程&#xff0c;基于VSCodePlatformIO环境编写 一、概述 本实验通过ESP8266开发板实现&#xff1a; 红外遥控信号解码自定义按键功能映射串口监控输出基础设备控制&#xff08;LED&#xff09; 硬件组成&#xff1a; NodeMC…

Linux中的防火墙

什么是防火墙 windows防火墙的设置 linux防火墙设置命令 什么是防火墙&#xff1f; 防火墙是一种网络安全设备&#xff0c;它能够&#xff1a; 监控和过滤进出网络的流量 阻止不安全的连接 保护计算机和网络免受未授权访问 创建一个安全边界 简单来说&#xff0c;防火…

补补表面粗糙度的相关知识(一)

表面粗糙度&#xff0c;或简称粗糙度&#xff0c;是指表面不光滑的特性。这个在机械加工行业内可以说是绝绝的必备知识之一&#xff0c;但往往也是最容易被忽略的&#xff0c;因为往往天天接触的反而不怎么关心&#xff0c;或者没有真正的去认真学习掌握。对于像我一样&#xf…

力扣刷题Day 46:搜索二维矩阵 II(240)

1.题目描述 2.思路 方法1&#xff1a;分别找到搜索矩阵的右、下边界&#xff0c;然后从[0][0]位置开始遍历这部分矩阵搜索目标值。 方法2&#xff1a;学习Krahets佬的思路&#xff0c;从搜索矩阵的左下角开始遍历&#xff0c;matrix[i][j] > target时消去第i行&#xff0c…

Kubernetes 集群部署应用

部署 Nginx 应用 命令行的方式 1. 创建 deployment 控制器的 pod # --imagenginx&#xff1a;这个会从 docker.io 中拉取&#xff0c;这个网站拉不下来 # kubectl create deployment mynginx --imagenginx# 使用国内镜像源拉取 kubectl create deployment mynginx --imaged…

Unity3D仿星露谷物语开发42之粒子系统

1、目标 使用例子系统&#xff0c;实现割草后草掉落的特效。 通过PoolManager获取特效预制体&#xff0c;通过VFXManager来触发特效。 2、配置例子特效 在Hierarchy -> PersistentScene下创建新物体命名为Reaping。 给该物体添加Particle System组件。 配置例子系统参数…

python 上海新闻爬虫, 东方网 + 澎湃新闻

1. 起因&#xff0c; 目的: 继续做新闻爬虫。我之前写过。此文先记录2个新闻来源。后面打算进行过滤&#xff0c;比如只选出某一个类型新闻。 2. 先看效果 过滤出某种类型的新闻&#xff0c;然后生成 html 页面&#xff0c;而且&#xff0c;自动打开这个页面。 比如科技犯罪…

[Java实战]Spring Boot 整合 Freemarker (十一)

[Java实战]Spring Boot 整合 Freemarker (十一) 引言 Apache FreeMarker 作为一款高性能的模板引擎&#xff0c;凭借其简洁语法、卓越性能和灵活扩展性&#xff0c;在 Java Web 开发中占据重要地位。结合 Spring Boot 的自动化配置能力&#xff0c;开发者能快速构建动态页面、…

LeetCode 高频题实战:如何优雅地序列化和反序列化字符串数组?

文章目录 摘要描述题解答案题解代码分析编码方法解码方法 示例测试及结果时间复杂度空间复杂度总结 摘要 在分布式系统中&#xff0c;数据的序列化与反序列化是常见的需求&#xff0c;尤其是在网络传输、数据存储等场景中。LeetCode 第 271 题“字符串的编码与解码”要求我们设…

C#游戏开发中的注意事项

目录 一、性能优化:提升游戏运行效率 1. 避免不必要的循环和迭代 2. 减少字符串拼接 3. 利用Unity的生命周期函数 4. 使用对象池(Object Pooling) 二、内存管理:避免内存泄漏和资源浪费 1. 及时释放非托管资源 2. 避免空引用异常 3. 合理使用引用类型和值类型 4. …