应用系统集成-概述

news2025/1/12 6:51:56

应用系统集成-概述

随着网络技术的发展和日益增长的软件复杂度,几乎已经不存在一个完全孤立的应用系统了,万物互联在应用层面就是系统互联,应用系统集成成为软件系统架构是需要考虑的核心问题之一。

基本介绍

应用系统集成面临的挑战

       所有的应用系统集成都将面对以下挑战。

  1. 网络可靠性:应用数据共享或功能调用从进程内通讯转变为网络通讯,网络信息交换的每一个环节都可能带来延迟或中断。
  2. 网络速度慢:网络交互速度的数量级远比本地的高。
  3. 应用系统的实现不同:不同应用系统的实现语言、操作平台和数据模型都不一样。
  4. 集成点(接口)需要持续改变。在进行系统集成时,需要考虑集成关系的变化多系统造成的影响。

应用系统集成考虑的问题

应用集成需要考虑的问题:

  1. 系统功能:系统集成点是系统的不稳定点,尽量减少不必要的系统集成。
  2. 系统耦合:系统集成方案应减少系统间耦合,比如引入组件作为中介减少系统之间的两两直接依赖。
  3. 集成技术:不同的集成技术意味着不同的成本,包括硬件或软件以及人员的能力成本,应尽量使用简单的技术,减少系统集成对应用系统带来的代码修改。
  4. 数据格式:系统集成的应用程序必须共享一致的数据格式。
  5. 性能: 需要考虑集成带来的延迟。由此考虑选择的数据协议,如protoBuf或json, 轮询的请求模式或推送通知的模式; 应避免过度设计传递无用冗余数据等。
  6. 数据或功能:应用的集成是共享数据还是发送请求,是否需要响应的。
  7. 同步或是异步:系统集成采用同步模式或异步模式,同步模式编程简单、符合思维模式、保证实时,可能带来性能瓶颈和强依赖。异步则避免的堵塞等待,但又引入了编程复杂度。 建议先考虑同步,无法满足需求再采用异步模式。

应用系统集成的通用需求

       应用系统集成除了实现所需的业务逻辑之外,还需要额外的工作来保障集成的稳定可靠。至少包括以下内容:

  1. 请求调用日志记录和监控:所有系统集成请求和响应必须得到记录,并提供后续查询的方法。集成的异常应及反馈给运营人员。
  2. 请求重试。提供可配置性的自动重试,是否重试由调用测决定,如某些弱消息通知可以接受失败,最终一致性的设计失败允许本地事务成功,远程方法失败。
  3. 接口服务高可用性。如:服务的扩容、负载均衡、降级。
  4. 集成请求或交互数据的安全性。如:接口鉴权, SSL协议等。

这些通用需求通常由专门的平台(消息中间件、ESB)来提供,但总会涉及到比如不同组织的系统集成这种没有统一的集成中间件的情况,此时业务系统在实现集成功能的时候需要同时实现以上的通用需求。

注:系统集成应从业务模型中抽离出来以独立的层次构建,对业务系统提供统一的使用模式,以屏蔽复杂多样的集成方式。

        

图1: 应用系统中的系统集成层

主要的系统集成方式

目前主要有以下四种集成方式:

  1. 文件传输:应用系统之间通过文件来共享信息。

优点:应用之间完全解耦; 技术实现简单。

缺点:实时性不足(缺乏通知),数据的一致性弱;需要考虑额外的问题:文件的并发操作、文件内容的过期、文件的清理等问题需要额外处理;文件传输缺乏结构化和校验,需要考虑内容异常的问题。

  1. 共享数据库: 应用系统之间通过公共数据库来共享。

优点:数据的一致性,数据库的事务性,结构化数据校验。

缺点:难以设计共享的数据库schema;数据库可能成为性能瓶颈;并发操作可能带来死锁等问题。

注:在一些复杂度不是太高应用系统内服务之间的集成选择上,共享数据库带来的事务特性比起分布式事务更为简单和可靠。

  1. 远程方法调用:服务提供者对外开发接口, 调用者执行远程调用,将对远程方法的调用和本地调用一样看待。比如CORBA, COM, Java RMI, Web Service等。

优点:远程方法调用避免了数据库模型的耦合,更加灵活;调用能得到实时响应。

缺点:系统之间需要共享接口数据类型;同步远程调用性能慢,可能造成阻塞。

  1. 消息模式:应用系统通过消息中间件进行消息的发送和接收。

优点:异步解耦、实时通知、消息中间件提供的保证送达、持久化、单播广播的灵活模式等特性,业务系统无需关注集成的非功能性需求。

缺点:代码需要以异步模式去设计和实现。

消息模式

       消息模式在架构上引入了消息代理的中间件,将集成的非业务功能需求从业务系统中剥离出来,消息的异步特性实现了集成系统之间的解耦。消息中间件提供了完善的功能特性保障系统集成的稳定性和消息传递模式的灵活性,如持久化、消息保证送达、发布/订阅模式等;市场上有着成熟可靠、免费的开源中间件产品如RocketMq,Kafka等。消息模式是系统集成的推荐使用方式。

https://www.enterpriseintegrationpatterns.com/img/MessageChannelSolution.gif

图2: 应用通过消息系统中的消息通道进行消息传递。

远程方法调用

模式一:是集成应用之间直接进行方法调用。

图3:系统间直接依赖的远程调用

模式二:存在总线或网关之类的中介负责集成协调。这种模式就类似于一个同步的消息模式了。

图4: 存在调用总线或网关作为中介的远程调用模式

同步模式在编程实现上比异步模式显得直观和简单,比如在一个业务操作需要进行远程服务请求时,同步远程调用只需要进行一次方法调用并等待结果,而异步模式需要在发送完异步请求后,进行额外的等待响应工作,如轮询回复消息或等待回复消息的通知。

模式二的远程方法调用下有商业ESB产品可以提供集成中间件。而大型企业在系统规划时可能有专门的接口网关产品来提供对远程调用模式的支持。

微服务框架下的服务调用框架网关组件提供的集成功能, 如服务注册、发现、负载均衡、重试和超时配置等功能,在网关层补充所需的日记,鉴权等功能则完成了微服务架构下的服务集成。

应用系统还需要考虑的问题

幂等性

无论是服务的提供方还是调用方在进行系统集成时都应意识网络的不稳定和延迟,请求/响应超时、回复丢失等异常场景是客观存在的,因此在服务的设计上需要应对请求的重复发送问题。

幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

所有操作型集成接口都应该考虑幂等性:

  1. 请求的唯一性判定

如何判断多个请求实际是同一请求的, 推荐使用通用的请求ID、也可以指定有业务含义的唯一编号作为请求ID,另外在不具备唯一标识的情况下, 可以通过请求的hash来判断请求是否在一个时间窗口内完全相同的重复请求。

  1. 重复请求的处理

当认定是重复请求,需要考虑是给调用方直接返回成功或异常,如果存在请求唯一性ID, 因双方都可以识别唯一性,可以返回成功。而当使用业务或其他方式时,需要在接口协议中明确自己的决策规则,避免造成系统的不一致性,比如调用方两次调用产生了多次执行的相关单据,而服务提供方产生了一次相同的结果。

  1. 如果旧有的服务提供方没有保障幂等性,则需要在调用方(通常是新的集成需求)侧保证请求的幂等性。

分布式事务

       系统集成带来的最大挑战是分布式事务。在微服务并且使用统一技术框架的情况下,可以使用分布式事务的框架来实现,如Seata, Saga等。但在系统集成场景下, 由于不同的产品设计、不同的技术架构, 不同的网络环境, 不同的组织, 使用统一的事务框架几乎不可能,当然也有阿里的GTS 全局事务服务这样的第三方服务。

那在没有事务框架的的场景下, 需要在业务架构和编码上进行调整,业务上尽量将长事务拆分成小事务,保证一个事务只牵扯本地事务和一个远程调用,再在编码上将远程调用的异常作为本地事务的异常,保证本地事务的回滚。而本地事务只有在远程调用成功的情况下才完成提交。

       即使是做到了上面描述的效果,依然会出现将远程执行的响应因网络造成的丢失或超时错误判断为远程调用失败的情况。依然要结合具体业务场景,重试+幂等性或远程事务的确认等方法来对本地事务进行正确的提交或回滚。

系统可用性

在一个业务中对多个系统的依赖会带来系统可用性指数级的下降,如本系统保证99.99%的可用性,如一个业务依赖了n个接口,如果都是同步性的依赖,则可用性会下降为99.99%的n次方。

       因此在对可用性有极高要求的系统中, 系统集成要尽量使用消息集成方式来进行系统解耦提高可用性,对集成接口的调用需要考虑集成接口的性能、稳定性等需求,采取必要的措施:

  1. 服务限流:对依赖接口调用应考虑限流,如Guava RateLimiter限流器, Feign+Sentinal。
  2. 服务降级:当集成调用出现大量异常时,应进行降级。如Feign的Fallback,同时也可以考虑对依赖异常集成的自身业务进行降级。
  3. 缓存:对于信息查询集成,可以考虑将集成响应缓存在本系统来在作为集成异常的替代方案或提升性能。缓存具体的使用依赖于业务对数据实时性的要求。

服务提供方同样因为对外暴露了服务面临未知的挑战,如恶意攻击或业务爆发是增长带来的请求风暴,应采取以下必要措施进行应对:

  1. 服务限流:自身对外服务需要根据系统性能压测和性能指标进行限流配置,防御DDOS攻击或应对业务带来的请求意外增长。
  2. 服务扩容:应考虑扩容方案来应对业务猛增所带来请求压力。如服务的横向扩容方案或纵向扩容方案。
  3. 服务降级:对外提供服务异常时,应进行服务降级,避免造成请求的大量积压。
  4. 服务隔离:可以考虑将系统集成的相关服务或模块和系统其他模块进行拆分隔离,避免因集成异常对其他业务造成影响。

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

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

相关文章

【网络编程】一文带你搞懂HTTPS协议

文章目录 一、什么是HTTPS协议二、关于加密三、数据摘要 | 数据指纹 | 数字签名四、HTTPS的工作过程探究方案1:只使用对称加密方案2:只使用非对称加密方案3:双方都使用非对称加密方案4:非对称加密 对称加密中间人攻击 五、引入证…

重要功能更新:妙手正式接入SHEIN供货模式(OBM)店铺,赋能卖家把握出海新机遇!

继接入SHEIN平台模式店铺之后,妙手ERP积极响应卖家需求,正式接入SHEIN供货模式(OBM)店铺,并支持产品采集、批量刊登、产品管理等功能,帮助跨境卖家快速上品、高效运营,把握出海新机遇。 SHEIN供…

天软特色因子看板(2023.10 第11期)

该因子看板跟踪天软特色因子A05005(近一日单笔流通金额占比(%),该因子为近一个日单笔流通金额占比因子,用以刻/画股票在收盘时,力资金在总交易金额中所占的比重。 今日为该因子跟踪第11期,跟踪其在SW801130 (申万纺织服装) 中的表…

TwinCAT3 从入门到放弃系列第一篇

TwinCAT3介绍 TwinCAT3是倍福公司基于PC平台和Window操作系统的控制软件。TwinCAT全称是The Windows Control and Automation Technology,基于window的自动化控制技术。 TwinCAT是1995年首次推出市场,现存有TwinCAT2和TwinCAT3两种版本,TC2是…

软件兼容性测试的测试内容有哪些?

软件兼容性测试是软件开发过程中至关重要的一项测试环节。它是指验证软件在不同平台、操作系统、硬件设备或网络环境下的运行情况,以确保软件在各种环境下都能正常工作并与其他软件或系统相互配合。兼容性测试能够帮助开发者发现和修复可能存在的兼容性问题&#xf…

PMP备考|通关宝典

1建立知识全景图 PMBOK 知识框架:五大过程组、十大知识领域、49个过程、132个工具和技术(PMBOK6 P686)。 2项目 项目具有独特性、临时性、渐进明细的特点 组织类型: ▶ 职能型组织:项目联络员,PM职权小…

SSL证书品牌参差不齐?品牌太多不知道怎么选择?

很多采购人认为SSL证书品牌太多,差异很大,安全性能以保证? 错错误,大错特错,其实整个互联网SSL证书绕来绕去就三家!而且是无法替代的! 举列:360搜索表面上起来用的是沃通证书&…

深入理解Java IO流:概念、类型、缓冲与性能

文章目录 什么是I/O流?I/O流的类型字节流(Byte Streams)字符流(Character Streams) 节点流与处理流节点流(Node Streams)处理流(Processing Streams) 带缓冲的I/O流I/O性…

CSS笔记-狂神

1、什么是CSS 如何学习 CSS是什么CSS怎么用(快速入门)CSS选择器(重点难点)美化网页(文字,阴影,超链接,列表,渐变…)盒子模型浮动定位网页动画(特…

PAM从入门到精通(二十二)

接前一篇文章:PAM从入门到精通(二十一) 本文参考: 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构: 更加形象的形式: 七、PAM-API各函数源码详解 前边的文章讲解了各PAM-API…

如何复制禁止复制的内容

今天找到一段代码,但是复制时页面提示“这个是VIP会员才有的权限”。我该怎么复制呢。 现在的平台大都是用钱说话,以便响应知识付费的主张。对错我就不说了,我认为既然我有权利看到代码,当然也有权把他复制下来。这并不涉及侵权。…

DNS、ICMP和NAT

DNS、ICMP和NAT 文章目录 DNS、ICMP和NATDNS是什么域名系统的名字空间域名空间的层次结构域名的分配和管理顶级类别域名 DNS域名解析过程递归查询迭代查询 高速缓存 ICMPICMP的定位ICMP协议的功能 ICMP的报文格式ping命令traceroute命令 NATNAT技术背景NAT IP转换过程NAPTNAT的…

autohotkey v1

autohotkey v1 文档 https://www.autohotkey.com/docs/v1/ 编辑器 https://www.autohotkey.com/scite4ahk/ https://www.autohotkey.com/

基于Python实现手写文字识别

基于Python实现手写文字识别,对学生日常作业及考试试卷中的手写内容进行自动识别,实现学生作业、考卷的线上批阅及教学数据的自动分析,提升教职人员工作效率,促进教学管理的数字化和智能化。 目录 引言背景介绍目标和意义 手写文字…

解决chrome浏览器netWork响应数据中文乱码的问题

项目中遇到返回值出现如下图所示情况: 开发起来很麻烦,可以通过添加Source code扩展程序解决。 具体操作: 1、下载 地址: https://github.com/jinliming2/Chrome-Charset/releases 或者:https://download.csdn.net/do…

循环队列c语言版

一、循环队列结构体 typedef int QueueDataType; #define CQ_MAX_SIZE 10typedef struct CircularQueue {QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue; 二、循环队列操作函数声明 /**创建队…

项目部署Linux一般步骤

1、最小化安装centos7-环境准备 安装epel-release 安装epel-release,因为有些rpm包在官方库中找不到。前提是保证可以联网 yum install -y epel-release 修改IP net-tools net-tool:工具包集合,包含ifconfig等命令 yum install -y net-…

【技能树笔记】网络篇——练习题解析(九)

目录 前言 一、OSPF双栈 1.1 OSPFv3 LSA 1.2 OSPFv3 二、ISIS双栈 2.1 ISISv6 2.2 ISIS高级特性 三、BGP双栈 四、PIM双栈 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filot…

SpringDoc API文档工具集成SpringBoot - Swagger3

1、引言 之前在Spring Boot项目中一直使用的是SpringFox提供的Swagger库,发现已经超过3年没出新版本了!SpringDoc是一款可以结合Spring Boot使用的API文档生成工具,基于OpenAPI 3,是一款更好用的Swagger库!值得一提的是…

Playwright 配置文件/运行命令/测试标记

Playwright 配置文件/运行命令/测试标记 一、运行说明 1. 运行命令 // 运行测试集,无界面模式 npx playwright test// 运行测试集,界面模式 npx playwright test --ui// 运行单个测试文件 npx playwright test test_file.spec.ts// 以调试模式运行测试…