性能:流量回放搭建

OTDD (Online Test Driven Development的缩写),是一个开源的流量回放系统,其主页:https://otdd.io,github:https://github.com/otdd/release

和传统的流量回放相比,其最大的区别是它会自动将服务的请求/返回(inbound request / response )和其第三方依赖请求和返回(outbound requests / responses) 自动关联起来,所以它有如下巨大的价值:

1. 可以直观的检查和理解线上的处理流程细节

2. 可以正确的mock掉所有第三方依赖,同时这些mock还可以编辑,极大的加快开发过程

3. 可以用线上录制的流量精准的对开发代码进行测试

为什么要用OTDD?

微服务架构主要面临如下问题:

1. 难以在线下构造第三方依赖

众多被依赖的服务需要在开发/测试环境启动,且其数据状态不一致问题突出和难以解决。

2. 难以构造复杂的测试场景

复杂的测试场景对应复杂的第三方依赖的返回,要么手动mock,要么构造第三方数据,特别繁琐。

3. 测试case难以维护

微服务经常升级,测试case难以维护。

而OTDD完美的解决了这些问题

1. 所有的第三方服务会被用录制的线上数据自动mock,完美解决第三方依赖问题。

当流量回放时,被测服务的所有outbound request通过iptables被转发到本地的OTDD test runner,然后该runner根据线上录制的数据返回对应的response.

2. 线上流量自动被OTDD录制,无论场景有多复杂

3. 当有新的feature上线后,录制的流量自动更新,不再需要手工更新test case库

OTDD是如何工作的?

OTDD重点解决两方面的问题

1. 线上流量的录制

OTDD运行在kubernetes和istio之上,利用istio对所有流量的托管,通过编译到envoy的otdd filter对流量进行特殊的处理,让流量在单个服务上间隔一个时间gap串行的处理,利用这个时间gap来对inbound req/resp和outbound reqs/resps建立对应关系。

性能:流量回放搭建

当应用OTDD进行流量录制的时候,OTDD会自动创建一个redirector和recorder。该redirector和其他正常的服务pod一样,会自动接收到正常的线上请求,然后随机采样间隔性的串行转发请求到recorder。而recorder则只会接收到redirector转发过来的串行请求。然后inbound req/resp和其对应的outbound reqs/resps将在recorder上被录制。

性能:流量回放搭建

2. 流量的回放

OTDD test runner

OTDD对流量的回放都发生在tcp层级。

OTDD 的test runner运行在本地,其会不断从otddserver拉取指定的流量来回放。当一个流量被拉取到后,其inbound request会被其直接发送到本地的被测服务,同时,通过iptables拦截该被测服务的所有outbound请求,然后用流量的outbound response来自动mock。

OTDD test runner有两种运行模式:

a. 以一个standalone docker的方式运行

该方式适用于被测服务运行在docker里面的场景,比如一个php docker或者nginx docker。

其会独立启动一个test runner docker,然后被测docker共享其网络到test runner docker实现回放。

b. 以一个service的方式运行

该方式适用于大多数传统的linux下的开发模式。

test runner将会运行在独立的linux用户里,然后将被测服务通过iptables进行网络拦截。

DDL语言

由于所有的流量都在tcp层级,为了可读性和可编辑性,针对不同的application protocol引入了DDL语言,及其对应的encoder/decoder plugin实现。

encoder/decoder plugin主要负责:

a. 解析tcp层面的数据到DDL,使其变得humman readable,且可以编辑。

b. 将DDL encode成tcp层面的数据,使其可以回放。

由于OTDD在不断的添加对不同application protocol的支持,所以这些ddl plugin被设计成可以在otddserver里面去管理(安装或者卸载)。目前支持的protocol有:http, thrift, redis等。

 

OTDD目前来看是流量回放领域里面的一颗新星,解决了长期以来传统的流量回放只管线上流量的无序录制,却无法有序管理和利用的老大难问题,目前其已经正式发布了0.1.0版本,赶紧去试试吧! https://otdd.io/getstarted

上一篇:gitlab runner


下一篇:Chrome 的小恐龙游戏,被我破解了...