当S3脱机时,使我的网站保持在线的好策略是什么?


32

当S3脱机时,使我的网站保持在线的好策略是什么?

如果S3 US East 1离线,我应该如何配置/构建我的应用程序,以防止整个网站离线?

在这种情况下实现多元化的最佳策略是什么?


你尝试了什么?
030

Answers:


26

2015年3月,Amazon AWS 宣布支持跨区域的S3复制。当S3中的某个区域脱机时,您可以从另一个区域中的镜像服务文件。

来源:https : //aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/

通过切换到另一个区域来保持基础结构在线的做法很复杂,但是S3是一个相对较小且简单的组件。Netflix 关于他们在混沌大猩猩方面的经历发表了一篇很棒的文章

这也适用于服务降级,例如延迟增加。不仅是您依赖的服务完全脱机时。Netflix对此也有一篇文章:Chaos Engineering Upgraded


检查某件事是否有效的策略是测试它是否有效。备份,代码等也是如此。我建议在运行测试时,从复制的站点运行登台环境(如果有的话)或开发环境(如果有的话)。
Evgeny

众所周知,Netflix使整个地区脱机,以检查其备份计划是否有效。
Evgeny

我记得Netflix曾经和亚马逊
混为一谈。...– wogsland

10

您所要求的基本上是高可用性。为了使系统高度可用,您需要三件事:

  1. 消除单点故障
  2. 从端点切换到另一个的机制
  3. 一种检测故障的方法

消除单点故障

在S3的情况下,正如Evgeny指出的那样,点#1是通过S3跨区域复制来解决的

但是,复制不是瞬时的,您将要检查是否要使应用程序知道复制。万一发生中断,则可能是某些写入到您的源存储桶中的内容尚未(未复制)到目标存储桶中。您必须考虑应用程序如何处理这种情况。这实际上取决于数据类型,数据处理方式以及(可能)最终用户或管理层的期望。

从端点切换到另一个的机制

对于S3,这意味着在发生中断的情况下,您希望应用程序停止对存储区A进行读写,而要使用存储区B。

据我所知,如何实现这一目标目前还取决于您。其他一些AWS服务提供了完全透明的故障转移,但是目前我还不知道S3会有这种情况。

有多种方法可以实现此目的。一个示例是使用代理,它将流量路由到适当的存储桶。在中断期间,您将更新/更改代理以将流量路由到不受中断影响的存储桶。另一个示例是使应用程序配置动态化并将其存储在键值存储中。如果应用程序经常读取KV存储库中的更新属性,则可以切换读取和写入的位置(例如,Spring Cloud支持“ EnvironmentChange”侦听器)。

一种检测故障的方法

好吧,我认为那很容易。只需设置写+读循环并在出现问题时立即发出警报:)

结束语

  • 如果您的应用程序正在写入存储桶,则必须考虑故障转移的情况。是否所有写操作都将其写入目标存储桶(您能告诉我)吗?您可以允许写入目标存储桶(使其成为新的“主存储桶”)吗?精心计划将避免出现裂脑或丢失更新方案的情况。
  • 根据您的SLA,您可能希望点2和点3是自动的或自动的。这需要额外的计划,工具和测试,但是写得好的脚本总是比人类能以更快的速度和更可预测的方式做出反应(失败也有令人讨厌的习惯,发生在深夜,而人为干预是有害的。
  • 值得一提的是,即使跨区域复制也不能完全消除单点故障。当然,如果某个地区出现故障,您将被覆盖。但是,如果发生全美国范围的AWS中断怎么办?去年,Azure出现了部分但全球性的停电,2014年也发生了一次。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.