当服务器被狗咬了,我们除了紧急修复还可以干些什么
冗余不做,日子甭过!备份不做,十恶不赦!
今天中午开始,某知名旅行类网站出现了长时间的服务不可用状况。本文尝试从技术方面分析其可能遇到的问题,并提出一些解决方案。
外部攻击
互联网上的外部威胁级别,特别是 APT 攻击的出现频率在最近几年逐年上升。由于本次被攻击的公司最近在资本市场上有所动作,收购了同行业另一家公司的部分股权,因此,不能排除外部攻击者通过 APT 攻击的方式进入内部进行破坏,制造新闻事件并影响开盘时的股价。尽管利空消息下,投资者有抛售相关股票的倾向,但可通过观察分析近期买卖行为的方式证明并找出潜在的相关负责人。
不过,从行为上看,尽管这是一个有价值目标,为了达到造成超过 6 小时完全宕机的目标,需要的准备工作以及背后的技术支持并非脚本小子就可以办得到。在短时间之内做出决定、组织攻击并成功攻陷的可能性不高。
内部攻击
内部攻击是最难防范的、也是威胁级别最高的攻击。由于内部人士有特权信息,在配合得当权限或发现相应漏洞时,很容易造成有影响力的事件。此种内部攻击的可能性,更大来自运维团队。
假设运维团队有 1/2 的成员决定进行一次内部攻击,则此团队有很大的机会在短时间之内做好相应准备,首先关闭日志以及审计系统,其次破坏线上环境,再进行源代码管理服务器,很容易便可造成几乎不可逆的破坏。尽管动机有待商榷,但并不能排除内部攻击的可能性。
运维误操作
PEBKAC 错误 是常见的错误。尽管可能,考虑到该网站的业务量以及雇员规模,其几乎没有可能使用单服务器部署应用。但观察到的错误状况是几乎所有的服务全部下线,因此,单台服务器误操作导致的灾难是几乎没有可能的。
一种灾难发生的可能是 cascading failure。假设运维团队在发布版本时,发布了错误的配置文件,尽管这种分发是在可控状况下进行的,但因为系统在低发布率时崩溃有自愈能力,在更高百分比的发布时,由于可用系统的负载更大,导致可用系统退出服务,最终导致所有可用服务均退出服务,服务宣告彻底不可用。
考虑到此公司业务的复杂性,并观察到其技术栈是大部分基于西雅图郊区某公司的技术构建的,几乎可以肯定的是,部分中间件的支持实际上是依赖外部技术支持的。若是中间件或是第三方 vendor 提供的组件导致错误,很可能本地团队无法做到及时响应。事件发生时大约是太平洋时间下午 9 点,此时的技术支持很大可能是在印度或是澳大利亚进行的。作者的行业从业经验表明,印度技术支持在很大程度上是无法很快解决技术问题的。若是本地团队没有对应对灾难做出 playbook,则很有可能在生产环境故障时束手无措。
应对措施
不管是攻击或是内部故障,有好的备份以及冗余措施,均可以使宕机时间缩短到最低。
备份问题尽管听起来不可思议,但在实践中,不少企业并未建立起一套检验过的备份系统。备份的意义在于危急时刻可以快速恢复或重建生产系统。在企业网络中,经常出现的问题实际上是:
- 备份步骤的瑕疵导致并未完成正确的备份过程
- 由于有限的存储空间导致一定时间后因存储空间耗尽导致的随后备份失败
- 备份介质受损导致无法成功恢复
传统上,磁带因其低造价以及高存储密度使其成为了理想的备份介质。然而,这种传统备份介质的几个致命缺点经常使其内含的数据变得不可存取:
- 丢失的磁带索引卡片
- 磁带介质在存储过程中受到外界磁场影响
- 介质本身损坏
- 介质读取过程中被读取设备损坏
此外,磁带备份介质本身一般存储于磁带仓库中,从仓库检索出所需的备份磁带、转移至数据中心并重新加载数据的时间消耗通常也是客观的。
即使有一套完善的备份系统,备份系统仍然是不能抵挡所有的意外事故的。2014 年, Samsung 数据中心的一场大火使其云服务暂停服务。如果没有异地备份,这场大火将使其本地备份的恢复变得极为困难。
冗余对于突发性事件来说,尽快恢复,或者是持续的提供服务是非常重要的。本月,某知名支付公司因数据中心网络连接性故障导致了一段时间的服务中断。如果有更好的冗余方案,此种事故的影响面将会得以降低,甚至会化解为用户不可感知的内部事故。
冗余是非常常见的做法。例如,大部分服务器都有两部独立的 PSU,任意一部 PSU 失效均不会影响其正常服务;一般来说,服务器的两部 PSU 将连接到两路不同的电路或不间断电源上以避免市电失效;数据中心的电源一般同时配备 UPS 以及柴油发电机以避免发电公司未通知的停止供电服务导致的服务中断。网络亦然;同时接入多路 ISP 线路,并对其进行独立布线,同时在多路线路上宣告地址,便可使网络服务的鲁棒性更高。
在系统的视角上,只有同时配置备份以及冗余方案,才可以最大限度的提高可用性,避免非可控因素导致的长时间服务中断。