*应用程序代码是最坏的罪犯。它可以崩溃并退出,冻结并停止对输入的响应,对输入运行太慢,耗尽所有内存,等等。
*系统代码(例如我们使用ZeroMQ编写的代理)可能会因为与应用程序代码相同的原因而死亡。系统代码应该比应用程序代码更可靠,但它仍然可能崩溃和自杀,特别是当它试图为速度较慢的客户端设置消息队列时,会导致内存不足的情况发生。
*消息队列可能会溢出,通常是在已经学会了如何残酷地处理缓慢的客户端的系统代码中。当队列溢出时,它开始丢弃消息。所以我们“丢失”信息。
*网络可能出现故障(例如,WiFi关闭或超出范围)。在这种情况下,ZeroMQ将自动重新连接,但与此同时,消息可能会丢失。
*硬件可能会出现故障,则该设备上运行的所有进程故障。
*网络可能以奇怪的方式出现故障,例如,交换机上的某些端口可能会死机,网络的这些部分变得不可访问。
*整个数据中心都可能遭受雷击、地震、火灾或更常见的电力或冷却故障。