一种基于字节码增强技术的动态路由系统技术方案

技术编号:35018198 阅读:27 留言:0更新日期:2022-09-24 22:45
本发明专利技术公开了一种基于字节码增强技术的动态路由,包括RocketMQ中间件、Agent模块、Server模块和Console模块;Agent模块检查启动参数、模块完整性,启动后通过字节码增强技术监视特定的代码,并通过植入代码来改变原来代码的运行逻辑;Server模块负责Agent模块健康检查、指令下发、上报信息处理,服务注册与发现的服务监控,写入/修改/删除条件路由规则;Console模块负责指令接收,前端UI交互;本发明专利技术让同一套环境下多版本运行成为可能,提高服务器的资源利用率,针对提供基于Topic路由的解决方案,省去部署多套RocketMQ。省去部署多套RocketMQ。省去部署多套RocketMQ。

【技术实现步骤摘要】
一种基于字节码增强技术的动态路由系统


[0001]本专利技术属于分布式服务
,尤其涉及一种基于字节码增强技术的动态路由系统。

技术介绍

[0002]随着业务不断扩张,信息系统数量也随之增长。为保证信息系统的可靠性、稳定性,在信息系统研发过程中,创建了多套环境以验证系统各项功能与指标。根据调研,目前业务系统研发流程中,同时有以下环境中的一个或多个:DEV(开发环境)、TEST(测试环境)、UAT(单元自动化测试)、SIT(系统集成测试)、Daily、QA1(质量保证Quality Assurance1)、QA2(质量保证Quality Assurance2)、PROD(生产环境)。在以上环境中,各个业务线又单独建设独立的中间件。造成很多不必要的公用组件重复搭建、各个环境资源利用率过低等问题。为减少可复用的中间件重复搭建、提升各个环境的资源利用率,亟需通过软件系统解决上述研发过程中存在的痛点及问题。
[0003]Dubbo是一款开源高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo路由规则支持用户通过某些特定的路由规则将服务调用的流量路由到特定的服务实例上,从而达到流量路由的目的。Dubbo路由规则支持标签路由及条件路由,标签路由会为invoker加上dubbo.tag参数信息(invoker为服务提供者实例)。而条件路由会在服务注册与发现的特定路径下写入相应的路由规则(例:Zookeeper的/dubbo/config)。Dubbo的路由原理是在程序消费下游服务时先检查规则是否启用,如果没有启用,则直接返回;如果启用了,则按照不同路由规则的权重来区分路由顺序的优先级。通过遍历invoker列表,找出所有符合规则的invoker并返回给服务消费者。
[0004]Dubbo的标签路由在服务注册时就作为参数写入url中,一般不会去手动修改标签信息;Dubbo的规则路由需要用户熟悉文本格式及常用参数,且使用过程中没有错误提示,用户不清楚到底是哪里配置错误导致路由规则失败。
[0005]RocketMQ为消息中间件,消息生产者发送绑定Topic(rocketMQ的终点是Topic,因为Topic包含队列)的消息到RocketMQ的Broker端,消息消费者通过绑定Topic来实现对这个Topic下消息的消费。当程序运行时,除非用户在程序中设定Topic重新绑定逻辑(如定时任务执行Topic的重绑定逻辑等),正常情况下生产者和消费者的Topic都是保持不变的。当同一个应用程序进行多版本测试时,一般都是配置不同ip的RocketMQ服务器地址,而不是通过修改Topic来实现。这样就会造成服务器资源闲置。

技术实现思路

[0006]经过调研,现有技术中还未采用动态路由技术解决上述问题。故在此背景下研发动态路由系统,以达到快速部署新功能测试环境、流量动态编排等能力。
[0007]本专利技术公开的基于字节码增强技术的动态路由系统,包括RocketMQ中间件、Agent
模块、Server模块和Console模块;
[0008]所述Agent模块启动前检查启动参数、模块完整性,若发现参数丢失或者模块不完整,则Agent模块启动失败;所述Agent模块启动后加载事件监视器,通过字节码增强技术对业务程序中特定的代码进行监视,包括修改程序字节码,进行组件检查,标签获取,标签路由,Topic重绑定逻辑;与Server模块建立WebSocket通信连接,上报程序的IP地址、端口、服务名,建立心跳连接,接收来自Server模块的指令;
[0009]所述Server模块基于Apache的Spring框架,负责Agent模块健康检查、指令下发、上报信息处理;Console模块的指令接收;服务注册与发现的服务监控,写入/修改/删除条件路由规则;针对Dubbo Admin的接口调用和RocketMQ Console的消息发送,提供可携带标签的接口调用和消息发送接口;
[0010]所述Console模块基于Apache的Spring框架,负责与前端UI交互和Server模块的Websocket通信,用户在前端UI上进行操作时,通过Http接口将信息传输到Console模块,Console模块接收到请求后根据请求信息或查询或请求Server模块,最终返回给前端UI操作结果。
[0011]进一步的,所述Console模块还通过定时任务同步Server模块的信息,用于前端UI的数据展示。
[0012]进一步的,所述字节码增强技术包括:
[0013]使用dubbo多注册中心将业务方的dubbo接口注册到动态路由zookeeper上;
[0014]Agent模块服务注册时为dubbo接口添加静态标签,所述静态标签即Dubbo标签路由参数;
[0015]Agent模块植入dubbo路由过滤接口SPI到业务程序中;
[0016]Agent模块实现标签透传,即监控servlet接口及dubbo服务调用接口,用于Http、dubbo服务调用时获取标签信息及向后调用时的标签传递;
[0017]Agent模块实现标签降级:Dubbo服务往后调用时,获取上下文标签信息,检查下游服务是否有该标签标识,若下游服务没有该标签标识,则调用基线服务,若下游标签含有该标签标示,则优先调用该标签标识别的服务接口。
[0018]进一步的,RocketMQ中间件进行标签路由,具体步骤如下:
[0019]S1:业务程序启动时Agent模块对业务程序进行字节码加强;
[0020]S2:Producer端针对消息发送时修改消息Topic;
[0021]S3:Consumer端绑定Topic时修改绑定的Topic;
[0022]S4:Consumer端消费消息时从消息中获取透传的标签信息;
[0023]S5:Producer端若启动标签降级开关,则会另起一个线程,去定时获取RocketMQ Broker端的Topic列表,若当前服务的Topic不存在,则将消息发送到基线环境的Topic列表上,实现Topic列表的降级;
[0024]S6:Producer端若启动标签透传功能,则会获取上下文标签,并放入消息中;Consumer端消费消息时候获取标签,并继续往后调用。
[0025]进一步的,RocketMQ中间件进行标签降级,具体步骤如下:
[0026]RocketMQ Producer产生MQ消息,发送到Agent模块,Agent模块获取MQ消息中的上下文标签,如果获取上下文标签,则使用该上下文标签;
[0027]如果不存在上下文标签,则检查是否设置动态标签,如果是,则使用动态标签,如果否则使用静态标签;
[0028]如果使用动态标签,则判断是否开启标签降级开关,如果是则通过RocketMQ Broker得到Topic列表,如果否,则使本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于字节码增强技术的动态路由系统,包括RocketMQ中间件,其特征在于,还包括Agent模块、Server模块和Console模块;所述Agent模块启动前检查启动参数、模块完整性,若发现参数丢失或者模块不完整,则Agent模块启动失败;所述Agent模块启动后加载事件监视器,通过字节码增强技术对业务程序中特定的代码进行监视,包括修改程序字节码,进行组件检查,标签获取,标签路由,Topic重绑定逻辑;与Server模块建立WebSocket通信连接,上报程序的IP地址、端口、服务名,建立心跳连接,接收来自Server模块的指令;所述Server模块基于Apache的Spring框架,负责Agent模块健康检查、指令下发、上报信息处理;Console模块的指令接收;服务注册与发现的服务监控,写入/修改/删除条件路由规则;针对Dubbo Admin的接口调用和RocketMQ Console的消息发送,提供可携带标签的接口调用和消息发送接口;所述Console模块基于Apache的Spring框架,负责与前端UI交互和Server模块的Websocket通信,用户在前端UI上进行操作时,通过Http接口将信息传输到Console模块,Console模块接收到请求后根据请求信息或查询或请求Server模块,最终返回给前端UI操作结果。2.根据权利要求1所述的基于字节码增强技术的动态路由系统,其特征在于,所述Console模块还通过定时任务同步Server模块的信息,用于前端UI的数据展示。3.根据权利要求1所述的基于字节码增强技术的动态路由系统,其特征在于,所述字节码增强技术包括:使用dubbo多注册中心将业务方的dubbo接口注册到动态路由zookeeper上;Agent模块服务注册时为dubbo接口添加静态标签,所述静态标签即Dubbo标签路由参数;Agent模块植入dubbo路由过滤接口SPI到业务程序中;Agent模块实现标签透传,即监控servlet接口及dubbo服务调用接口,用于Http、dubbo服务调用时获取标签信息及向后调用...

【专利技术属性】
技术研发人员:项光烨
申请(专利权)人:湖南兴盛优选网络科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1