企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?
企业服务总线ESB是什么
下面这张图,稍微了解些IT集成的朋友应该不陌生。

随着信息化发展不断深入,企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不连通,如同一根根独立的烟囱。
但是企业业务是流程化的,这就需要业务数据如流水般在不同系统间流转。在企业信息化早期,为了实现业务数据流转,一般采用点对点的开发方式,就好比在两根烟囱间架起了一根管道。随着业务数据流转越来越频繁,越来越广泛,“烟囱”上的孔眼越来越密集,有进气管、有出气管,错综复杂,难以梳理,也就难免会有“乌烟瘴气”,维护人员“灰头土脸”的时刻。

传统ESB的核心功能在于,通过各种不同的协议适配,将不同平台的异构服务接入到ESB,转换成消息流,再通过各种处理发送到指定的目的地,就好比是一条横亘于所有烟囱的管道。因而其全称为企业服务总线(ESB,Enterprise Service Bus),也就不难理解了。
ESB的优势如下:
-
可靠性:由于调试小型服务要比调试大量代码更加容易,因此ESB生成的应用更加可靠。
-
效率:ESB采用了可配置的方式,用户不需要写大量的代码,通过ESB即可完成数据流的整合。
-
准确性:写代码维护涉及的操作较多,一旦其中某个点出错就会造成错误,ESB通过可配置的方式,所有的操作都与ESB的产品相关,用户只需要选择配置即可,避免了很多不必要的错误。
-
可扩展性:由于SOA允许服务跨多种服务、平台和编程语言运行,因此极大地提高了可扩展性。
-
节约成本:通过更高的敏捷性和更有效的开发来降低成本。
ESB的作用
企业服务总线是一种实现系统间集成和互联互通的重要技术架构,可以理解为是一种消息和服务集成的中间件平台。ESB是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业数据系统的必要元素。
面向服务的体系结构已经逐渐成为IT集成的主流技术。面向服务的体系结构(service-oriented architecture,SOA)是一种软件系统设计方法,通过已经发布的和可发现的接口为终端用户应用程序或其它服务提供服务。
企业服务总线(EnterpriseServiceBus,ESB)是构建基于面向服务体系结构(SOA)解决方案时所使用基础架构的关键部分,是由中间件技术实现并支持SOA的一组基础架构功能。

作为SOA基础架构的关键部分,ESB的功能主要体现在通信、服务交互、应用集成、服务质量、安全性以及管理和监控等方面。
具体来说,ESB的作用以下方面:
-
提供连接企业内部及跨企业间新的和现有软件应用程序,以丰富的功能启用管理和监控应用程序之间的交互。
-
在SOA分层模型中,ESB用于组件层以及服务层之间,它能够通过多种通信协议连接并集成不同平台上的组件将其映射成服务层的服务。
-
在通信方面,ESB能够支持消息路由/寻址,支持多种通信技术、通信协议(如JMS、HTTP),支持发布/订阅的通信模式,能够处理请求/响应、同步以及异步的消息传递方式,并且要求以可靠的方式传递消息。
-
ESB的重要功能就是集成不同的系统,必须能够支持多种接入ESB的方式(例如将ESB、WebService、CORBA以及使用Socket等方式访问的遗留系统接入到ESB系统),将接入的系统映射成Web服务。
ESB和微服务有什么区别
微服务是一种软件架构模式,将一个单一的应用拆分为多个小型的服务,每个服务运行在自己的进程中,服务间采用轻量级的通信机制(HTTP/webservice等)相互通信。
微服务中,每个服务都具有独立的功能和责任。每个服务都可以独立开发、测试、部署和扩展,从而提高应用程序的可维护性、可扩展性和灵活性。此外,微服务还使得不同的服务可以使用不同的技术栈和开发语言,从而使得团队可以选择最适合其需求的技术栈.
微服务的核心特征如下:
-
轻量化:将复杂的应用解耦成“小而自治”的服务。
-
松耦合:微服务之间的关系是松散的,业务上下文独立,运行环境与代码也相互隔离,互不干扰。
-
跨平台:服务之间通过HTTP或REST API进行通信,可以采用异构的编程语言、框架或工具。
-
云原生:微服务本身云原生技术,同时也借助其他云原生技术得到更好地发展与应用。
-
DevOps与CICD:微服务实现通过采用自动化部署、DevOps,CICD持续集成和交付,不断缩短应用交付周期,提升服务运维效率与运行质量,持续构建演进式架构。
ESB和微服务的主要区别如下:
-
连接方式不同:ESB是通过消息传递机制连接应用程序,微服务是通过HTTP或RESTful API进行连接。
-
功能不同:ESB主要负责消息的转化、解释以及路由的工作,微服务主要是以业务功能为单位进行拆分,每个服务功能独立且可以独立开发、设计、部署运行。
-
适用范围不同:ESB适用于跨企业间的集成,微服务适用于企业内部的业务模块间集成。
-
复杂度不同:ESB架构复杂,需要更多的维护,微服务架构简单,易于扩展和维护。
-
可靠性不同:ESB的可靠性较低,微服务的可靠性较高。
ESB终将被iPaaS替代
企业的云服务越来越多,ESB内部调用关系如果不梳理,就像是埋在地下管道中的各种线路,看似好像只有一根管道,但内部电线、水管、燃气管道根本无法分清楚,更不用说如何去治理、去优化。
随着IT技术的发展,ESB存在以下问题难以解决:
-
架构扩容困难:传统 ESB 采用集中式架构,可扩展性、可观测性低、且不支持微服务框架。
-
缺少服务安全防控:传统ESB能力聚焦在内部应用的集成与连接,缺少有效的安全手段,同时采用集中的服务注册管理手段,一旦受到攻击,将影响整个企业总线上的服务运行,因此企业一般不会将ESB的能力直接开放之外部网络环境,但随着工业互联的发展,企业与上下游企业、合作伙伴的数据急需打通,对外的集成开放能力也是企业需要解决的问题。
-
云端应用集成困难:ESB通常无法直连公有云SaaS应用以及一些平台服务。在面对SaaS华应用和平台服务的普及越来越显得力不从心。企业为了实现相关需求,就需要花费更高的成本。
-
配置复杂,集成效率低:ESB技术门槛高,通常需要配置专业的集成团队专人维护,导致其产品使用的灵活性大大降低,而无法支持企业日益增长的个性化业务需求与快速变更的响应需求。
综上,随着信息化的进步,老旧ESB就显得越加笨重,ESB系统的弊端也日渐明显。系统改造、架构升级势在必行。
针对ESB的问题和不足,我们当然可以选择升级ESB,实现更多协议适配,实现日志统计与监控,但是以后呢?我们需要的只是一个ESB么?
ESB其实并不是唯一选择,更多企业需要的其实是一个具备应用集成、数据集成、消息集成、API管理能力的一站式应用集成平台——也就是iPaaS平台。

与传统ESB相比,iPaaS具有以下优势:
1、分布式架构,集中式管理
iPaaS采用云原生分布式架构,管理平台与运行服务分离,支持多环境隔离独立部署,支持弹性扩容,具备超高的系统稳定性和可靠性。

2、企业级网关、市场化运营
iPaaS融合企业级网关服务,可以针对集成接口提供认证、流量、频次、加密等限制策略,保护企业数据安全。通过其内置的API门户或市场。实现企业内外部集成资源互联共享,全面盘活企业内数据资产。

API网关

API门户
3、丰富内置应用、自定义应用接入
iPaaS支持应用集成、软件集成、数据集成,更是内置了SAP、金蝶、用友、销售易等200+应用连接器。并且提供自定义应用接入编排功能,用户可根据企业所需,自定义接入云上云下应用。

丰富的内置应用

自定义应用编排接入
4、集成易用性高,业务响应速度快
iPaaS通过简单接口快速开发,复杂接口可视化编排方式,内部丰富的应用连接器与逻辑组件,用户只需要简单拖拉拽便能实现快速集成业务,让人人都能成为集成开发者。


接口可视化编排开发
iPaaS还支持API全生命周期管理,集成业务可以一键发布测试环境,在线调试后,直接上生产,将以天为单位的集成开发周期,缩短至分钟级。

在线调试

一键发布
相关文章:
企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?
企业服务总线ESB是什么 下面这张图,稍微了解些IT集成的朋友应该不陌生。 随着信息化发展不断深入,企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不连通,如同一根根独立的烟囱。 但是企业业务是流程化的,…...
NLP之LSTM原理剖析
文章目录 背景simpleRNN的局限性 LSTM手写一下sigmoid例子支持长记忆的神经网络解读3重门 背景 SimpleRNN有一定局限性, 图片上的文字内容: 图片标题提到“SimpleRNN是一种基础模型。它用于解决序列型问题,其中的每一步的输出会影响到下一步的结果。图…...
ESP32网络开发实例-Web方式配置WiFi连接
Web方式配置WiFi连接 文章目录 Web方式配置WiFi连接1、ESP Wi-Fi 管理器介绍2、软件准备3、硬件准备4、代码实现在本文中,我们将介绍如何实现在Web页面中配置ESP32的WiFi连接。 1、ESP Wi-Fi 管理器介绍 ESP32 将在启动时设置为热点模式 连接到充当 AP 的 ESP32 开发板。 在连…...
ElasticSearch 批量插入漏数据
项目场景: 项目中需要把Mysql数据同步到ElasticSearch中 问题描述 数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据,本地测试也无法复现,后台程序也没有报错,一到正式环境就有问题,很崩溃 这里是批量操…...
C++——类和对象之运算符重载
运算符重载 本章思维导图: 注:本章思维导图对应的xmind文件和.png文件都已同步导入至”资源“ 文章目录 运算符重载[toc] 1. 运算符重载的意义2. 函数的声明2.1 声明运算符重载的注意事项 3. 函数的调用4. const成员函数4.1 const成员函数的声明4.2 注意…...
第二阶段第一章——面向对象
前言 学习了这么久Python(呃其实也没多久差不多两周),可能有小伙伴说我废了,两周才学这么点,咋说呢,我曾经也是急于求成,做任何事情都是急于求成,比如我喜欢一个人我就想马上跟她在…...
Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本节笔记主要内容是学会如何使用Linux自带的按键驱动程序。 一、自带按键驱动程序源码简析 配置选项路径如下: -> Device Drivers ->…...
解决Visual Studio 2010 运行时屏幕一闪而过,无结果显示的问题
安装配置:Visual Studio 2010 软件安装教程(附下载链接)——计算机二级专用编程软件https://blog.csdn.net/W_Fe5/article/details/134218817?spm1001.2014.3001.5502 1、 我们在运行时会出现窗口一闪而过,这时候我们右键Test_1…...
C++(20):为[[nodiscard]]提供提示信息
C17中引入了[[nodiscard]]以对一些被忽略的函数返回值进行警告。 C(17):[[nodiscard]]编译属性_[[nodiscard]] c-CSDN博客 C20可以为[[nodiscard]]提供一个可选的提示信息 [[nodiscard("cant ignore")]] int fi() {return 1; }int main() {fi();return 0…...
hi3518ev200 从sd卡启动rootfs
板卡为 hisi 的 hi3518ev200,16M RAM,64M Flash。板卡不支持从SD卡启动,但是由于Flash空间有限,很多应用都放不下,因此考虑把 rootfs 放到 SD 卡中。先从 Flash 中启动 kernel,然后再加载 SD 卡中的 rootfs…...
[BUUCTF NewStar 2023] week5 Crypto/pwn
最后一周几个有难度的题 Crypto last_signin 也是个板子题,不过有些人存的板子没到,所以感觉有难度,毕竟这板子也不是咱自己能写出来的。 给了部分p, p是1024位给了922-101位差两头。 from Crypto.Util.number import * flag b?e 655…...
使用seldom编写http接口用例
在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。 seldom 中参数化的用法非常灵活,这里仅介绍file_data() 的N种玩法。 二维列表 当参数比较简单时可以试试下面的方式。 参数化数据 {"…...
Redis中Hash类型的命令
目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…...
Java 函数式编程
1.Lambda 1.1 格式 JDK 从 1.8 版本开始支持 Lambda 表达式,通过 Lambda 表达式我们可以将一个函数作为参数传入方法中。在 JDK 1.8 之前,我们只能通过匿名表达式来完成类似的功能,但是匿名表达式比较繁琐,存在大量的模板代码&…...
类的成员函数总结
前言: 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的…...
java高级之单元测试、反射
1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法,执行在所有方法之后 3.被Before标记的方法,执行在每一个Test方法之前 4.被After标记的方法,执行在每一个Test方法之后 public …...
MSQL系列(十三) Mysql实战-left/right/inner join 使用详解及索引优化
Mysql实战-left/right/inner join 使用详解及索引优化 前面我们讲解了BTree的索引结构,也详细讲解下Join的底层驱动表 选择原理,今天我们来了解一下为什么会出现内连接外连接,两种连接方式,另外实战一下内连接和几种最常用的join…...
前端面试题之HTML篇
1、src 和 href 的区别 具有src的标签有:script、img、iframe 具有href的标签有:link、a 区别 src 是source的缩写。表示源的意思,指向资源的地址并下载应用到文档中。会阻塞文档的渲染,也就是为什么js脚本放在底部而不是头部的…...
Django ORM:数据库操作的Python化艺术
Django的对象关系映射器(ORM)是其核心功能之一,允许开发者使用Python代码来定义、操作和查询数据库。这篇文章将带你深入了解Django ORM的强大之处,从基本概念到高级查询技巧,提供丰富的示例帮助你掌握使用Django ORM进…...
react受控组件与非受控组件
React中的组件可以分为受控组件和非受控组件: 受控组件:受控组件是指组件的值受到React组件状态的控制。通常在组件中,我们会通过state来存储组件的值,然后再将state的值传递给组件的props,从而实现组件的双向数据绑定…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
