微服务故障测试

  • Jan Stenberg
  • 谢丽

2016 年 3 月 3 日

话题:测试语言 & 开发架构

微服务从业者峰会上,Kolton Andrus演讲中指出,故障测试是运行微服务的一个关键部分。你应该确定微服务的行为同预期一样,以避免停机。

前 Netflix 软件工程师 Andrus 将故障测试比作疫苗,为了产生免疫力,向体内注射少量有害的东西。在 Andrus 看来,这非常符合微服务领域。为了查看微服务的行为,我们向其中注入少量对微服务有害的东西,然后设法建立免疫。

故障测试的缺点是它可能造成影响。它会带来破坏或者造成一些客户影响,但是,如果最终的结果是最坏的事情没有那么坏,而最好的事情相当好,比如,阻止了停机,那么他认为,这种缺点是可控的。

做故障测试,Andrus 更喜欢结合故障场景,考虑什么会出错,系统怎么会出错。他认为,提出类似“我们担心什么?”或“会出什么错?”这样的问题,多少会有助于更好地做准备。考虑故障发生的可能性,就可以发现基础设施中应该投入时间的常见事件。不过,他指出,我们不可能什么都准备好,故障总会出现,我们无法看到它们到来,但是,我们要相信,做好准备会让我们更有能力缓解问题。

另一个 Andrus 认为有助于优先级排序和风险评估的问题是“出错成本是什么?”。然后,可以执行一个成本 - 收益分析,不仅要考虑会出什么错,而且还要考虑什么可能出错,这有助于决定在哪里投入时间和金钱以获得最好的回报。

Andrus 还强调了在生产环境中进行测试的重要性。如果只在测试环境中测试,那么生产环境的配置、网络和硬件都没有测试过,他援引了 Amazon Web Services(AWS)著名工程师James Hamilton的一段话:

那些不愿意在生产环境中进行测试的人对他们的服务能够在故障情况下继续运行没有信心。不做生产环境测试,会在需要恢复的时候发现恢复失效了。

如果你做了大量的工作,并创建了缓解问题的方案,但未能在生产环境中进行测试,那么你稍后可能会发现它们在生产环境中无效或者导致故障更糟糕,那可不是一个让人身在其中倍感愉快的境地。

查看英文原文:Failure Testing of Microservices

测试语言 & 开发架构