一个全栈式的应用集成平台,打破“信息孤岛”

源宝导读:随着企业数字化进程的逐渐深入,企业存在大量的异构系统,各个系统之间信息传输、资源利用困难。本文将介绍明源云ERP为了打破这种“信息孤岛”,而进行的思考与实践。


一、前言

    随着企业信息化进程的逐步深入,互联网技术的发展和分布式系统应用的日益广泛,直接导致大量异构系统的存在,这些系统往往各自独立、封闭运行,相互之间不存在或很少存在数据的交互,由于这种应用分割,多个系统之间往往存在数据的冗余以及功能的重叠,各个系统之间信息传输、资源利用困难,形成所谓的“信息孤岛”。


二、企业应用集成挑战

    要打破“信息孤岛”,企业就必须突破企业应用集成几个基本挑战:

  1. 可靠性。集成解决方案必须通过网络把数据从一个终端传送到另一个终端上。与运行在同一个终端上的进程相比,分布式计算必须应对更多可能出现的问题。很多情况下,若需要集成的两个系统位于不同的环境下,它们之间的数据必须通过网线、局域网、路由器、交换机、公共网络进行传输。其中每个环节都会带来延迟或中断。

  2. 高性能。通过网络发送数据要比执行一个本地方法调用慢多个数量级。如果使用设计单一应用的方法设计一个分布式解决方案,可能会对性能造成灾难性的影响

  3. 异构适配能力。集成解决方案需要在使用不同的编程语言、不同平台和不同数据格式、不同通信协议的系统间传递信息。因此,集成方案要能与这些不同的技术打交道。

  4. 低耦合。系统会随着时间改变,一个集成解决方案必须跟上与之相关连接的系统变化的步伐,系统间使用松耦合方式连接,尽可能减少系统之间的依赖关系。


三、行业常用解决方法

     应用系统集成的解决方案有很多,但最常见有API调用、数据库同步、文件传输、消息(事件)传递:

  1. API调用:一个系统开放其部分API,使得其他系统能够远程访问这些API。它们之间的通信是实时、同步的。

  2. 数据库同步:多个系统在数据库层面建立数据同步调度作业,实现数据拷贝与复制。

  3. 文件传输:一个系统写文件,之后另一个系统读这个文件。为此,系统之间需要协商文件名、文件位置、文件格式、文件读写的时间以及谁负责删除这个文件。

  4. 消息(事件)传递:一个系统向公共消息通道中发送一个消息(事件),其他可以在之后某个时间从通道获得这个消息(事件)。系统之间必须协商建立通道以及消息(事件)的格式,这种通信是异步的。

    尽管上述四种方案从本质上解决的是相同的问题,但是每种方案均有其独特的优点和不足(不追述,可参考企业应用集成模式)。实际上,企业应用集成往往需要针对不同的系统、供应商、集成场景选择采用不同的集成方案,使得每个集成点都能充分利用最合适方案。

四、明源云应用集成平台(简称:MIP)

    明源云应用集成平台(简称:MIP)是一个全栈式的应用集成平台,提供轻量化的API、事件、消息、数据集成能力,帮助您快速、简单的构建高可靠、高性能、低延迟的应用集成解决方案,实现企业内云上云下,不同厂商、不同架构、不同协议的应用互联互通,打破“信息孤岛”,支撑企业数字化转型。

MIP总体架构示意图

    MIP主要由连接中心、接口中心、事件中心、监控中心、管理控制台五大组件构成,通过五大组件服务组合,可以帮助企业高效构建可知、可控的企业应用集成解决方案。

五、连接中心

    连接中心由服务注册中心和连接器管理两部分组成,其中服务注册中心为您提供服务注册与发现、健康检查等服务治理能力。连接器管理则为您提供服务元数据管理、服务质量管理、服务适配能力,以便满足企业应用集成中不同厂商、不同应用、不同协议的集成适配。

    连接中心提供如下关键特性:

  • 服务注册与发现:服务提供者可以通过手工注册、API注册、客户端注册三种方式将服务信息注册到服务注册中心。同时服务消费者可以通过服务注册中心提供的服务发现API获取可用的服务提供。

  • 健康检查:服务注册中心根据连接器配置中设置的健康检查地址和频率对服务进行定期对健康检查,以便保证及时发现应用层问题,及时摘除异常节点,保证服务正常运行。

  • 服务元数据管理:对服务本身的配置信息和服务的API、事件等信息进行维护管理,最终提供给接口中心、事件中心的应用集成场景中使用。

  • 服务质量管理:连接器在调用后端服务时,根据连接器配置中设置的超时、重试、熔断的服务质量控制规则对后端服务进行安全调用的保护。

  • 服务适配:内置了常见的http、webservice、sql service、my sql、rabitt mq等通用基础连接器,开箱即用,满足80%的应用集成场景适配,同时连接中心还提炼了一套连接器插件框架模型,支持在基础连接器基础上进行插件化扩展,开发面向不同厂商的应用级连接器,例如:泛微、用友、金蝶等。


六、接口中心

    接口中心可以为您提供高性能、高可用、高安全的API托管服务,帮助您轻松构建、管理和部署API。借助接口中心,可以简单、快速、低成本、低风险地实现应用系统集成、业务能力开放。

    如果您作为API提供者(开发者),您可以将成熟的业务能力(如服务、数据等)作为后端服务,在接口中心中开放API,并通过线下方式提供给API调用者使用,实现业务能力开放。

    如果您作为API调用者(消费者),您可以获取并调用API提供者在API网关开放的API,减少开发时间与成本。

    如果您作为API管理运维人员,您可以通过授权、流控、监控告警等策略保障企业的API。

接口中心架构示意图

接口中心提供如下关键特性:

  • API生命周期管理:括API的创建、发布、下线和删除的完整生命周期管理功能。通过API生命周期管理功能,您可以快速、高效的开放成熟的业务能力。

  • 版本管理:API可以发布到网关运行环境,如果您需要再次发布此API到之前已发布的环境,那么此次的发布版本将立即覆盖之前的版本。API网关支持查看API发布历史(如版本、发布说明、发布时间和发布环境),并支持回滚到任一API历史版本,以便满足业务版本升级、回滚等需求。

  • 便捷调试工具:提供页面调试工具,您可以使用该工具添加HTTP头部参数与body体参数,对API进行调试,简化API开发,降低API的开发维护成本。

  • 流量控:可实施API的请求频率、应用的请求频率的管控,用于保障后端服务的稳定运行,流量控制的时间单位可以是秒、分钟、小时或天。

  • 请求校验:支持参数类型、参数值(范围、枚举、正则、Json Schema)校验,无效校验会被 API 网关直接拒绝,以减少无效请求对后端造成的资源浪费,大幅降低后端服务的处理成本。

  • 数据转换:通过配置映射规则,实现前、后端数据翻译。支持前端请求的数据转换。支持返回结果的数据转换。

  • 访问控制:访问控制策略是API网关提供的API安全防护组件之一,主要用来控制访问API的IP地址,您可以通过设置IP地址的黑名单来拒绝某个IP地址访问API。

  • API鉴权:统一发放签名密钥(由一对Key和Secret组成),签名密钥需要绑定到API才能生效。签名密钥用于后端服务验证API网关的身份,在API网关请求后端服务时,保障后端服务的安全。


七、事件中心

    事件中心为您提供低耦合、准实时、高可靠的数据或消息传输服务。

  • 低耦合:架构采用事件订阅与分发模式,解耦开生产者和消费,订阅过程无需代码侵入,通过统一配置方式实现,实现数据采集与分发。

  • 准实时:通过应用领域事件监听、数据库CDC机制、队列监听,做到准实时的数据同步,数据从源端产生后,以极低的延迟被采集、加工,并写入目的地,整个过程没有明显的处理批次边界。

  • 高可靠:平台底层采用Rabitt MQ作为数据传递通道,保障数据传递的可靠性;三级重试,临时性重试、定时重试、手工重试,提升数据传递的可靠性。

事件中心架构示意图

    事件中心提供如下关键特性:

  • 事件管理:可以通过创建事件源和事件订阅者,来实现事件的订阅与发布,最终实现数据或消息在应用之间进行传递。同时也可以在事件创建后进行管理维护操作,例如:删除事件、修改事件、发布事件、取消发布事件、增加订阅者、删除订阅者、修改订阅者等。

  • 调度管理:可以查询到各个事件对应的任务调度的运行状态,为排查生产问题提供有效数据支持.

  • 异常管理:事件消费时产生业务异常,事件中心会将对应的异常事件发送到异常管理模块,异常管理模块可以通过自定义的自动重试规则做定期重试,当自动重试仍然无效的情况下,也可以人工重试对异常数据做干预,提高异常数据的修复效率。

  • 轨迹管理:支持追踪事件生产与消费的完整链路信息,获取任一事件的当前状态,为排查生产问题提供有效数据支持。

八、监控中心

    监控中心通过客户端帮助您跟踪采集连接中心、接口中心、事件中心、MIP客户端各个组件的运行状态、日志、异常、性能等信息(遵循OpenTracing标准),客户端采集到运行信息后发送到监控中心服务端,由服务端对信息做加工与分析,加工后的信息能为您提供集成调用链查询和诊断、性能分析、服务依赖分析、异常告警等服务,这些服务为您进行生产问题排查提供有效数据支持。

监控中心架构示意图

  • 调用链查询和诊断:追踪分布式架构中的所有服务应用的用户请求,并将它们汇总成分布式调用链。

  • 性能分析:通过追踪整个应用程序的用户请求,来实时汇总组成应用程序的单个服务和资源性能指标,帮助您诊断性能瓶颈。

  • 服务依赖分析:形成所有分布式服务应用的调用依赖关系。

  • 告警管理:支持自定义告警规则,并且在告警达到条件后通过邮件、移动端等设备发送告警内容给运维人员。

总结

    本次主要分享的是明源集成平台(MIP)的定位、核心架构、功能特征以及实现效果,后续还会总结分享平台里面落地实现的关键技术点。

------ END ------

作者简介

王同学: 产品经理,目前负责ERP集成平台相关规划与设计工作。

也许您还想看

MIP服务发现的高可用架构实践

基于消息的高稳定集成架构方案

研发协同平台持续集成2.0架构演进

【2019总结篇】谈谈数字化时代,ERP如何坐稳数字化底座

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

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

相关文章

XGBoost-工程实现与优缺点(中)

工程实现 块结构设计 我们知道,决策树的学习最耗时的一个步骤就是在每次寻找最佳分裂点是都需要对特征的值进行排序。而 XGBoost 在训练之前对根据特征对数据进行了排序,然后保存到块结构中,并在每个块结构中都采用了稀疏矩阵存储格式&…

gson生成jsonobject_使用GSON将字符串解析为JsonObject会产生IllegalStateException:这不是JSON对象...

我有以下代码:JsonParser parser new JsonParser();System.out.println("gson.toJson: " gson.toJson(roomList));JsonObject json2 parser.parse("{\"b\":\"c\"}").getAsJsonObject();System.out.println("json2:…

根据二叉树的先序和中序求后序遍历

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int pre[N], in[N], post[N];struct node {int w;node *l, *r;node (int w 0, node *l NULL, node *r NULL): w(w), l(l), r(r) {} };void build(int l, int r, int &t, node…

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

欢迎大家阅读《朝夕Net社区技术专刊》第5期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为忠实读者&#xff0c;文末福利不要错过哦&#xff01;01PARTCoreFilter多种注册方式在上一…

SQL(一)- 数据库介绍与基础操作

数据库介绍 一、常用的数据库分为两大类&#xff1a; 关系型数据库非关系型数据库&#xff08;NoSql&#xff09; 关系型数据库 概念&#xff1a;是建立在关系模型基础上的数据库&#xff0c;借助于集合代数等数学概念和方法来处理数据库中的数据。 关系型数据库的优势&am…

最少硬币问题-dp

题目&#xff1a; 有5种硬币&#xff0c;面值分别为&#xff1a;1,5,10,25,50。数量无限&#xff0c;输入非负整数s&#xff0c;选用硬币&#xff0c;使其和为s。要求输出最少的硬币组合要多少个硬币&#xff1f; 数据范围&#xff1a; s最大为250. 解题思路&#xff1a; 有时…

python加密与解密_Python加密与解密,pythonCrypt,和

from Crypto.Cipher import AESclass DeAesCrypt:"""AES-128-CBC 加/解密, Padding ZERO模式"""def __init__(self, data, key, pad):""":param data: 加密后的字符串,或者需要加密的字符串:param key: 随机的16位字符:param pad…

opencv +数字识别

现在很多场景需要使用的数字识别&#xff0c;比如银行卡识别&#xff0c;以及车牌识别等&#xff0c;在AI领域有很多图像识别算法&#xff0c;大多是居于opencv 或者谷歌开源的tesseract 识别.由于公司业务需要&#xff0c;需要开发一个客户端程序&#xff0c;同时需要在xp这种…

SQL(二)- 基础查询语句

简单的查询语句&#xff08;DQL&#xff09; 下面我们正式来学习查询语句&#xff0c;下面所有查询用到的表均为前面提到的三张表&#xff1a; 员工表中的数据&#xff1a; 部门表中的数据&#xff1a; 薪资表中的数据&#xff1a; 基本查询语句的语法&#xff1a; sele…

image 微信小程序flex_【微信小程序】flex布局一旦遇上for循环就失效

代码如下&#xff1a;wxml部分&#xff1a;{{item.name}}wxss部分&#xff1a;.skill .box {width: 100%;display: flex;flex-flow: row wrap;align-content: space-around;}.skill .skill-item {box-sizing: border-box;flex: 0 0 33.3333333333333%;font-size: 24rpx;color: …

SQL(三)- 连接查询

连接查询概念 一、什么是连接查询&#xff1f; 在实际开发中&#xff0c;大部分的情况下都不是从单张表中查询数据&#xff0c;一般都是多张表联合查询最终取出最终结果。在实际再发中&#xff0c;一般一个业务都会对应多张表&#xff0c;比如学生和班级&#xff0c;最起码两…

远程办公也可以很高效

题图&#xff1a;我的站立办公环境因为疫情&#xff0c;全中国人民都过了一个难忘的春节&#xff0c;而身在武汉的我&#xff0c;更是没有出家门半步&#xff0c;坚决做到不过国家添乱。从开始的2月14到后来的2月20日&#xff0c;再到现在的3月10日&#xff0c;官方发布的复工日…

github 检查代码质量_Android(8): 代码质量检查

代码质量检查是持续性的工作&#xff0c;检查的两个基本工具是FindBugs和CheckStyle。在实际项目中&#xff0c;检查的工作由测试人员实施&#xff0c;开发人员进行配合&#xff0c;形成日常性的工作。每天会对最新的代码进行检查&#xff0c;使用脚本(一般是测试用python写的)…

打印最少硬币的组合-dp+记录路径

题目&#xff1a; 有5种硬币&#xff0c;面值分别为&#xff1a;1,5,10,25,50。数量无限&#xff0c;输入非负整数s&#xff0c;选用硬币&#xff0c;使其和为s。要求输出最少的硬币组合的方案&#xff1f; 数据范围&#xff1a; s最大为250. 解题思路&#xff1a; 有时间再写…

SQL(四) - 子查询和union以及limit分页

子查询概念 什么是子查询&#xff1f;子查询都可以出现在哪里&#xff1f; select语句当中嵌套select语句&#xff0c;被嵌套的select语句是子查询。 子查询可以出现在哪里&#xff1f; select..(select). from..(select). where..(select).1.where子句中使用子查询 案例&a…

ASP.NET Core中的Http缓存

ASP.NET Core中的Http缓存Http响应缓存可减少客户端或代理对 web服务器发出的请求数。响应缓存还减少了 web服务器生成响应所需的工作量。响应缓存由 Http请求中的 header控制。而 ASP.NETCore对其都有相应的实现&#xff0c;并不需要了解里面的工作细节&#xff0c;即可对其进…

maven 排除配置文件打包_Maven打包pom里面配置exclude 排除掉环境相关的配置文件...

Maven打包pom里面配置exclude 排除掉环境相关的配置文件有几种方式&#xff1a;1. 打包时&#xff0c;指定环境参数把环境的配置文件复制过去2. 不打包所有的环境相关的配置文件&#xff0c;直接由运维的人维护可以在上传war包前把配置给改了&#xff0c;用rar工具改里面的配置…

快速幂(取模)模板

快速幂 代码如下&#xff1a; int fastpow(int x,int n) {if (n1) return x;int tmp fastpow(x,n/2);if (n%2){return tmp*tmp*x;}else return tmp*tmp; }位运算优化快速幂 代码如下&#xff1a; int fastpow(int x, int n) {int res 1;while (n) {if (n & 1)res * x;x…

SQL(五) - 表的创建以及操作

创建表 建表语句的语法格式&#xff1a; create table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型,....);MySql常用数据类型 BLOB 二进制大对象&#xff08;存储图片、视频等流媒体信息&#xff09; Binary Large OBject &#xff08;对应java中的Object&…

Istio 2020 年 Roadmap——一切为了商用

原文地址&#xff1a;https://preliminary.istio.io/zh/blog/2020/tradewinds-2020/&#xff0c;由 ServiceMesher 社区翻译。Istio 解决了人们在运行微服务时遇到的实际问题。甚至早期的预发行版本就已经可以帮助用户诊断其体系架构中的延迟&#xff0c;提高服务的可靠性以及透…