我听说过Netflix和Twitter能够在两个独立的基础设施中复制网络流量的故事:一个是权威/可信的,可以追溯到用户;另一个是“影子”或测试基础设施,认为它正在返回给用户,但却没有.重点是在实际负载和时间测试二级基础设施.
我很确定有一个词可以形容这一点,但“桥梁”似乎不是正确的,也不是“重播”.
任何人都可以帮助我调用这种技术和/或可以用什么工具来完成这项工作?
我想我应该补充一点,我听说过有效“重放日志”的技术,但实际上很难获得真正的速度/分布.
解决方法
我见过的用于此类负载测试的基本策略是从生产系统中提取日志文件并在测试系统上重放它们.
您可以使用JMeter或Apache Bench等工具重播日志文件中的请求.如果您正在寻找重放非常复杂的客户端/服务器交互(具有基于原始日志流的特定时序详细信息),希望真正运行应用程序的内部(查找竞争条件,与时间相关的错误等),您可能会看看编写特定于大规模模拟客户的应用程序特定测试工具.
您无法简单地捕获大量原始网络流量并使用任何基于TCP或IP的协议“重放”它. TCP序列号不会与原始捕获的流量匹配,并且不会起作用. IP层捕获将成为问题,因为您的模拟客户端将需要回答捕获的发件人的IP地址.你最好在靠近第7层捕获流量并使用它来重放会话,否则,你也在考虑编写TCP模拟器. (我可以想象使用像tshark这样的东西来破坏第7层数据和来自TCP流的定时并重播它,例如.)
简单地重放网络流量可以模拟负载,但不一定能捕获缺陷.如果您想要对应用程序正确响应的任何测试进行负载测试,您的模拟客户端将需要从测试服务器接收响应并解析它们的正确性.由于您的应用程序将生成动态响应数据,因此模拟客户端不太可能只是将测试服务器的响应与来自生产服务器的记录响应进行比较.在这里,您将开始编写特定于您的应用程序及其输出的测试工具.