Primeton ESB(Enterprise Service Bus)是普元基于多年对大型企业的IT建设及分布式计算和集成能力的认识和技术积累推出的服务整合产品。产品支持微服 务架构下与异构系统的无缝对接,在混合架构中作为新老架构间的通讯桥梁支撑其服务整合与业务集成;同时,产品支持云环境下的快速伸缩,提供协议转换、 消息转换、消息路由、服务编排、服务注册、服务查找、服务监控、服务告警、热更新、访问控制等系列功能。同时在功能体现和架构设计上融入了普元公司作为本土 中间件厂商多年来对国内产业环境的特点导致企业 IT 建设中对服务整合特殊情况的理解。
# ESB 各个子系统进程间关系
在生产环境下,普元 ESB 主要由 Server、 Governor、ES 三个子系统组成,ESB 各个子系统进程间关系如下图所示:
假设开发人员已经通过 ESB Studio 开发完成一个 ESB 工 程,并将该工程打包成部署包(ecd)备用;生产环境下的 Server、Governor、 ES 均已启动,相关配置均按照现场需求准备就绪。
第一步:部署 ECD。最先使用到的应用为 Governor,实施团队人员将 ECD 包上传后部署到 ESB 服务器集群环境,Governor 会将部署(或卸载)的相关日 志信息记录到数据库,同时 Governor 会通知 ESB Server 重新加载已经部署的 ESB 工程,保证在不用重启的情况下可以正常访问。
第二步:接口注册。登录 Governor,根据事先定义好的接口调用标准规范, 将接口信息注册到系统,系统会将配置信息持久化到数据库,配置好调用关系。
第三步:外围系统调用 ESB 接口。根据接口调用标准规范查询调用系统 ID 及服务提供者接口编码即 ClientId 和 OperationCode,将其加入到请求报文头信息中, 向 ESB 服务器发起服务调用请求,ESB 服务器会在整个请求及响应过程中生成业务日志,保存在网络存储器上。
第四步:日志信息收集和归档。ES 在服务请求相应过程中负责存储Server运行过程中的日志数据,以备数据统计和详细信息查询。
第五步:统计信息查询及检索。通过 Governor 提供的查询统计和接口运行检索功能查看统计信息,方便运维人员实时掌握接口运行状态、频度、调用耗时等信息。
# 管理监控平台部署架构
ESB 管理和监控平台主要包括 Governor、ES,这两个应用的主要功能说明 如下所示:
Governor:提供了独立和集群环境中的 ESB Server 进行管理、服务注册、服 务查找、服务部署、调用关系管理、服务统计查询、报表展示等功能,同时对于 服务全生命周期进行管理;
ES:提供了日志存储能力,对事前预警、事中 告警、事后统计分析等功能提供后台支撑;
管理监控平台的物理部署架构图中 P3 是一台物理服务器,该服务器上的虚 拟机安装有 Centos 7.5 操作系统。虚拟服务器中安装有:
一个 Governor 用于管理 ESB 服务器及服务器集群、接口注册、调用关系管 理、服务查询、报表展示等,同时检索ES存储的日志,显示详细的接口调 用信息、报文等, ESB 工程的部署与卸载,ESB 运行期全局变量管理等;
ES集群 用于存储、统计分析接口调用过程中 ESB server 拦截器生成的日志,以备检索。
# 物理部署架构
根据普元实施团队长期在 ESB 实施领域的经验,指定了一套通用的 ESB 产 品物理部署架构方案,以供服务人员和现场实施人员参考。
物理部署方案中,4 台 ESB 服务器通过 F5 做硬件负载均衡,除了 F5 硬件负载外,可以使用 Apache 和 Nginx 实现软负载,相关配置方法均可在搜索引擎中 查询到详细配置过程,这里不做详细说明。
# 以 Nginx 为例介绍软负载配置过程
【测试环境】
由于没有服务器,所以本次测试直接 host 指定域名,以 windows 系统为示例
操作系统,测试域名:a.com。
A 服务器 IP:192.5.149 (主)
B 服务器 IP:192.16.5.127
C 服务器 IP:192.5.126
【部署思路】
A 服务器作为主服务器,域名直接解析到 A 服务器(192.168.5.149)上,A 服务器负载均衡到 B 服务器(192.168.5.127)与 C 服务器(192.168.5.126)上。 部署架构如下图所示:
【域名解析】
由于不是真实环境,域名就随便使用一个 a.com 用作测试,所以 a.com 的解 析只能在 hosts 文件设置。打开:C:\Windows\System32\drivers\etc\hosts 文件, 在 末尾添加 192.168.5.149 a.com,保存退出,然后启动命令模式 ping a.com 看看是否已设置成功。
【Nginx 配置】
打开 nginx.conf,文件位置在 nginx 安装目录的 conf 目录下。 在 http 段加入以下代码。
upstream a.com {
server 192.168.5.126:9090;
server 192.168.5.127:9090;
}
server{
listen 80;
server_name a.com;
location / {
proxy_pass http://a.com;
proxy_set_header Host $host:9090; # 注意!此端口为实际nginx代理端口
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header x-remote-host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
上面配置两台 server 负载的任务为 1:1,如果两台 Server 负载不同时,可在端口后增加 weight 参数。保存重启 nginx。
【测试】
当访问 a.com 的时候,为了区分是转向哪台服务器处理我分别在 Server1 和 Server2 服务器下不同的业务服务。
如果 Server2 服务器(192.168.5.126)宕机了,Nginx 会将所有针对 a.com 服 务的请求负载到 Server1 上,从而保证服务的正常访问。
【新增 b.com 访问域名】
假设 b.com 的主服务器 IP 是 192.168.5.149,负载均衡到 192.168.5.150 和 192.168。5151 机器上,现将域名 b.com 解析到 192.168.5.149IP 上。
在主服务器(192.168.5.149)的 nginx.conf 加入以下代码,保存重启 nginx,完成配置。
upstream b.com {
server 192.168.5.150:80;
server 192.168.5.151:80;
}
server{
listen 80;
server_name b.com;
location / {
proxy_pass http://b.com;
proxy_set_header Host $host:80; # 注意!此端口为实际nginx代理端口
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header x-remote-host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 产品部署拓扑图(实例)
整个 ESB 应用之间、外部系统以及参与者之间的拓扑关系图如下所示:
服务开发人员根据业务需求开发业务接口模型,通过ESB studio导出部署包,系统管理员通过浏览器访问 ESB Governor 将部署包部署到 ESB server 的集群, 即图中的 ESB Server1 和 ESB Server2 上。 服务消费者如银保通、网销、电销等外围系统访问 ESB server 对外暴露的服务,外围消费者不用关心服务提供者 的真实服务,从而屏蔽系统间差异;请求从 消费者经 ESB 到达服务提供者系统,真实业务接口处理完业务后再将处理结果 经 ESB 返回给消费者系统,整个过程 ESB 都会产生拦截日志,保存在ES中。
系统用户登录 Governor,可检索查询接口调用信息,进行报表统计分析,信 息预警,同时可更改相应配置信息,使其热更新到 ESB server,完成在不需要重 启服务器的情况下完成配置信息热加载。
# 系统环境及硬件信息
根据综合分析的结果,针对 ESB 的集群环境整个项目需求,共计需要8 台虚 拟机,V1 中安装管理平台,V2 中安装数据库应用,V3 和 V4 中安装 ESB 服务器集群, V5 和 V6 中安装 ESB 服务器集群,V7和V8中安装ES集群。详细硬件资源信息如图所示: