简单版
实现目标:可以分布式测试自己业务,高度定制
原理:通过zookeeper进行配置和调度,角色分为二个,主控和分布测试单元。
分布测试单元
功能:接收主控的任务并且执行,主要功能为启动和接收执行任务
启动
1、 启动的时候注册到zookeeper上
2、 监听对应的配置节点(需要根据配置来启动任务)
3、 监听对应的队列,用来和主控制进行消息通信
接收任务
1、从配置节点上获得对应要执行的参数,包括启动的线程,对应的每个线程执行的时间间隔和汇报通知时间
2、接收任务执行
3、通过队列,通知对应主控节点进行通信(通信协议包括,本节点对应信息,任务执行的阶段信息)
4、任务执行完成通过队列汇总到主控
难点
1、关于集合点的设置和高度一致性难,但是实际上测试可能没那么严格也可以接受
2、关于分布式测试节点出现各种异常的情况下如何处理也是一个难点
主控节点
主控节点功能:分配任务执行,并且查看任务进行,进行任务汇总。
1、分配任务:配置相关的任务,配置完成后,启动相关节点启动任务
2、任务查看:定时从队列上查看当前各个节点的执行情况
3、任务汇总:如果所有任务执行结束了,将对应的任务汇总输出对应的报告
复杂版
实现目标:可以定制扩展业务,直接执行就可以
需要解决的核心问题
1、任务通过jar包的样式分发到各个节点,放置在lib目录下
2、新任务使用定制的Classloader从lib上加载对应的jar包
3、对应实现的业务的jar包要高度抽象成一套可扩展的接口
可以做成一个产品,如果公司测试业务有需求的话倒是可以,一般公司没那个耐心和投入
总结
1、复杂版做的话,是一个长期的工程,简单版的可以在满足研发非测试的绝大多数的要求
2、单个机器上启动多个java的客户端压力测试程序也可以做一部分压力测试工作,但是还远远不足。