当S3脱机时使网站保持在线的最佳策略是什么?

如果S3 US East 1脱机,我应该如何配置/结构化我的应用程序以防止整个站点脱机?

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

#1 楼

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

源:https://aws.amazon.com/blogs/aws/new-cross-region-复制为amazon-s3 /

通过切换到另一个区域来使基础结构保持在线状态的做法很复杂,但是S3是一个相对较小且简单的组件。 Netflix上有一篇很棒的文章介绍了他们在Chaos Gorilla方面的经验。

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

评论


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

– Evgeny Zislis
17年2月28日在18:37

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

– Evgeny Zislis
17-2-28在18:39



我记得Netflix过去曾经和亚马逊呆在一起....

– wogsland
17 Mar 9 '17 at 1:26

#2 楼

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


消除单点故障
从端点切换到另一个端点的机制
检测故障

消除单个故障点

如Evgeny所指出的,对于S3,点#1是通过S3跨区域复制解决的。 br />
但是,复制不是瞬时的,您将要检查是否要使应用程序知道复制。万一发生中断,则可能是某些写入到您的源存储桶中的内容尚未(不被复制)到目标存储桶中。您必须考虑应用程序将如何处理这种情况。这实际上取决于数据的类型,正在执行的操作以及最终用户或管理层的期望。

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

对于S3,这意味着在发生故障时,您希望应用程序停止对存储区A进行读写,而要使用存储区B。

如何实现这一点据我所知,到现在为止。其他一些AWS服务提供了完全透明的故障转移,但目前我还不知道S3会发生这种情况。一个示例是使用代理,它将流量路由到适当的存储桶。在中断期间,您将更新/更改代理以将流量路由到不受中断影响的存储桶。另一个示例是使应用程序配置动态化并将其存储在键值存储中。如果应用程序足够频繁地读取KV存储库中的更新属性,则可以切换读写位置(例如,Spring Cloud支持“ EnvironmentChange”侦听器)。

检测故障

好吧,我认为那很容易。只需设置一个写入+读取循环,并在出现问题时立即发出警告:)您必须考虑故障转移的情况。是否所有写操作都将其写入目标存储桶(您能告诉我)吗?您可以允许写入目标存储桶(使其成为新的“主存储桶”)吗?仔细的计划将避免出现脑裂或丢失更新的情况。
根据您的SLA,您可能希望#2和#3点是自动的或自动的。这需要额外的计划,工具和测试,但是写得好的脚本将总是比人类能够以更快的速度和更可预测的方式做出反应(失败也有令人讨厌的习惯,发生在深夜,而人为干预是有害的。
值得一提的是,即使跨区域复制也不能完全消除单点故障。当然,如果某个区域出现故障,您将被覆盖。但是,如果美国范围内的AWS发生故障该怎么办?去年停电,2014年也停电。