构建SOA架构时应该注意的问题

1.原有系统架构中的集成需求

         面向服务的体系结构本质上来说是一种具有特殊性质的体系结构,它由具有互操作性和位置透明的组件集成构建并互连而成。基于SOA的企业系统架构通常都是在现有系统架构投资的基础上发展起来的,我们并不需要彻底重新开发全部的子系统,SOA可以通过利用当前系统已有的资源(开发人员、软件语言、硬件平台、数据库和应用程序)来重复利用系统中现有的系统和资源。SOA是一种可适应的、灵活的体系结构类型,基于SOA构建的系统架构可以在系统的开发和维护中缩短产品上市时间,因而可以降低企业系统开发的成本和风险。因此,当SOA架构师遇到一个十分复杂的企业系统时,首先考虑的应该是如何重用已有的投资而不是替换遗留系统,因为如果考虑到有限的预算,整体系统替换的成本是十分高昂的。

2.服务粒度的控制以及无状态服务的设计

        当SOA架构师构建一个企业级的SOA系统架构时,关于系统中最重要的元素,也就是SOA系统中服务的构建有两点需要特别注意的地方:首先是对于服务粒度的控制,另外就是对于无状态服务的设计。 

2.1服务粒度的控制

         SOA系统中服务粒度的控制是一项十分重要的设计任务。通常来说,对于将暴露在整个系统外部的服务推荐使用粗粒度的接口,而相对较细粒度的服务接口通常用于企业系统架构的内部。从技术上来讲,粗粒度的服务接口可能是一个特定服务的完整执行,而细粒度的服务接口可能是实现这个粗粒度服务接口的具体的内部操作。

        虽然细粒度的接口能为服务请求者提供更加细化和更多的灵活性,但同时也意味着引入较难控制的交互模式易变性,也就是说服务的交互模式可能随着不同。如果我们暴露这些易于变化的服务接口给系统的外部用户,就可能造成外部服务请求者难于支持不断变化的服务提供者所暴露的细粒度服务接口;而粗粒度服务接口保证了服务请求者将以一致的方式使用系统中暴露出的服务。虽然面向服务的体系结构并不强制要求一定要使用粗粒度的服务接口,但是建议使用它们作为外部集成的接口。通常架构设计师可以使用BPEL来创建由细粒度操作组成的业务流程的粗粒度的服务接口。

2.2无状态服务的设计 

         SOA系统架构中的具体服务应该都是独立的、自包含的请求,在实现这些服务的时候不需要前一个请求的状态,也就是说服务不应该依赖于其他服务的上下文和状态,即SOA架构中的服务应该是无状态的服务。当某一个服务需要依赖时,最好把它定义成具体的业务流程(BPEL)。在服务的具体实现机制上,可以通过使用EJB组件来实现粗粒度的服务。我们通常会利用无状态的Session Bean来实现具体的服务,如果基于Web Service技术,就可以将无状态的Session Bean暴露为外部用户可以调用到的Web服务,也就是把传统的Session Facade模型转化为EJB的Web服务端点。这样,就可以向Web服务客户提供粗粒度的服务。

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

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

相关文章

Jmeter压测 —— 1秒发送1次请求

场景:有时候测试场景需要设置请求频率为一秒一次(或几秒一次)实现方法一:1、首先需要在线程组下设置循环次数(可以理解为请求的次数) 次数设置为请求300次,其中线程数跟时间自行设置 2、在设置…

XSS(跨站脚本攻击)

1.什么是xss XSS全称(Cross Site Scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了 XSS,是最常见的Web应用程序安全漏洞之一,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写…

2002NOIP普及组真题 1. 级数求和

线上OJ&#xff1a; 【02NOIP普及组】级数求和 核心算法&#xff1a;暴力模拟 备注&#xff1a;此类题&#xff0c;考场上也可以考虑 打表 题解代码&#xff1a; #include <bits/stdc.h> using namespace std;int k, n 0; double s 0; int main() {scanf("%d&q…

【AI学习】OpenAI员工谈消融实验

jbetker&#xff08;OpenAI员工&#xff09;的博客不长&#xff0c;很好读&#xff0c;但是内容却别开生面、非常有见底。 消融实验真的很重要 我不再像以前那样阅读那么多论文了。这让我感到惊讶&#xff0c;因为我一直认为&#xff0c;当我把机器学习作为全职工作时&#x…

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册 晨控CK-UR12-E01 是天线一体式超高频读写器头&#xff0c;工作频率默认为902MHz&#xff5e;928MHz&#xff0c;符合EPC Global Class l Gen 2&#xff0f;IS0-18000-6C 标准&#xff0c;最大输出功率 33dBm。读卡器同时…

爬山算法详细介绍

爬山算法介绍 爬山算法&#xff0c;又称局部搜索算法或局部择优方法&#xff0c;是一种基于贪婪策略的优化算法。它采用启发式方法&#xff0c;是对深度优先搜索的一种改进&#xff0c;利用反馈信息帮助生成解的决策。其基本思想是从当前位置开始&#xff0c;在周围邻域内寻找…

Kubernetes学习总结知识点汇总

Kubernetes 是一个开源的容器编排系统&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation&#xff08;CNCF&#xff09;来维护。Kubernetes 提供了一个运行分布式系统的框架&#xff0c;能够无缝地扩展和…

vue3-使用富文本编辑器-wangEditor-文章发表1

最近在搞项目:我们组内几位成员正在搞一个网站搭建,以后更新会比较缓慢 引言:如果要网站要用的富文本编辑器的话,这边推荐用wangEditor 官网地址传送 : wangEditorhttps://www.wangeditor.com/ 我现在还在扩展我的写文章用的富文本编辑器 现在我将简单介绍一下其基本使用方…

#15松桑前端后花园周刊-Turborepo 2.0、ESLint v9.4.0、重新学习promise、CSS gap

⚡️行业动态 ESLint 推出了一个新的 ESLint 配置迁移器 ESLint 用户没有升级到 ESLint v9.x 的最大原因之一是迁移配置文件似乎很困难和复杂。因此 Eslint 推出eslint/migrate-config支持将. eslintrc 文件迁移到 eslint.config.js&#xff0c;以帮助用户提高配置文件的速度。…

如何把input复选框如何变成好看的圆形

在HTML和CSS中&#xff0c;默认的<input type"checkbox">元素通常呈现为一个小方块。要将复选框变为圆形&#xff0c;你需要使用CSS来自定义其样式。这通常涉及到隐藏默认的复选框并使用伪元素&#xff08;如::before或::after&#xff09;来创建一个新的圆形外…

PyTorch tutorials:快速学会使用PyTorch

准备深入学习transformer&#xff0c;并参考一些资料和论文实现一个大语言模型&#xff0c;顺便做一个教程&#xff0c;今天是番外篇&#xff0c;介绍下PyTorch&#xff0c;后面章节实现代码主要使用这个框架。 本系列禁止转载&#xff0c;主要是为了有不同见解的同学可以方便联…

# RocketMQ 实战:模拟电商网站场景综合案例(三)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;三&#xff09; 一、环境搭建&#xff1a;数据库表结构介绍 1、优惠券表 FieldTypeCommentcoupon_iddecigint(50) NOT NULL优惠券IDcoupon_pricedecimal(10,2) NULL优惠券金额user idbigint(50) NULL用户IDor…

Web 自动化测试(基于Pytest极简)

Pytest 初体验 在使用 Python 进行 Web UI 自动化测试时&#xff0c;我们除了使用 unittest 单元测试框架&#xff0c;还可以使用 pytest&#xff0c;本节实验就给大家简单的介绍一下 pytest。 环境配置 本系列实验我们借助 VS Code 工具编写代码&#xff0c;使用的 Python …

IP地址简介

一、IP地址 Internet Protocol Address&#xff0c;即网络层协议地址&#xff0c;是IP的缩写。 二、IP地址的作用 为什么不直接使用MAC&#xff0c;又加了一个IP地址呢&#xff1f; 事实上底层传输&#xff0c;最终使用的肯定是MAC地址&#xff0c;但是由于在以前&#x…

Elasticsearch-经纬度查询(8.x)

目录 一、开发环境 二、pom文件 三、ES配置文件 四、ES相关字段 五、ES半径查询 ES的字段类型:geo_point&#xff0c;可以实现以一个点为中心的半径查询(geo_distance query) ES 地里位置查询: 半径查询(geo_distance query)查询指定矩形内的数据(geo_bounding_box quer…

管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异

目录 一、侦听器&#xff08;watch&#xff09;是什么&#xff1f; 二、Vue2中的watch&#xff08;Options API&#xff09; 2.1、函数式写法 2.2、对象式写法 ①对象式基础写法 ②回调函数handler ③deep属性 ④immediate属性 三、Vue3中的watch 3.1、向下兼容&#xff…

部署higress到华为云

higress 部署与上云 k3s环境准备 [root@vm ~]# curl https://releases.rancher.com/install-docker/19.03.sh | sh [root@vm ~]# curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"[root@vm ~]# …

C++面向对象程序设计 - 输入输出流进一步研究

在C中&#xff0c;输入输出流&#xff08;I/O&#xff09;是一个强大的特性&#xff0c;它允许程序与各种输入/输出设备&#xff08;如键盘、显示器、文件等&#xff09;进行交互。C标准库中的<iostream>头文件定义了基本的输入输出流类&#xff0c;如std::cin&#xff0…

搭建RocketMQ主从异步集群

搭建RocketMQ主从异步集群 1、RocketMQ集群模式 为了追求更好的性能&#xff0c;RocketMQ的最佳实践方式都是在集群模式下完成的。RocketMQ官方提供了三种集群搭建方式&#xff1a; 2主2从异步通信方式&#xff1a;使用异步方式进行主从之间的数据复制。吞吐量大&#xff0c;…

665. 非递减数列(中等)

665. 非递减数列 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;665. 非递减数列 2.详细题解 判断在最多改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列&#xff0c;一看到题目&#xff0c;不就是遍历判断有几处不…