我正在构建一个 Web 应用程序,正常运行时间是关键。我知道 100% 的正常运行时间是不现实的,但我希望达到 5 个 9。我不确定实现这一目标的最谨慎方法是什么。
我的初步计划是让 Web 应用在两个地理上独立的数据中心运行。“主”数据中心将包含主服务器,并将数据复制到其他地方未使用的“从属”服务器。如果主数据中心发生停机,DNS 故障转移会将流量转移到“从属”服务器。这种技术存在一些挑战,包括由于奇怪的 DNS 记录缓存等原因,一些用户暂时无法访问网站。
然而,我读到过很多观点,认为 DNS 故障转移不是一个很好的解决方案,你应该把所有东西都放在一个数据中心,并专注于那里的冗余。我发现的问题是,即使是好的数据中心似乎也会有奇怪的网络问题,这可能会导致足够的停机时间,从而破坏 5 个 9 的期望。
我应该使用 DNS 故障转移选项吗?还有更好的选择吗?
答案1
我给客户的经验法则是:免费获得两个 9(即无需专门花费任何钱来实现高可用性)。每多一个 9,总成本就会增加一个数量级。
也就是说,只需将您的应用程序放在公司互联网连接上一个还不错的服务器上,您就可以获得 99% 的正常运行时间。为了改善这一点,您可以进行共置。您可以共置负载平衡和快速故障转移。您可以共置负载平衡、快速故障转移和冷备用 DR 站点。您可以共置负载平衡、热备用站点、PI 地址空间,运行您自己的 ASN 并制定 BGP 对等安排,以确保您的地址空间始终是全局可路由的。您可以研究高可用性硬件,其中包括内存和 CPU 在内的所有内容都可以静止和热交换。如果您的应用程序支持它,您可以运行完全分布式托管,或外包给高可用性内容提供网络。您可以并且将需要五倍的员工来管理所有这些 24*365,包括假期和病假,以及您需要进行的频繁实时 DR 测试,以对所有这些都充满信心。
你可以做很多聪明的事情。但这一切都要付出代价,而且大多数都要非常大笔金钱。
因此,我真诚的建议是:计算一下在公司办公室的一台服务器上托管应用程序需要花费多少钱。如果你的雇主不愿意花钱高达一千倍,忘记五个九吧;这不现实。
答案2
如果五个九很容易实现,那么 Twitter、Facebook、Gmail、Azure 和 Amazon 可能已经存在了。他们肯定有资金和最有效的商业案例。相反,我建议您选择一家在提供可靠基础设施方面具有专业知识的云提供商进行托管,这样他们就可以在您开发产品时担心这个问题。
答案3
为了实现 5 个 9,您需要做的不仅仅是一个故障转移解决方案。您需要一个数据中心内的 HA 以及一个地理位置较远但拓扑上靠近主数据中心的热(或至少是温)备用数据中心。而这仅仅是个开始……
答案4
我想象这里有一个老板想要与 powerpoint 兼容的卖点的东西,但是获得五个九或非常接近它是可能的 - 尽管你必须小心定义到底什么需要有五个九的正常运行时间。
我正在编写一个应用程序,从物联网(也符合 boss / powerpoint 要求)设备收集数据,并将收集到的数据呈现给最终用户,使用 MongoDB 等进行数据挖掘等。
目前,我们的实际正常运行时间至少为 99.9%。如何实现的?我们的正常运行时间定义为用户前端应用程序的可用性。该部分在 GAE 上运行,而其他部分(如 MongoDB)则在我们自己的服务器上运行。通信通过 REST 和大量加密进行。GAE 目前的正常运行时间为 99.45% - 但实际上,对于我们正在使用的部分,正常运行时间更高 - 我们尚未记录任何类型的中断。
另一方面,MongoDB 有时有点不稳定 - 不是很多 - 但目前我们能做到的最好是 98-99% 的正常运行时间。在 MongoDB 之上,我们有一个引擎可以生成 JSON 化的数据块 - 这些数据块是根据请求生成的,但也会定期生成。缓存这些数据块对于维护整个系统的感知正常运行时间非常有帮助。最终用户不知道某个设备是刚刚还是一个小时前将数据传送到后端。因此 - 缓存的数据看起来和“实际”新鲜数据一样新鲜。
因此,如果您善于隔离真正需要高正常运行时间的部分,那么获得真正高的正常运行时间肯定是可能的。正如其他人指出的那样,让整个堆栈达到五个九的正常运行时间非常困难,而且非常昂贵。但您可能可以用更少的钱来做,同时仍然让您的老板满意。