流量录制系统的设计与实现

无论在全链路压测还是在系统功能测试方面,流量录制回放功能是系统必备功能,也是业界各大公司持续建设的研发效能系统。

接下来以sandbox-repeater提供的简易流量录制回放系统为例,介绍一个录制回放系统具备的基本功能,依葫芦画瓢,在真实应用中可以结合具体的系统架构、业务场景、质量保证方案需要做改进。

sandbox-repeater提供了standalone模式及远程模式,standalone模式针对单机,把录制的流量存储在本地文件中;将配置文件中的repeat.standalone.mode置为false即可开启远程模式,远程模式及接近真实应用场景的模式,实现对远程服务节点的流量录制回放功能。

对于一个待实现录制回放功能的服务,需要经过服务注册、录制回放配置管理、录制回放代理模块安装、录制回放流量管理功能、回访结果的diff功能(分析功能)


服务注册

管理待附加流量录制回放功能的服务节点,核心信息包括服务的地址信息(如ip端口,如果是集中管理的微服务,可以有服务id标识等)、服务名称、产品线、所属环境等信息。

节点上报的方式可以有主动上报或被动注册两种。

主动上报,就是服务定期会有心跳检测机制实时上报到服务注册接口地址。如果是rpc服务,可以在根据微服务发现管理机制基础上进行服务的服务的统一维护即可。

被动注册,就是通过手动的方式或其它间接方式来进行注册,通常是一次性注册,不具有活检功能。

repeater提供了内部心跳上报机制,上报sandbox-module模块的加载情况。

代理管理

此处的代理指sandbox及基于sandbox-module实现的repeater模块,录制回放的功能借助sandbox-repeater完成。关于sandbox-repeater的实现介绍参照上篇文章。

sandbox启动方式分为两种,一种是静态agent方式,即在服务启动时指定agent,另一种是动态agent方式,将sandbox attach到已经在运行中的java进程中。二者实现的效果是一样的。

对于一个高度灵活的管理模块,希望采用第二种方式,首先将部署脚本预先安装到宿主机或者动态拷贝到宿主机相应目录,执行脚本从cdn或其它存储资源上下载安装包,将代理代码安装到宿主系统所在机器,然后启动代理,可以通过sandbox提供的api实现对sandbox-module的动态控制,比如启动、卸载、重新加载,其它功能可以进行二次编码实现。

配置管理

需要对那些接口、组件、方法进行录制和回放,sandbox-repeater通过配置管理控制,并且有相应的配置规则,可以参照sandbox-repeater使用文档。

完成配置编写之后,需要将配置绑定并推送到响应节点,这样才能在录制回放中读取内存中最新的配置运行。

流量管理

     流量录制,目前一些资料实现的都是入口方法的请求|响应的录制回放,对过程中方法的录制回放功能没有过多的应用或相关分享。随着我们对质量的追求日益精进,越发希望提供方法粒度的录制回放功能。

流量录制

      sandbox-repeater可以提供全链路方法级的流量录制功能,在录制过程中,会将需要录制的方法结果存储一个map对象中,key为traceId,当投递结果时,从map中获取该traceId的所有过程数据,装配成record推送到queue队列中,由一个异步线程进行消费发送给record api后存入数据库。

流量mock

      sandbox-repeater中提到的流量回放应该准确来说是流量mock,通常说的流量回放指将请求流量通过直接或间接的方法打到指定服务的方式。 

    通过调用sandbox机制实现的回放接口发送回放请求,将回放请求记录事件总线,回放触发器(发器订阅了总线事件)获取回放事件信息,通过回放事件入口函数的类型(只对入口函数事件进行回放,此处采用桥接模式,函数类型为回放器定义的类型)获取回放器(比如http、redis、java、dubbo等),执行回放动作。比如http回放,解析请求的uri、参数,装配好请求参数后,发送一个本地http请求。

录制回放系统两个关键问题是:录制的流量去哪了?回放时的流量从哪获取的?

sandbox-repeater配置中指定了流量上报和获取的接口,可以实现流量的存储。目前这种设计对于高并发流量的录制功能是存在明显瓶颈的,所以不能直接用在高并发系统的录制功能中,需要对repeater进行进一步改造,比如将流量打入kafka,在进一步处理。

流量diff功能,这个是目前微服务系统质量保证的重要手段,设计的核心问题有:

对结果进行哪些维度的diff,如果完全匹配diff往往diff结果非常多;

针对回放过程中的依赖结果不同,如果进行diff。


未完待续.....

难点:

高并发下的性能瓶颈:高并发下的录制回放问题,尤其支持方法粒度的mock能力;

多任务并发管理:多任务并非回放能力;

特殊场景录制策略:统一trace内对方法、参数均相同的多次请求如何录制、回放;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容