2020 年 5 月 19 日停机事故调查报告

5 月 19 日,由于服务器意外重启,BitMEX 交易引擎在北京时间 20:00 和 21:40 之间经历了计划外的停机事故。在详细阐明我们的调查结果之前,我们想对所有受此事故影响的人致上歉意。我们完全明白此类事故对用户的重大影响。这篇博客文章概述了我们将持续采取的措施,以确保我们尽一切可能将未来的停机风险降到最低。我们同时提供了一些用户如何管理与停机事故相关风险的指导。

此外,我们要重申,在此事故期间,没有任何用户的资金处于风险之中,在交易所离线期间没有发生任何强制平仓。同时所有待处理和新的用户提现都已在重新上线后的 90 分钟内完成处理。

以下是当时发生的情况以及我们应对方式的摘要:

  1. 北京时间 20:00,交易引擎服务器意外重启,使其离线。
  2. 北京时间 20:01,我们的工程和 DevOps (开发与运维) 团队启动了我们的事故应对程序。
  3. 北京时间 20:13,我们的用户通过 https://status.bitmex.com 和官方的 BitMEX Telegram 频道收到了实时警报。随后,在整个事故期间,所有平台均发布了一系列更新消息。
  4. 北京时间 20:20,交易引擎服务已部分恢复,我们的团队开始着手执行恢复操作所需的后续步骤。
  5. 北京时间 20:38,交易引擎服务器突然第二次重启,促使我们的团队启动另一复原程序,该程序旨在将交易引擎迁移到备用服务器 – 通过使用在今年稍早推出的新的故障转移机制,我们得以在 22 分钟内完成此程序。
  6. 北京时间 20:41,我们的云供应商确认了两次服务器重启均与底层硬件问题相关。
  7. 北京时间 21:04,交易引擎服务成功恢复
  8. 北京时间 21:23,交易平台以 “市场暂停和仅取消模式” 重新上线,并向我们的用户发送有关所有交易会在北京时间 21:40 恢复运行的通知。
  9. 北京时间 21:40,交易成功恢复。
  10. 北京时间 22:00 和 23:00 进行提现处理。

这可能再次发生吗?

BitMEX 是一家 24×7 全天候运行的交易所,尽管我们努力提供完美且不间断的正常运行时间和服务,但比较抱歉的是,和任何交易所一样,我们无法对这一点做出保证。当我们查看系统的稳定性,包括我们的内部流程以及我们所使用的第三方供应商时,我们采取了能够最小化任何停机风险的措施。请知悉,我们通过状态页面提供完全透明的正常服务运行时间,其中包含历史平台状态信息。

BitMEX 为确保平台的稳定性作出了哪些努力?

在 2017-2019 年期间,我们大部分的工程资源都分配给了扩张交易所 [1] [2]。这对于管理极端波动下需求的持续增长,以及为所有用户提供最优质的服务来说是非常必要的。从 2019 年下半年开始,我们的工程资源越来越专注于确保高可用性和平台韧性,同时维护并不断扩大平台的容量。

考虑到上述的双重重点,我们的工程师一直在设计和实施一系列的架构改良。这些改良显著的减少了软件/硬件故障对平台的影响,并减少完成等效故障转移所需的时间。最终状态的目标是在处理影响单个可用性区域的事故时实现接近零的停机时间,而地区性可用性区域的停机时间少于一小时。

与架构工作同时进行的,是我们一直在非生产环境中每周模拟一次中断,以验证我们程序的正确性,并提高我们执行的熟悉程度,从而使其越来越自动化。为了直接回应 3 月 13 日服务性能下降,我们最近在 5 月 14 日曾对基础架构进行了一次可见的更改。经过数周的设计会议,咨询了我们的云供应商以及进行了生产模拟的负载测试,我们的团队更换了主数据库背后的技术:将其恢复时间提升了 4 倍,并为在接下来的几个月将其提升至 15 倍提供了机会 - 所有这些均在未中断交易的情况下全部完成。同样地,我们的工程师每周反复透明化地为我们的交易引擎服务提供更新,以通知性能改良和新功能。

最后,为了持续提高韧度和灾难修复能力,并作为我们致力于提供顶尖交易平台的承诺的一部分,我们一直在积极地发展我们的团队,如果您认为自己具备必要的技能,且准备好迎接挑战,请查看我们的职位空缺信息。

BitMEX 为改善平台重启程序作出了哪些努力?

在审查了之前的停机事故和用户反馈后,我们修订了非计划事故后重新开放交易平台的程序,包括了 “仅取消模式” 的更新协议 (在此之前,此模式一直在计划维护后使用)。在 5 月 19 日事故后恢复平台全部功能之前的 17 分钟里,我们收到了 38,437 个取消委托的指令。我们认为,与之前的非计划事故相比,这为用户体验带来了显著的改善。我们将继续审查用户对这一流程的评价,并在必要时优化其有效性,和提供任何新程序的最新情况。

如何保护自己免于停机事故带来的风险?

BitMEX 交易平台提供了许多先进的工具和设置,交易员可以通过这些工具和设置来控制停机事故给他们带来的风险。

对于使用我们 API 的交易员,我们提供了 “自动取消” (Dead Man’s Switch) 功能,该功能使交易员可以通过设置超时来取消无法到达交易所的委托。 请在此处查看有关实现超时功能的详细信息和示例。

BitMEX 平台的另一实用功能是可以将止损委托的触发类型参考设置为 “最新成交价”,“标记价格”或 “指数价格”。 当停机事故过后交易所重新恢复交易时,最新成交价可能会发生剧烈波动。 为了避免止损委托因 “最新成交价” 发生剧烈波动而被触发,交易员可以将止损委托的触发类型设置为 “标记价格” 或 “指数价格”。

上述只是 BitMEX 平台所提供的,使我们的交易员可以控制风险并减少停机事故影响的两个功能示例。 我们的客服团队可以提供更多有关上述两个(以及任何其他)平台风险管理工具的信息。

总结

加密货币行业在短时间内取得了长足发展。 我们知道,用户对我们的期望已经提高,而我们正在全天候工作以进一步提高平台韧性。 我们希望通过这篇博文让所有用户清楚地了解这次停机事故,以及我们为提高平台稳定性和整体交易体验所采取的具体应急措施。

同往常一样,我们鼓励所有关心及受此次停机事故影响的用户联系我们的客服