我们经常在性能测试和压力测试的时候发愁,如何模拟线上真实流量还原现场使用情况对于我们来说是个大挑战。通常情况下,我们会从数据库中找出用户访问的数据和请求来模拟历史访问,这样做需要做大量的脚本和数据分析工作。现在好了滴滴开源RDebug工具可以录制线上的真实流量,并且可以通过回放的方式对系统进行测试。帮助我们实现性能测试和压力测试,并且可以快速的对高峰访问情况进行复盘。我们一起来看看吧。
GitHub开源
地址:https://github.com/didi/rdebug/blob/master/README_zh_CN.md
目前有700左右的星星了。

鉴于微服务具有易于扩展、部署简单、技术异构性等优点,越来越多的服务都在采用微服务的架构模式。一个复杂的单体服务通常会被拆分成多个小的微服务,当然在享受微服务带来的一系列便利的同时也要接受因为微服务改造带来的问题:需要维护的服务数变多、服务之间 RPC 调用次数增加……
在服务化改造完成之后,原来的单体服务演化成一堆微服务,这就造成线下开发测试环境维护成本大大增加,其次线下环境涉及到的部门较多,维护一个长期稳定的线下环境也是一个挑战;业务快速发展、需求不断迭代,手写单测又因复杂的业务逻辑以及复杂的服务调用需要 mock 多个下游服务,导致手写单测成本特别的高;手动构造数据,又不够全面真实。以上问题都严重影响 RD 的研发效率,并且增加线上发生事故的隐患。
主要功能
流量录制: 即录制线上服务的真实请求,包括调用下游服务的 RPC 请求。流量录制的难点在于如何将上下游请求以及每次 RPC 的请求/响应一一对应。
流量回放: 即用线上录制的流量,对线下测试代码进行回放,通过流量匹配 mock 掉下游 RPC 请求。因此,流量回放的难点在于请求的拦截和匹配。三种方式的回放:下载源码回放、midi.phar 包回放、composer bin 回放。
架构

通过Koala和Koala-libc 作为核心代码,实现底层库
Koala是Go编写的,Libc用了部分C++完成
https://github.com/didi/rdebug/blob/master/koala/README.md
生成报告


