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

SOA架构

SOA架构

Service-Oriented Architecture,SOA是一种软件架构模式,旨在将应用程序的不同功能划分为一组可重用的、自治的、可互操作的服务

每个服务表示一个特定的业务功能,并通过定义明确的接口和协议来实现与其他服务的通信。
SOA的主要目标是实现业务流程的灵活性、可扩展性和重用性

主要组件和角色

  1. 服务提供者(Service Provider): 负责实现和提供特定的服务,定义服务的接口和协议。
  2. 服务消费者(Service Consumer): 使用其他服务提供的功能的应用程序或组件。
  3. 服务注册与发现: 提供服务的注册和发现机制,使消费者能够找到需要的服务。
  4. 服务协议: 定义服务之间的通信协议,可以使用SOAP。

SOA规范

  1. SOA 拥有领导制定技术标准的组织 Open CSA;
  2. SOA 具有清晰的软件设计的指导原则,比如服务的封装性、自治、松耦合、可重用、可组合、无状态,等等;
  3. SOA 架构明确了采用 SOAP 作为远程调用的协议,依靠 SOAP 协议族(WSDL、UDDI 和一大票 WS-*
    协议)来完成服务的发布、发现和治理;
  4. SOA 架构会利用一个被称为是企业服务总线(Enterprise Service
    Bus,ESB)的消息管道,来实现各个子系统之间的通讯交互,这就让各个服务间在 ESB
    的调度下,不需要相互依赖就可以实现相互通讯,既带来了服务松耦合的好处,也为以后可以进一步实现业务流程编排(Business
    Process Management,BPM)提供了基础;
  5. SOA 架构使用了服务数据对象(Service Data Object,SDO)来访问和表示数据,使用服务组件架构(Service
    Component Architecture,SCA)来定义服务封装的形式和服务运行的容器;
    ……

优势

  1. 重用性: SOA的主要目标之一是促进服务的重用。各个服务可以独立地开发、测试和部署,从而在不同应用程序中重复使用。
  2. 灵活性: SOA支持将不同的服务组合成业务流程,可以根据业务需求轻松地调整和修改这些流程。
  3. 松散耦合: 通过明确定义的服务接口,不同的服务可以相对独立地通信和协作,实现松散耦合。这使得系统更易于维护和扩展。
  4. 技术异构性: SOA支持不同技术栈的应用程序进行集成,使得不同系统能够互操作,从而降低了技术异构性带来的挑战。
  5. 可维护性: SOA的模块化和松散耦合特性使得系统更易于维护。对一个服务的修改不会影响其他服务。
  6. 业务解耦: SOA将业务逻辑抽象成服务,实现了业务的解耦。这使得系统更易于维护和理解。

劣势

  1. 复杂性:
    SOA架构涉及多个服务、接口、协议等复杂概念,因此确实需要一些专业人员来进行设计、实施和管理。这可能使得SOA在初期的投入成本较高,特别是对于小规模的项目或团队。

  2. 精细度和严谨性: SOA架构强调服务的精细设计和定义,需要准确的接口规范、消息传递和协议等。这在某些情况下可能使得开发过程相对较慢和复杂。

  3. 高门槛: 由于SOA需要一定的技术和理论背景,以及对分布式系统的了解,因此确实需要懂得复杂概念的专业人员来驾驭。这可能使得SOA不适合所有类型的团队或项目。

  4. 难以推广: 正如你所提到的,SOA在推广方面可能存在一些挑战。它的复杂性和高门槛使得它在普遍应用时面临一些限制。特别是对于小规模的项目或刚起步的团队来说,SOA可能过于繁琐。

  5. 异构性和复杂集成: SOA适用于需要异构大型系统之间复杂集成的场景。然而,确实需要解决不同系统之间的通信和集成问题,这可能涉及消息传递、数据转换等。

SOA和微服务区别

1. 规模和粒度

SOA: SOA关注于将应用程序划分为一组可重用的服务,每个服务代表一个特定的业务功能。服务的粒度相对较大,通常涵盖更广泛的功能领域。

微服务架构: 微服务架构将应用程序拆分成更小的、自治的微服务,每个微服务专注于一个特定的业务功能。微服务的粒度更小,强调单一职责原则。

2. 组织方式

SOA: SOA通常将不同功能组件划分为服务,这些服务可能由同一组织或多个组织共同开发和维护。SOA强调服务的重用和互操作性

微服务架构: 微服务架构强调将应用程序的不同部分划分为独立的、自治的微服务,每个微服务可以由不同的团队开发和管理。
每个微服务都是独立的服务,有自己的数据存储和业务逻辑

3. 通信和协作

SOA: SOA中的服务通过定义的接口和协议进行通信。通常使用SOAP、REST等协议。

微服务架构: 微服务通过API进行通信,可以使用HTTP、RPC等协议。微服务之间的通信更为轻量级。

4. 依赖和部署

SOA: SOA中的服务可能存在相互依赖,多个服务可以共用相同的服务总线ESB。服务可以在不同的部署单元中。

微服务架构: 微服务是自治的,每个微服务可以独立部署和运行。微服务强调独立的数据存储,每个微服务可以有自己的数据库。

5. 管理和治理

SOA: SOA需要强调服务的管理和治理,包括服务注册与发现、安全性、版本控制等。

微服务架构: 微服务架构也需要管理和治理,但微服务的独立性可能会减轻一些集中式治理的压力。

6. 技术栈

SOA: SOA没有固定的技术栈,可以使用不同的协议、中间件等。通常会涉及Web服务技术。

微服务架构: 微服务架构通常使用轻量级的技术栈,如HTTP、REST、Docker等。

综上所述,尽管SOA和微服务架构有一些相似之处,但它们的设计原则、粒度、独立性和依赖关系等方面存在明显的差异

总结

SOA 架构过于严谨精密的流程与理论,导致了软件开发的全过程,都需要有懂得复杂概念的专业人员才能够驾驭。

从 SOA 诞生的那一天起,就已经注定了它可以实现多个异构大型系统之间的复杂集成交互,却很难作为一种具有广泛普适性的软件架构风格来推广,注定会被微服务架构所取代。

相关文章:

SOA架构

SOA架构 Service-Oriented Architecture,SOA是一种软件架构模式,旨在将应用程序的不同功能划分为一组可重用的、自治的、可互操作的服务。 每个服务表示一个特定的业务功能,并通过定义明确的接口和协议来实现与其他服务的通信。 SOA的主要目…...

“深入探索JVM内部机制:解密Java虚拟机“

标题:深入探索JVM内部机制:解密Java虚拟机 摘要:本篇博客将深入剖析Java虚拟机(JVM)的内部机制,包括类加载、内存管理、垃圾回收、即时编译等关键组成部分。通过对JVM内部机制的解密,我们可以更…...

PostgreSQL空值的判断

PostgreSQL空值的判断 空值判断非空判断总结 空值判断 -- 查询为空的 is null,sql简写isnull select * from employees where manager_id isnull;select * from employees where manager_id is null;非空判断 -- 查询不为空的 is not null;sql简写notnull select * from empl…...

使用phpunit进行单元测试

使用phpunit进行单元测试 本教程假定您使用 PHP 8.1 或 PHP 8.2。您将学习如何编写简单的单元测试以及如何下载和运行 PHPUnit. PHPUnit 10 的文档 在这。 下载:可以用以下2种方法之一: 1.PHP 存档 (PHAR) 我们分发了一个 PHP存档(PHAR&…...

MongoDB 简介

什么是MongoDB ? MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…...

[LitCTF 2023]Follow me and hack me

...

Java从入门到高级的全面指南

快速入门 对于初学者,要快速入门Java,首先需要了解Java的基本语法和面向对象编程的概念。以下是一些关键步骤: 了解基础语法: Java的语法包括变量、数据类型、运算符、控制语句等。你可以通过阅读相关的书籍或者在线教程来学习这…...

linux 命令- systemctl

systemctl 参数说明 1、使用语法 用法:systemctl [OPTIONS…] {COMMAND} … 2 、参数说明 参数参数说明start立刻启动后面接的unitstop立刻关闭后面接的unitrestart立刻关闭后启动后面接的unit,亦即执行stop再start的意思reload不关闭后面接的unit的…...

自动驾驶,一次道阻且长的远征|数据猿直播干货分享

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在6月的世界人工智能大会上,马斯克在致辞中宣称,到2023年底,特斯拉便可实现L4级或L5级的完全自动驾驶(FSD)。两个月之后,马斯克又在X社交平台上发言&am…...

大数据培训前景怎么样?企业需求量大吗

大数据行业对大家来说并不陌生,大数据行业市场人才需求量大,越早入行越有优势,发展机会和上升空间等大。不少人通过大数据培训来提升自己的经验和自身技术能力,以此来获得更好的就业机会。 2023大数据培训就业前景怎么样呢?企业需…...

redis — 基于Spring Boot实现redis延迟队列

1. 业务场景 延时队列场景在我们日常业务开发中经常遇到,它是一种特殊类型的消息队列,它允许把消息发送到队列中,但不立即投递给消费者,而是在一定时间后再将消息投递给消费者。延迟队列的常见使用场景有以下几种: 在…...

【日常积累】Linux之init系统学习

init系统简介: Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程,这个进程是系统的第一个进程,它负责产生…...

Python功能制作之3D方块

介绍 用python写一个黑窗口,窗口里面有一个白色的3D方块,左键按下后移动可以旋转以各个视角来看方块。 当然有需要的话,可以自己在代码中去更改颜色,直接通过RBG的参数进行更改即可。 做了两个函数:init[初始化]和d…...

【0基础入门Python笔记】二、python 之逻辑运算和制流程语句

二、python 之逻辑运算和制流程语句 逻辑运算控制流程语句条件语句(if语句)循环结构(for循环、while循环)continue、break和pass关键字控制流程语句的嵌套以及elif 逻辑运算 Python提供基本的逻辑运算:不仅包括布尔运…...

python中的svm:介绍和基本使用方法

python中的svm:介绍和基本使用方法 支持向量机(Support Vector Machine,简称SVM)是一种常用的分类算法,可以用于解决分类和回归问题。SVM通过构建一个超平面,将不同类别的数据分隔开,使得正负样…...

typedef

t y p e d e f typedef typedef 声明&#xff0c;简称typedef&#xff0c;是创建现有类型的新名字。 比如&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long ll; int main() {ll n;scanf("%lld",&n);printf("%lld"…...

校园跑腿市场行情分析

随着社会的发展和人们生活节奏的加快&#xff0c;校园跑腿市场逐渐兴起并呈现出蓬勃发展的态势。在这个快节奏的时代&#xff0c;越来越多的学生需要在繁忙的学业之外完成各种任务&#xff0c;而校园跑腿服务正是应运而生&#xff0c;为他们提供了便利和时效。本文将从需求方面…...

微服务相关面试题

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱写博客的嗯哼&#xff0c;爱好Java的小菜坤 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;社区论坛&#xff1a;希望大家能加入社区共同进步…...

前端-ES6

let 和 const 为了解决var的作用域的问题&#xff0c;而且var 有变量提升&#xff0c;会出现全局污染的问题 let 块状作用域&#xff0c;并且不能重复声明const 一般用于声明常量&#xff0c;一旦被声明无法修改&#xff0c;但是const 可以声明一个对象&#xff0c;对象内部的…...

169. 多数元素(摩尔投票法) 题解

题目描述&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...