AWS - 如何更快地为海外用户提供服务

Chr*_*Lam 6 scaling network-speed amazon-web-services

我们的基础设施依赖于 us-east-1 区域的 AWS。(EC2、CloudFront、RDS、ElastiCache)

我们现在有越来越多来自亚太地区的用户。用户开始抱怨我们网站的网络速度。(请注意,我们已经在使用 CloudFront 来提供静态资产)

研究后的一些线索:

  1. 将一组基础设施克隆到亚太地区(例如 JP)
    • $$ 关注
    • 通过快速测试发现的一个事实:us-east-1 <---> ap-norteast-1 之间的延迟约为 160-180 毫秒。
    • 在我们的案例中不太可行。尽管我们可以在 JP 中创建 DB 只读副本,但 Web 服务器仍然必须向美国发送写操作。
    • ElastiCache 不支持跨区域。IE。美国 ElastiCache 只能由美国 ec2 实例访问。
  2. 每个区域中的一个 VPC,将两个 VPC 与 IPSec/VPN 隧道互连。JP 仅包含 Web 服务器,所有其他服务都保留在美国。
    • 尽管如此,美国和日本之间仍有延迟
  3. 在#2 中为 VPN 隧道使用 WAN 优化器
    • 任何人都有这方面的经验?我在谷歌中找不到很多关于 VPC 到 VPC 优化的信息......
  4. 使用 CloudFlare 的 Railgun
    • 我们只需要在美国的 web 服务器上安装 Railgun 监听器
    • 简单得多,我们甚至不需要在 JP 中运行任何东西

我的问题:

  • 最佳方式/行业最佳实践是什么?扩展到另一个地区?我知道有些公司的基础设施只在一个地区,但他们如何确保海外用户的速度?
  • 对于#2,持久隧道有帮助吗?
  • 对于#2/#3,假设地域之间的延迟和网速可以优化,那么JP真的有必要有web服务器吗?在 JP 中只有代理服务器来代理对美国 Web 服务器的请求怎么样?

任何帮助将不胜感激,谢谢:D

HBr*_*ijn 7

世界是一个相当大的地方,虽然网络带宽正在稳步增加世界一个地方和地球另一端之间的网络延迟,但不会很快消失。

在多个级别上进行优化和调整可以改善用户体验,但最终您将达到这样一个级别,即通过让您的数据在物理上更接近最终用户来减少延迟是提高性能的唯一可行方法。

http://chimera.labs.oreilly.com/books/1230000000545/ch10.html#MORE_BANDWIDTH_DOESNT_MATTER_MUCH

Web 性能工程师 Ilya Grigorik 的《高性能浏览器网络》是一本包含许多见解和上图来源的好书。

什么是最经济/最优的取决于您的特定场景、您的代码库并需要仔细测试。没有神奇的基础设施唯一的解决方案。

大多数需要大规模扩展的应用程序都需要通过一次或多次重新设计来解决这个问题。对 X 数量用户似乎有效的设计选择、技术和假设将被证明是错误的 100 倍或 1000 倍。

High Scalability 博客中可以找到有趣的经验教训

重新设计您的应用程序代码以便更好地缓存动态内容是一种方法,例如查看 varnish 模型,该模型允许您的 Web 应用程序按需使缓存的动态内容无效,当大量动态内容实际上不需要时,这种方法非常有效为每个请求完全重新生成。这应该可以让您更好地使用 CDN,并意味着您可以留在一个可用区域内。

重新设计您的应用程序,使其能够在多个可用区上工作,这也将改善灾难恢复,不仅可以提高国际用户的性能。


dmo*_*ati 5

您必须在用户体验和美元之间进行权衡。首先,我想知道按百分比计算有多少用户来自亚太地区。如果低于 10%,您最好的做法是等待,看看会发生什么。

您也没有说明您支持哪种类型的应用程序以及它对延迟的敏感程度。如果它是一个实时视频聊天应用程序,你会做出一个决定,如果它是一个最终一致的社交媒体应用程序,你会做出另一个决定。

综上所述,您已经找到了正确的选项集。

我最喜欢你的选项 2。我会将尽可能多的代理/网络服务尽可能靠近大多数用户。尽管某些流量始终必须返回您的 us-east-1 位置,但在区域内终止第一个连接将带来更好的用户体验。想想 SSL 往返。

我也会看看SPDY

我还会考虑从 us-east-1 移动到 us-west-2 以适应您在美国的存在。

VPN 隧道是一个好主意,设置起来并不难。

我会使用 OpenVPN设置冗余隧道