当前位置: 首页 > news >正文

十一、SOA(SOA的具体设计模式)

我们现在深入学习SOA的具体设计模式。SOA架构中的设计模式主要是指导服务如何设计、实现、部署和管理,确保服务的松耦合、高可用性、扩展性和复用性。SOA常见的设计模式可以分为以下几类:

1. 服务层次设计模式

1.1. 基础服务(Fundamental Service)
基础服务提供核心的功能,通常是企业的基本业务能力。例如,订单处理服务、客户管理服务等。这些服务是面向具体业务逻辑的,通常不会直接与用户交互。

  • 示例:订单服务(Order Service)提供下单、订单查询、订单状态更新等功能,它被多个上层应用调用。

1.2. 实体服务(Entity Service)
实体服务是对业务实体进行操作的服务,负责处理与具体业务实体(如客户、订单、产品等)相关的CRUD(创建、读取、更新、删除)操作。

  • 示例:客户服务(Customer Service)负责所有与客户相关的操作,例如创建客户、更新客户信息、查询客户订单历史等。

1.3. 实用服务(Utility Service)
实用服务提供与业务无关的通用功能,如认证、日志记录、审计等。它们通常在多个业务服务中复用。

  • 示例:身份验证服务(Authentication Service)为所有系统提供统一的用户认证和授权功能。

2. 服务组合设计模式

2.1. 服务编排(Service Orchestration)
服务编排是将多个独立的服务组合在一起,以实现一个复杂的业务流程。通过业务流程管理系统(BPM)或工作流引擎来定义和管理服务的执行顺序、并行处理、条件判断等。

  • 示例:一个电商系统中的订单处理流程可能涉及支付服务、库存服务和物流服务。服务编排可以协调这些服务的调用,使得订单处理过程自动化。

2.2. 服务代理(Service Broker/Proxy)
服务代理模式通过代理服务来封装实际服务的调用逻辑。代理服务可以处理复杂的通信、路由、负载均衡、消息转换等功能,从而隐藏服务的实现细节。

  • 示例:某个支付网关服务可能需要与多个第三方支付服务提供商交互。使用服务代理模式,客户端不需要知道每个支付提供商的接口细节,只需通过支付代理服务来完成支付操作。

3. 消息处理设计模式

3.1. 面向消息的中间件(Message-Oriented Middleware, MOM)
这种模式利用消息队列、消息总线等机制来处理异步通信,确保服务之间的松耦合和高可用性。服务之间通过消息传递进行通信,消息可以异步处理,不会阻塞调用者。

  • 示例:订单服务下单后,会将消息发送到“库存更新队列”,库存服务从队列中读取消息并异步处理库存更新操作。

3.2. 事件驱动架构(Event-Driven Architecture, EDA)
在SOA中,事件驱动模式是一种常见的设计模式。服务不直接相互调用,而是通过事件通知来触发操作。事件驱动架构具有高度的松耦合性和扩展性。

  • 示例:当客户下单后,系统触发“订单已创建”事件。其他服务(如库存服务、物流服务)可以订阅这个事件,并根据事件进行相应处理。

4. 服务治理设计模式

4.1. 服务注册与发现(Service Registry and Discovery)
在大型SOA系统中,服务注册与发现是关键的设计模式。服务提供者在注册中心注册其服务,服务消费者通过查询注册中心来查找和调用服务。

  • 示例:使用ZooKeeper、Eureka等服务注册工具来管理和发现系统中的服务。服务提供者启动时,自动注册到服务注册中心,消费者根据服务名动态获取服务地址。

4.2. 服务版本控制(Service Versioning)
服务版本控制是确保在SOA架构中不同版本的服务能够共存,以支持向后兼容性和灵活的服务演进。

  • 示例:一个订单服务的API可能会存在多个版本(如v1、v2),客户端可以选择调用哪个版本,旧版本的API可以继续支持,而新版本可以提供增强的功能。

4.3. 服务监控和日志管理
为了确保服务的稳定运行,需要对每个服务进行监控和日志管理。服务监控能够提供服务性能、可用性等方面的实时信息,而日志管理可以帮助开发团队进行调试和分析。

  • 示例:使用Prometheus、ELK(Elasticsearch, Logstash, Kibana)等工具来监控服务的健康状况,并通过日志系统分析服务的行为和错误信息。

5. 企业服务总线设计模式

**企业服务总线(ESB,Enterprise Service Bus)**是SOA架构中的一个重要组件,负责协调服务之间的通信、消息路由、协议转换等。

5.1. 路由模式(Routing Pattern)
ESB可以根据消息的内容或元数据将消息路由到不同的服务,这使得服务之间的交互更加灵活。

  • 示例:根据不同客户的订单类型(普通订单或加急订单),ESB将消息路由到不同的订单处理服务。

5.2. 协议转换模式(Protocol Transformation)
ESB可以实现不同通信协议之间的转换,例如将基于HTTP的请求转换为消息队列服务。

  • 示例:客户端通过HTTP发送请求,ESB将其转换为JMS消息发送到后台处理服务。

5.3. 消息增强(Message Enrichment)
ESB可以在消息传输过程中,添加额外的信息来丰富消息内容,便于服务处理。

  • 示例:在订单消息被传递到物流服务之前,ESB可以从用户数据库中获取用户的位置信息并添加到消息中。

总结

SOA架构设计模式提供了多种解决方案,帮助架构师在设计、集成和管理分布式服务时处理各种复杂场景。这些设计模式涵盖了从服务的设计与组合到消息处理、服务治理和企业服务总线的实现。通过合理使用这些模式,企业可以构建出高效、灵活、可扩展的系统架构,支持复杂业务需求。

相关文章:

十一、SOA(SOA的具体设计模式)

我们现在深入学习SOA的具体设计模式。SOA架构中的设计模式主要是指导服务如何设计、实现、部署和管理,确保服务的松耦合、高可用性、扩展性和复用性。SOA常见的设计模式可以分为以下几类: 1. 服务层次设计模式 1.1. 基础服务(Fundamental S…...

Mybatis原理

一. 为什么要使用Mybatis? 1.1 jdbc的使用步骤 首先,在pox.xml中引入MySQl驱动的依赖 第一步, Class.forName 注册驱动 第二步,获取一个Connection。 第三步,创建一个Statement对象。 第四步,execute()方法执行SQL。execute()方…...

黑马头条day3-2 自媒体文章管理

前边还有一个 素材列表查询 没什么难度 就略过了 查询所有频道和查询自媒体文章也是和素材列表查询类似 就是普通的查询 所以略过了 文章发布 这个其实挺复杂的 一共三张表 一个文章表 一个素材表 一个文章和素材的关联表 区分修改与新增就是看是否存在id 如果是保存草稿…...

JinDouYun性能测试工具使用方法

1.功能介绍 2. 安卓端支持安卓6及以上的版本,ios支持大部分版本 3. 可以测试游戏,视频,普通应用的性能数据,数据精准,低延迟,无侵入 4.工具下载链接 筋斗云 5.后续功能添加,高版本支持&…...

操作系统 | 学习笔记 | | 王道 | 5.3 磁盘和固态硬盘

5.3 磁盘和固态硬盘 5.3.1 磁盘 磁盘结构 磁盘:磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据 磁道:磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道 扇区:一个磁道又被划分成一个个扇区&am…...

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录?二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录? 单点登录(Single Sign On&…...

WEB领域是不是黄了还是没黄

进入2024年后,WEB领域大批老表失业,一片哀嚎,个个饿的鬼叫狼嚎,为啥呢,下面是我个人的见解和看法。 中国程序员在应用层的集中 市场需求:中国的互联网行业在过去几年中经历了爆炸性增长,尤其是…...

Android系统:系统架构

文章目录 分层设计分块设计总结 分层设计 自上而下分为:应用层、应用架构层、系统运行层、硬件抽象层、Linux内核层 应用层 封装一系列系统App 应用架构层(Framework) 封装一系列运行App需要的Java框架 提供App开发需要的API 系统运行层(Libraries) 封装一系…...

NCNN 源码(1)-模型加载-数据预处理-模型推理

参考 ncnn 第一个版本的代码。 0 整体流程 demo:squeezenet ncnn 自带的一个经典 demo:squeezenet 的代码: // 网络加载 ncnn::Net squeezenet; squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_…...

重修设计模式-结构型-享元模式

重修设计模式-结构型-享元模式 复用不可变对象,节省内存 享元模式(Flyweight Pattern)核心思想是通过共享对象方式,达到节省内存和提高性能的目的。享元对象需是不可变对象,因为它会被多处代码共享使用,要避…...

JavaScript 运算符

JavaScript 中的运算符可以根据其功能和用途分为几类。以下是主要的运算符类型及其用法: 1. 算术运算符 用于执行基本的数学运算。 : 加法 let sum 5 3; // 8- : 减法 let difference 5 - 3; // 2* : 乘法 let product 5 * 3; // 15/ : 除法 let quotient 5…...

3.js - 运动曲线

这个球,绕着这个红色的线圈转 代码 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlslet scene,camera,renderer,controls nulllet moon,earth null// 根据,一系列的点,创建曲线 le…...

免费ppt模板哪里找?职场必备这些利器

一眨眼,9月份的尾声渐近,无论是学生还是职场人士,都开始准备着新一轮的演讲和报告。在这个忙碌的时期,一份精美的PPT模板能够大幅提升你的工作效率,让你的演示更加引人入胜。 不用担心高昂的版权费用,市场…...

wampserve 配置本地域名,出现错误

概述 今天更换了电脑,在本地安装和配置docker的时候,想用自定义域名访问NGINX容器,127.0.0.1和localhost都可以访问,但是自定义域名无法访问, 接着去捯饬已经使用的wampserver的集成环境,出现了同样的问题…...

MySQL慢查询优化指南

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 当遇到慢查询问题时,不仅影响服务效率,还可能成为系统瓶颈。作为一位软件工程师,掌握MySQL慢查询优化技巧至关重要。今天,我们就来一场“数据库加速之旅…...

怎么录制游戏视频?精选5款游戏录屏软件

对于热爱游戏的你来说,记录游戏中的精彩瞬间并分享给朋友或粉丝,无疑是一种享受。然而,在众多录屏软件中,如何选择最适合你的那一款?今天,我们就为大家精选了五款游戏录屏软件,需要的朋友快来选…...

论文阅读 - MDFEND: Multi-domain Fake News Detection

https://arxiv.org/pdf/2201.00987 目录 ABSTRACT INTRODUCTION 2 RELATED WORK 3 WEIBO21: A NEW DATASET FOR MFND 3.1 Data Collection 3.2 Domain Annotation 4 MDFEND: MULTI-DOMAIN FAKE NEWS DETECTION MODEL 4.1 Representation Extraction 4.2 Domain Gate 4.…...

LabVIEW软件出现Bug如何解决

在LabVIEW开发中,程序出现bug是不可避免的。无论是小型项目还是复杂系统,调试与修复bug都是开发过程中的重要环节。下文介绍如何有效解决LabVIEW软件中的bug,包括常见错误类型、调试工具、错误处理机制。 1. 常见Bug类型分析 在LabVIEW中&am…...

【数据结构-栈】力扣844. 比较含退格的字符串

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:s “ab#c”, t “…...

DataFrame生成excel后为什么多了一行数字

问题描述 python查询数据生成excel文件,生成的excel多了第一行数字索引,1,2,3,4,5...... 代码: df pd.DataFrame(data)df.to_excel(filename, sheet_name用户信息表, indexFalse) 解决: 原理也很简单,就是设置个参…...

linux 内存屏障(barrier)分析

谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏,栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔…...

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

目录 一、引言 二、文生文(text2text-generation) 2.1 概述 2.2 Flan-T5: One Model for ALL Tasks 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 ​​​​​​​ 2.3.3 pipeline返回参数 ​​​​​​​​​​​…...

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全…...

MODBUS TCP 转 CANOpen

产品概述 SG-TCP-COE-210 网关可以实现将 CANOpen 接口设备连接到 MODBUS TCP 网络中。用户不需要了解具体的 CANOpen 和 Modbus TCP 协议即可实现将CANOpen 设备挂载到 MODBUS TCP 接口的 PLC 上,并和 CANOpen 设备进行数据交互。 产品特点 &#xf…...

vue2+elementUI实现handleSelectionChange批量删除-前后端

功能需求&#xff1a;实现选中一个或多个执行批量删除操作 在elementUI官网选择一个表格样式模板&#xff0c;Element - The worlds most popular Vue UI framework 这里采用的是 将代码复制到前端&#xff0c;这里是index.vue <template><el-button type"dang…...

LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略

LLMs之OCR&#xff1a;llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略 目录 llm_aided_ocr的简介 1、特性 2、详细技术概览 PDF处理和OCR PDF到图像转换 OCR处理 文本处理流程 分块创建 错误校正与格式化 重复内容移除 标题和页码…...

低代码平台后端搭建-阶段完结

前言 最近又要开始为跳槽做准备了&#xff0c;发现还是写博客学的效率高点&#xff0c;在总结其他技术栈之前准备先把这个专题小完结一波。在这一篇中我又试着添加了一些实际项目中可能会用到的功能点&#xff0c;用来验证这个平台的扩展性&#xff0c;以及总结一些学过的知识。…...

暑假考研集训营游记

文章目录 摘要&#xff1a;1.对各大辅导机构考研封闭集训营的一些个人看法&#xff1a;2.对于考研原因一些感想&#xff1a;结语 摘要&#xff1a; Ashy在暑假的时候参加了所在辅导班的为期一个月的考研封闭集训营&#xff0c;有了一些全新的感悟&#xff0c;略作记录。 1.对…...

C#中的报文(Message)

在C#中&#xff0c;报文&#xff08;Message&#xff09;通常是指在网络通信中交换的数据单元。报文可以由多种不同的组成部分构成&#xff0c;具体取决于通信协议和应用场景。 以下是一些常见的报文组成部分&#xff1a; 头部&#xff08;Header&#xff09;&#xff1a;包含…...

Python知识点:如何使用Python与Java进行互操作(Jython)

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; Jython 是一种完全兼容 Java 的 Python 实现&#xff0c;它将 Python 代码编译成…...