消息 Mesh(三期)
目前,许多金融机构正在使用 IBM ESB 作为 SOA 化解决方案。该方案将各个专业的应用系统、外联系统以及渠道接入以标准的接口方式进行整合集成,从而围绕 IBM ESB 构建出一个以服务为中心的 IT 架构体系。与常见的微服务架构基于 RPC 通信不同,ESB 架构使用消息驱动,通过成对的 request-response 消息来实现服务调用。
针对这种传统的 IBM ESB 架构,SOFAStack 服务网格提供了消息 Mesh 能力,通过为 MOSN 引入消息队列协议解析和流量代理能力,帮助传统应用平滑迁移到云上。应用可以在无需任何改造的前提下,借助 Mesh 化享受到上云所带来的技术红利,包括可视化的消息服务治理、精细化的消息流量调拨与路由、以及完善的可观测监控与链路分析能力等。
本期消息 Mesh 从数据链路上实现了同时兼容 SOFARPC 和 IBMMQ 协议,提供了以下核心能力:
兼容 Bolt、FAST 服务并存时的服务发现。
支持复用 IBMMQ 配置中的队列管理器名、通道名。
使用流程
您可以按照以下操作步骤实现 IBM ESB 架构的应用 Mesh 化上云,并通过服务网格对消息服务进行管控、治理,通过监控平台对应用和消息进行端到端的监控。
云端部署应用
进入 应用管理 > 应用列表 页面,创建两个消息应用。
应用名称:自定义应用名称,如
ibmmq-provider
、ibmmq-consumer
。技术栈:选择 技术栈 2.0 架构 > SOFA Boot。
登录发布部署服务控制台,在 应用服务 > 服务实例列表 页面,在刚刚创建的应用下分别创建一个服务实例。
应用:选择刚刚创建的应用。
服务实例名称:自定义应用服务实例名称,如
ibmmq-provider1
、ibmmq-consumer1
。技术栈版本:使用 2.5.3 及以上的最新版本。
进入服务实例详情页,创建云服务器 ECS 与负载均衡 SLB 资源,并将该 ECS 挂载到该 SLB。
创建 ECS 时,规格必须是 2C4GB 及以上。
创建 SLB 时,需添加监听器,前后端协议、端口均为 TCP 协议、22 端口。
在服务实例详情页中,切换至 环境参数 标签页,新增并确认以下参数配置:
环境参数说明如下:
名称
默认值
是否必填
是否只读
说明
ac.sidecar-operator.url
${对应的 IP }:8080
说明可通过 云游 local >负载均衡,搜索 operatorvm 获取并替换 IP。
否
否
Sidecar operator URL 地址
ac.oss_url
http://osscloudmesh-osscloudmesh.oss-cn-nanchang-jxnxs-d01-a.ops.cloudtest.jxnxs.com
否
否
Sidecar 的 OSS 下载地址
bp.-Drpc_tr_port
12199
否
否
RPC 端口
bp.com.antcloud.mw.secret
${对应的 SK}
否
否
AccessKey 的 Secret,技术栈填写默认值。
ac.enable_mesh
false
否
否
是否启用 Service Mesh
bp.com.alipay.instanceid
需前往中间件 Portal 页面获取 InstanceId。
否
否
环境 ID,技术栈填写默认值。
bp.com.antcloud.mw.access
${对应的 AK}
否
否
AccessKey 的 ID,技术栈填写默认值。
AUTO_REGISTER_MODE
true
是
否
设置为 true, 代表自动初始化 MOSN 注册中心、动态配置等服务。
bp.ibm.client.port
8989
否
否
MOSN 检查应用端口号。
MOSN 反向检查业务应用进程监听端口,需根据业务系统自身所监控的端口进行设置,如 Web 应用通常会开启监听 8080 端口。若使用消息路由功能必须添加此参数,否则 Sidecar 将无法获取后端应用的健康状态,导致路由不符合预期甚至失败。
ibm.health.check.type
tcp
否
否
指定 MOSN 健康检查类型:tcp 或者 script。
ibm.health.check.path
默认值为
/home/admin/healthcheck.sh
。否
否
该设置仅在 healtch.check.type 为 tcp 时才有效。如果 mosn 健康检查类型指定 script,这里指定完整 script 路径(包括文件名)。
ac.ibm_queue_configs
{ "ibm_queue_configs": [ { "mesh_channel_name": ${mesh_channel_name}, "channel_name": ${channel_name}, "mesh_queue_mgr_name": ${mesh_queue_mgr_name}, "queue_mgr_name": ${queue_mgr_name}, "ibm_server_addr": ${ibm_server_addr} } ]}
是
否
消息队列配置。参数值是 JSON 字符串。支持配置多个队列。 每个队列具体的配置内容均必须包含以下三个元素,每个元素需根据实际情况进行设置。
channel_name: IBM 消息队列通道名。
queue_mgr_name:IBM 消息队列管理器名。
ibm_server_addr:IBM 消息队列实际的 IP 地址与端口。
mesh_channel_name:Mesh 通道别名。非必填,仅当同一应用关联的不同的IBMMQ_SERVER 上存在相同 Queue_manager 和 Channel_name 时必须设置,便于 MOSN 寻址。
mesh_queue_mgr_name:Mesh 队列管理器别名,非必填。非必填,仅当同一应用关联的不同的IBMMQ_SERVER 上存在相同 Queue_manager 和 Channel_name 时必须设置,便于 MOSN 寻址。
说明如果技术栈参数中不存在 mesh_channel_name 与 mesh_queue_mgr_name 配置项,则MOSN 会认为 mesh_channel_name 等于 channel_name,mesh_queue_mgr_name 等于 queue_mgr_name。
ac.ibm_queue_configs 示例如下:
# consumer ibmmq config ibmmq.consumer.server.ip=127.0.0.1 ibmmq.consumer.server.port=1462 ibmmq.consumer.server.channelname=CONSUMER_SVR ibmmq.consumer.server.queue.mgr=CONSUMER_QMUIBPS_SIT # provider ibmmq config ibmmq.provider.server.ip=127.0.0.1 ibmmq.provider.server.port=1462 ibmmq.provider.server.channelname=PROVIDER_SVR ibmmq.provider.server.queue.mgr=PROVIDER_QMUIBPS_SIT
在本地编译应用,将其打包成一个可执行 Jar 包。
在 应用服务 > 发布包管理 页面,找到之前创建的应用,单击 管理,进入包管理界面,单击 上传发布包,将本地的 Jar 包上传。
单击页面右上方的 发布部署,然后在新窗口中选择之前创建的服务实例以及刚才上传的版本,单击 立即发布,跳转至发布单页面,单击 整体发布。
发布过程中,检查已发布机器业务是否正常,如有异常,需及时止损。
执行
ps aux | grep mosn
,检查 Sidecar 是否成功注入。检查各项业务是否正常运作。
添加消息队列
登录服务网格控制台,单击 消息管控,进入 消息管控 页面。
在 消息管理 页签上,单击 添加消息队列,在右侧窗口中,配置以下队列信息。
队列名称:根据实际业务系统,输入队列名称。
队列类型:选择 IBMMQ。
队列管理器 IP:输入消息队列管理器的 IP 地址,如
127.0.0.1
。队列管理器端口:输入消息队列管理器的端口号,如
40001
。
说明通道名、队列管理器名以及队列管理器 IP、端口,必须与服务实例添加的技术栈参数
ac.ibm_queue_configs
配置一致。原始队列信息:
通道名:输入原始队列通道名称。
队列管理器名:输入原始队列管理器名称。
Mesh 队列信息:在使用过程中,如果同一应用下,不同 MQ Server 上存在同名的通道名和队列管理器名,需要设置一个给 Mesh 使用的别名,以便寻址。
说明非必填,为空对存量应用无影响。如果填写,必须与技术栈参数配置、代码中配置的值保持一致。
Mesh 通道名:输入 Mesh 通道名称。
Mesh 队列管理器名:输入 Mesh 队列管理器名称。
确认信息无误后,单击 提交。
维护应用元数据
您可以在服务网格控制台中维护应用元数据,实现以下效果:
设置应用和 ESB 服务信息之间的对应关系。
将应用与队列关联起来。
下发相关配置到 MSON。
登录服务网格控制台,单击 消息管控,进入 消息管控 页面。
选择 应用管理 页签,单击 添加应用,配置以下信息:
应用名称:填写在应用管理控制台上创建的应用名称。
服务类型:可多选,即同时是客户端和服务端。
客户端配置:
RPC 分流比例:输入 0-100 的数字,当调用的服务端应用MQ和RPC两种类型并存时,通过该配置,可调节RPC调用的权重比例。
关联队列:
put 队列:填写请求队列名称。
get 队列:填写响应队列名称。
订阅的 ESB 服务信息 (可添加多个):
服务 ID:输入服务调用端的 14 位 ESB 服务码。
服务名:输入 ESB 服务码别名,长度不超过 60。
服务端配置:
RPC 服务发布:启用后,该应用将通过 MOSN 向注册中心发布 RPC 服务。
关联队列
put 队列:填写响应队列名称。
get 队列:填写请求队列名称。
订阅的 ESB 服务信息 (可添加多个)
服务 ID:输入服务提供端的 14 位 ESB 服务码。
服务名:输入 ESB 服务码别名,长度不超过 60。
消息管控
前往 服务网格 > 消息管控 页面,即可进行消息服务管控与治理。
单击队列右侧的 编辑 按钮,即可修改该队列的配置信息。
单击队列右侧的 删除 按钮并确认后,即可将该队列删除。
队列限流
您可以针对当前队列的某个关联应用,设置限流规则。
在 消息管理 页面,单击目标队列名称,进入该队列详情页。
选择关联应用后,在右侧切换至 队列限流 标签页,单击 添加限流规则。
在新窗口中,配置相应的限流规则信息:
规则名称:自定义限流规则名称。
运行模式:目前仅支持 拦截模式,即限流生效的模式。若匹配上规则,会将方法调用进行限制,调用配置的“限流后操作”。
方法:需要限流的目标方法,支持
get
(收消息)或put
(发消息)方法。限流算法:目前仅支持 令牌桶算法。有关该算法的详细信息,参见 令牌桶算法。
限流后操作:目前仅支持 抛出异常,即匹配上限流规则,限流后,抛出异常。
限流域值:
条件模式:目前仅支持 QPS,即根据单位时间内的请求数进行限流。
单位时间:打印限流日志的周期。对于单位时间内访问次数的限流条件,也表示统计周期。单位为毫秒(ms)。最小值为 1000 ms。
限流阈值:QPS 计数值,单位时间内的请求数。
单击 提交,返回限流规则列表,开启 该规则。
队列路由
您可以针对当前队列的某个关联应用,设置路由规则。
在目标队列的详情页,切换至 队列路由 标签页,单击 添加路由规则。
在新窗口中,配置相应的版本路由信息:
规则名称:自定义路由规则的名称。
应用:选择需要进行流量调拨的目标应用。
方法:目前仅支持
get
方法。路由类型:目前仅支持按版本路由。
版本权重:设置各版本权重,且需确保各版本都是合法的,版本权重和必须为 100%。
说明可在 发布部署服务 > 应用服务 > 发布包管理 页面获取需要的版本信息。
单击 提交,返回路由规则列表,开启 该规则。
服务治理
通过自定义技术栈发布的应用默认开启了服务网格功能,您可以在 服务网格 > 服务治理 中对发布的客户端应用进行服务治理。
发布的客户端应用默认会注册到注册中心,服务端应用开启了 RPC 服务发布 功能后也会注册到注册中心。
服务限流:更多内容请参见 服务限流。
服务路由:更多内容请参见 服务路由。
服务熔断:更多内容请参见 服务熔断。
故障注入:更多内容请参见 故障注入。
服务鉴权:更多内容请参见 服务鉴权。 服务提供者提供服务后,通过 服务鉴权 功能,对服务调用方进行鉴权,主要用于鉴定哪些服务调用者有权限调用所提供的服务。
故障隔离:更多内容请参见 故障隔离。
监控观测
采用最新技术栈部署的业务应用默认会支持应用监控和链路监控功能。您可以在 RMS 控制台上观测应用的实时监控数据。
链路监控
全链路跟踪组件通过解析业务报文,根据字段组合(ori_req_sn+ori_cha_id+ori_req_date)合生成全局唯一序列号 TraceId,提供可视化控制台,支持以下功能:
根据 TraceId,串联应用拓扑,查看拓扑关系。
根据报文自定义字段,搜索链路列表。
根据 TraceId ,查看链路的详细调用信息,包括报文详情等。
应用拓扑
您可以在 监控控制台 > 分布式链路 > 应用拓扑 页面,查看应用调用的拓扑。单击拓扑图中的应用节点,可以查看以下信息:
应用概览 页签显示了当前应用的上下游拓扑及其应用指标趋势,包括应用的请求量(RPS)、响应时间(ms)、错误率(%),如下图所示。
服务调用 页签列出了当前应用发布和引用的所有服务及各个服务的概览信息,包括服务名、方法名、调用量、错误量和平均耗时。
消息 页签列出了当前应用发布和消费的所有信息及其每条消息的相关信息,包括消息主题(topic)、消息事件码(eventCode)、消息组 ID(groupId)、调用量、错误量和平均耗时。单击 查看链路,即可查看该消息所有调用链路的概览信息。
数据库 页签则列出了该应用调用的所有数据库及其相关信息,包括数据库地址、数据库名、调用量、错误量和平均耗时。单击 查看链路,即可查看数据库所有调用链路的概览信息。
单击拓扑图中的连线,可以查看 流量概览 信息:调用链路各性能指标的监控趋势图,及不同调用方式下的请求量(RPS)、响应时间(ms)、错误率(%)。
链路详情
您可以在 监控控制台 > 分布式链路 > 链路查询 页面,输入希望查询的应用名称搜索相关 Trace ID。
单击 Trace ID 进入 链路详情 页,调用方式列展示协议类型(IBMMQ 或 RPC)。
针对专有云客户场景,增加以下几个维度的数据:
comm_status:通讯状态,COMPLETE 代表通讯正常。
biz_status: 业务状态,00 代表正常。
status: 状态分析。biz-status 为 00,并且 comm-status 为 COMPLETE 时,status 才是00(代表正常)。其他 status 状态会显示 {comm-status}|{biz-status},代表失败。
通讯状态和业务状态的判断准则如下:
通讯状态:读取 Service_Header.service_response.status 是否为 COMPLETE。例如在下图中,通讯状态查询的指标:Service_Header.service_response.status 不存在,所以无法判定通讯状态。
业务状态:
优先判断通用业务状态 Service_Header.x_sidecar_status 是否为 success(不区分大小写,建议小写)。
如果通用业务状态不存在的话,监控链路可以根据配置优先级,优先读取 xml body 部分业务 code(配置在数据库表 gtw_jxnx_code_config 中)。
更多链路信息,请参见 查看链路详情。
应用监控
RMS 根据 MOSN 日志进行监控指标聚合,提供可视化控制台和监控模板,支持以下功能:
应用监控:应用粒度的消息收发 TPS、Latency、错误率。
消息监控:队列粒度的消息收发 TPS、Latency、错误率。
资源监控:CPU、MEM 等资源指标。
- 本页导读 (0)