【问题标题】:AWS multi-region web appAWS 多区域 Web 应用程序
【发布时间】:2016-03-04 00:33:24
【问题描述】:

我的网站(EC2、RDS、VPC、S3)位于欧洲(爱尔兰),我想让美洲和亚洲的用户更容易访问它。

  1. 是否应该在新区域中创建新实例(EC2、RDS、VPC、S3)?或者还有其他方法可以做到这一点?
  2. 如果我将拥有更多 EC2 实例,我应该如何为每个实例部署更新?
  3. 什么是让 AWS 网站轻巧且可在世界各个角落以小延迟访问的最佳方式?

【问题讨论】:

    标签: amazon-web-services


    【解决方案1】:

    我应该在新区域创建新实例(EC2、RDS、VPC、S3)吗?

    如果您不考虑预算,那么在世界各地的每个可用区创建实例并将地理流量分配给它们将是一个很好的考虑因素。

    或者还有其他方法可以做到吗?

    也许从实施和可维护性以及预算考虑来看,最简单的方法是实施地理边缘缓存,如 Akamai、CloudFlare 等。

    Akamai 非常昂贵,但 CloudFlare has some free and very cheap plans

    使用边缘缓存意味着静态缓存内容可以从最近的全球边缘点提供给您的客户,而无需针对区域优化您的 AWS 基础设施。

    例如 - 如果您从爱尔兰请求您的主页,它可能从爱尔兰边缘缓存位置提供,而如果我从新西兰请求它,它可能从澳大利亚边缘缓存位置提供 - 这不是为您的 AWS 设置增加任何复杂性。

    在 CloudFlare 中不存在页面缓存版本的情况下(例如),它将访问您的 AWS 源服务器以获取结果。这将导致地理性能变化,但您需要权衡在每个区域实施 EC2 实例的成本以及实际到达您的基础设施且缓存到位的命中数量减少。

    如果我将拥有更多 EC2 实例,我应该如何为每个实例部署更新?

    这在很大程度上取决于您的网络应用程序的复杂性。

    对于更简单的应用程序,您可以使用 Elastic Beanstalk 轻松将更新部署到您的所有 EC2 实例并管理您的自动扩展。

    对于更复杂的安排,您可以选择使用CodeCommitCodePipelineCodeDeploy 的组合来实现相同的目的。

    第三,您始终可以选择结合使用自定义脚本和 AWS API 调用来构建自己的部署工具。或使用a tool that has already been created for this purpose

    让 AWS 网站轻巧且可在世界各个角落以小延迟访问的最佳方式是什么?

    这是一个相当广泛和复杂的问题。

    我的建议是尽可能使用延迟加载,尽可能缓存所有内容,在其生命周期内调整您的 Web 服务器配置(如果您使用的是 nginx,请使用 Varnish 之类的东西),优化尽可能多地使用您的所有媒体资产等。

    对于媒体资产,您可以使用 CDN(如 S3 或 CloudFront)来处理请求,而不是将它们存储在 EC2 实例上。

    到目前为止,您可以为此做的最重要的事情是放入边缘缓存(前面讨论过)。如果您这样做,您的 AWS 性能就不会那么令人担忧了。

    【讨论】:

    • “某些 AWS 服务是全球性的 - VPC 设置不会特定于区域,S3 也是一项全球性服务。” 1) VPC 设置是区域性的。 2) S3 可能是全球服务,但存储桶是区域性的。根据应用程序和存储桶的使用方式,使用特定区域的存储桶可能会提高性能。
    • 将 CloudFront 添加到缓存静态资源会很有帮助。
    • @MattHouser 谢谢,好点子。 This article is useful 了解 S3 的跨区域复制
    • 好的,但是 EC2 呢?脚本加载速度非常重要。
    • 如果您的 Web 应用程序包含大量无法缓存的动态内容,那么添加 EC2 实例是您的下一个最佳选择。但是,如果您不复制它们,您将不得不担心 RDS 实例的延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 2018-05-05
    • 2017-05-18
    • 2020-05-16
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多