关于团队,开发和运维敲定,究竟能在现阶段为团队带来多少收益拭目以待。从人选可以看出团队选人的一些模式,也会是我评估团队人员管理能力的试金石。关于团队的思考也可以告一段落。
复杂系统如何进行测试
这几年做了不少复杂系统的改造工作,汇量还算有一些测试人力和能力积累,易点在在线引擎的测试方便,可以说是一无所有。
在这样的背景下,手写了 功夫熊猫 测试系统并开源,集成了请求录制、回放、结果对比、压测能力,实现了 GO、C++ 语言的 SDK,并在代码架构调整、服务重构中发挥定海神针的作用。为了解决复杂协议问题,基于 bRPC 实现了基于 http/grpc 的请求方式,同时支持自定义 Protobuf Message。
可以从两个角度来思考复杂系统的测试问题,一个是单点测试,另一个是全链路测试。
单点测试
单点测试是指针对特定服务的请求录制、回放、结果对比、压力测试,这些点 功夫熊猫 已经能很好的支持,这里有几个关键点可以拉出来聊一聊。
请求录制,需要支持不同协议、RPC 框架,功夫熊猫试图通过提供 SDK 的方式,屏蔽技术实现细节、方便接入
回放,和录制面临的问题一样,需要区分 RPC 框架、协议进行回放,还需要支持自定义 Protobuf Message,这需要强大的 RPC 框架支持,在功夫熊猫选型中最终敲定了 bRPC
这里其实选择 go 语言及一些框架会有更好的效果,但当时写 C++ 手感火热,有了 bRPC 的选择
结果对比,这个功能也是非常有趣且重要的,尤其是在系统、服务重构过程中,完美的结果是两个版本的代码针对相同的输入有完全一致的输出,这一点在汇量做新版在线算法引擎迭代时立下了汗马功劳,真的是飞机换引擎的强力保障,那么大的重构未出现大的故障归功于此。说回功能,其实是针对结果归一化为 Json,对结果按字段匹配是否相等,针对数值类型会计算差异值、比例,对于后者是在 动态系统中 评估差异值是否可接受,所谓动态系统是指 某些动态因素无法屏蔽
全链路测试
这是目前面临的问题,随着直客业务跑通,整个在线链路延伸到了召回、排序、推理等多个环节,复杂度也提升了一个量级,如何考虑如何进行全链路连通性、正确性测试。
现在的方案是创建独立的测试环境,规整基础服务、业务服务的部署脚本,搭建完整的服务链路,即可以用于做单点测试,也可拿来做全链路测试。
具体到部署方式,采用了宿主机、docker、k8s (minikube) 等多种形式。这里基于宿主机的方式主要是 consul,如果是在容器里面 consul sidecar agent 在 join 时会有问题。业务服务则完全基于 Helm 的方式部署,且 Helm 代码的组织方式也做了较好的兼容性支持,以便在新建环境时(比如 dev)可方便添加。
最后
在 AI Coding 成必选项之后,功夫熊猫重构的工作已经展开,敬请期待。对复杂系统的测试问题从两个角度浅谈了一下,希望有所帮助。