跳转至主要内容
我想进一步探讨保罗最近的博客文章《您的预生产测试是否有效?》。 保罗探讨了CPU利用率和代码路径,但许多应用程序还有另一个至关重要的方面——网络利用率。多数应用程序在局域网环境中进行测试,此时延迟在亚毫秒级,带宽至少达到100Mbps。然而部署到广域网环境后,带宽大幅缩减且延迟激增,测试结果往往会酿成灾难性后果。
在局域网环境中测试虽能发现多数网络相关缺陷,但某些与数据包丢失或意外分段(TCP不会保持消息边界)相关的缺陷在局域网环境中较难察觉。 在高速局域网环境中,您也较难察觉设计缺陷,而在低速广域网环境中则更容易发现问题。因此,必须在最恶劣的预期网络环境下测试任何网络应用程序——包括低带宽、高延迟,并务必考虑数据包丢失率。
有两种方法可以做到这一点。
第一种方法是使用实际环境。将服务器(或客户端)部署到网络中的主机上进行测试。这种方法的优势在于能利用现有基础设施,但缺点是无法控制环境——当需要复现问题或测试修复方案时,环境控制至关重要。
第二种方法是使用广域网模拟器。这类工具既有硬件设备也有纯软件方案,既有商业产品也有开源(免费)版本。其优势在于能完全掌控延迟、数据包丢失率等网络参数,且无需牵扯其他团队(即不必将软件部署到他人系统上)。 其缺点在于成本和学习曲线。即使使用免费软件,仍需提供运行系统(通常是某种Unix系统)并掌握操作方法。数年前我曾撰写过Dummynet教程,当时它是为数不多的免费模拟器之一。如今选择已大幅增加,只需搜索"WAN模拟器"即可找到众多选项。
根据我处理性能和应用程序故障问题的经验,我认为此类测试通过减少因缺陷导致的生产中断,以及提升应用程序及其用户性能,所创造的价值将远超其成本。