【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

滴滴开源 Rdebug:基于真实流量的研发、调试、测试利器

  • 2019-09-16
  • 本文字数:1329 字

    阅读完需:约 4 分钟

滴滴开源 Rdebug:基于真实流量的研发、调试、测试利器

近日,滴滴在 GitHub 上开源后端研发、调试、测试的实用工具 Rdebug,全称 Real Debugger,中文称作真 · Debugger 。使用真实的线上流量进行线下回放测试,提升研发效率、保障代码质量,进而减少事故。一起来具体了解吧。

背景

随着微服务架构的普及和应用,一个复杂的单体服务通常会被拆分成多个小而美的微服务。在享受微服务带来便利的同时,也要接受因为微服务改造带来的问题:需要维护的服务数变多、服务之间 RPC 调用次数增加。


这就造成线下环境维护成本大大增加,其次线下环境涉及到的部门较多,维护一个长期稳定的线下环境也是一个挑战;业务快速发展、需求不断迭代,手写单测又因复杂的业务逻辑以及复杂的服务调用需要 mock 多个下游服务,导致手写和维护单测成本特别的高;手动构造数据,又不够全面真实。以上问题都严重影响 RD 的研发效率,并且增加线上产生事故的隐患。



RD 迫切需要一个只需在本地部署代码、不用搭建下游依赖、使用真实数据,进行快速开发、调试、测试的解决方案。Rdebug 基于流量录制、流量回放的思路,能够巧妙的实现上述方案。

宗旨

提升研发效率、降低测试成本、缩短产品研发周期,保障代码质量、减少线上事故。

使用全景图

全新的研发体验

  • 只需部署模块代码,无需搭建下游服务;

  • 在 macOS 本地回放,开发、调试、测试无需登录远程服务器;

  • 流量录制支持常用协议,FastCGI、HTTP、Redis、Thrift、MySQL 等;

  • 回放速度快,单次回放秒级别。

录路径重定向

为了方便 RD 在本地开发、测试,Rdebug 支持路径重定向。


当线上部署路径和本地代码路径不一致时,当代码中存在大量线上路径硬编码时,无需入侵式修改代码,只需要简单的配置即可实现路径重定向。


即代码可以存放在任何路径下回放。

时间偏移

流量回放时会自动把时间偏移到流量录制的时间点。


在代码中获取时间时,会获得录制时间点之后的时间。所以,当业务接口对时间敏感时,也无需担心。

文件 Mock

流量回放支持文件 Mock,指定文件路径和 Mock 的内容,即可快速实现文件 Mock。


结合录制上报功能,在线上上报配置读取,在线下使用文件 Mock 实现配置“重现”。

Elastic 搜索

对存储在 Elastic 中的流量,支持 URI、输入输出关键词、下游调用等多维度搜索。


回放支持指定文件,也支持上述搜索回放,使用体验更佳。

Xdebug 调试

最高效的功能是 Xdebug 联动调试,通过对代码设置断点即可使用线上流量进行调试。通过这种方式,可以用来研究代码、排查问题、查看下游接口响应格式及数据等,是一个开发调试利器。


丰富的报告

回放报告,汇总线上线下的输入、输出、结果对比,一目了然。



下游调用报告,会列举出所有的下游调用,包括协议、请求内容、匹配上的响应以及相识度。通过不同的背景颜色,标记出完全匹配的流量、存在噪点的调用、缺失的调用、新增的调用等。



结合 Xdebug 生成覆盖率报告,能够清楚的看到哪些代码被执行、哪些代码未被执行以及接口的覆盖率情况。



有关安装、使用过程以及常见问题解答,请查看以下链接:


GitHub:https:// github. com/didi/rdebug


Wiki:https:// github. com/didi/rdebug/wiki


Documentation:https:// github. com/didi/rdebug/blob/master/doc/DocList.md


本文转载自公众号滴滴技术(ID:didi_tech)。


原文链接:


https://mp.weixin.qq.com/s/kchsXqFMIb5sOJBqthhpVw


2019-09-16 21:411807

评论

发布
暂无评论
发现更多内容

Redis稳定性实践

心平气和

redis 缓存 稳定性

如何在一台计算机上安装多个 JDK 版本

mghio

Java jdk 版本管理工具

严选合伙人(二)

Neco.W

创业 重新理解创业 合伙人

Python 核心技术与进阶 list & tuple

Bonaparte

尽管HTTP/3已经来了,HTTP/2也得了解啊

清远

网络协议 HTTP

回“疫”录(18):536公里的路

小天同学

疫情 回忆录 现实纪录 纪实 返程

更聪明地学习,而不是苦读——《如何高效学习》

mzlogin

学习

松哥手把手带你入门 Spring Security,别再问密码怎么解密了

江南一点雨

Java spring Spring Boot spring security

如果你觉得学习 Git 很枯燥,那是因为你还没玩过这款游戏!

GitHubDaily

git GitHub 编程 程序员 开发者工具

Rust 与区块链四月月刊

Aimee 阿敏

区块链 rust 加密货币 crypto

一文带你看清HTTP所有概念

cxuan

HTTP

让你高效工作与学习的免费工具(1)

石云升

高效工作 效率工具 工具

业余前端的日常

顿晓

学习 大前端 日常 专家 知识体系

《后浪》产品经理篇(恶搞版)

静陌

产品经理 后浪

对于程序员,那些既陌生又熟悉的计算机硬件

架构师修行之路

微软 编程 程序员 cpu 架构师

sync.Map源码分析

陈思敏捷

源码 源码分析 Go 语言

Java新技术:封闭类

X.F

Java 架构 编程语言

谈谈控制感(5):怎么破控制感损失的局

史方远

职场 心理 成长

OpenResty部署配置和日志切割

wong

nginx centos openresty

松哥手把手教你定制 Spring Security 中的表单登录

江南一点雨

Java spring Spring Boot spring security

设计模式之观察者模式

设计模式

Harbor 2.0的飞跃: OCI 兼容的工件仓库

亨利笔记

Kubernetes 容器 k8s Harbor 镜像

面试官:小伙子,听说你看过ThreadLocal源码?(万字图文深度解析ThreadLocal)

一枝花算不算浪漫

源码 并发编程 ThreadLocal

从一次排查ES线上问题得出的总结——熔断机制

罗琦

elasticsearch 源码分析 circuit break 熔断

Android | Tangram动态页面之路(二)介绍

哈利迪

android

MySQL常用权限说明

一个有志气的DB

MySQL 用户研究

Xtrabackup的安装使用

一个有志气的DB

MySQL 工具 数据的分片和备份

游戏夜读 | Scikit-learn迎来0.21之前

game1night

《零基础学 Java》 FAQ 之 7-Java 中的内存是怎么分配的

臧萌

Java JVM

Mac 使用笔记

FeiLong

聊聊我对技术一些性质的认识

Tanzv

技术 思考 新人

滴滴开源 Rdebug:基于真实流量的研发、调试、测试利器_文化 & 方法_滴滴开源_InfoQ精选文章