博客 工程师的角落

在墨菲定律的阴影下:为失败而设计

墨菲定律:“任何可能出错的事情都会出错。”

作为一名数据系统工程师,我编写和维护我们用来收集、处理和分析大型数据集的系统。在我的职业生涯中,我为研究人员、小型初创公司、大型国防公司以及介于两者之间的组织编写过软件,我明白了失败是不可避免的。随着DomainTools成长为支持客户关键任务基础设施的企业安全公司,我们需要为失败做好准备乐动体育官网下载。我们需要建立容错和可扩展的系统。

这是什么意思?这意味着我们设计的系统预期会出现故障。什么样的失败?各种各样的失败。机器失败,网络问题存在,人类会犯错。我们无法预测所有类型的故障,所以我们希望设计出快速故障并优雅恢复的系统。

事实上,当我们让事情发生故障时,我们可以增加系统的健壮性。通过问这样一个问题:“当我们系统的组件出现故障时,我们如何在有或没有人为干预的情况下恢复?”我们开始建立韧性。

有时失败是:

  1. 成功驱动.一个网站流量的增加会导致一项服务瘫痪。为此,我们计划在负载均衡器后服务我们的网站。这将负载分配到多个服务器,并将服务器与客户机解耦。我们可以添加或删除服务器以适应负载的变化,并在不降低可用性的情况下更新服务。
  2. 我们无法控制.我们在网络中设计了冗余。我们有多个运营商为我们提供互联网接入,为网络故障提供备选路由。当主路由出现拥塞时,我们的交换机设置为自动故障转移到辅助路由,允许更短的中断。
  3. 临时.我们的服务是用重试逻辑编写的。当远程调用失败时,我们的代码会等待并自动重试。我们已经添加了超时逻辑,所以如果我们没有及时地收到答复,我们就转到计划B。

当事情失败时,我们需要能够恢复。我们有数据持久性,这意味着我们所有的数据都被存储和存档。当我们处理数据时,我们保留原始数据的副本,这允许我们重新计算可能在故障期间丢失的工作。这需要更多的存储,可能会延迟可用性,但结果不会丢失。

这只是我们工作的众多方式之一,以确保您能够访问您所依赖的DomainTools的数据和服务。