我正在尝试在多区域方案中扩展我们的 Web 应用程序(PHP、MySQL、memcache)。目前,我们正在使用一个设置,其中有两个 EC2 实例,一个 ELB 和一个 RDS 实例,它们都位于美国东部(弗吉尼亚)区域。
我们希望在欧盟(爱尔兰)地区也拥有业务。这意味着至少有一个新的 EC2 实例(与其他实例相同,服务于相同的应用程序)。
我复制了所需的 AMI,设置了新实例,设置了相同的 ELB 配置(SSL 终止所需),并在 Route53 中配置了基于延迟的路由。并且它按建议的方式工作。
但是,来自欧盟的客户遇到了速度问题。这是因为欧盟 EC2 实例连接到美国的 RDS 实例。据我所知,亚马逊尚未启用 RDS 多区域复制。
您对如何在使用单个 RDS 实例时正确加快整个设置速度有什么建议吗?
另外,关于如何扩大规模,您有什么想法吗?理想情况下,我们出于各种原因希望继续使用 RDS 技术。不过,我愿意听取建议(我想下一个想法是托管我们自己的 MySQL 服务器)。
答案1
你应该仔细想想为什么你需要在美国和欧盟拥有相同的数据。毕竟这些都是不同的用户。
在多区域环境中运行要复杂得多,并且通常会由于美国和欧盟之间固有的延迟而降低性能。
即使您脱离 RDS 并尝试在区域之间复制数据(无论是异步还是同步),您都会遇到延迟问题,这会给您的用户带来糟糕的性能。
最简单的方法是在欧盟设置专用的 RDS 服务器,并且这些实例之间不共享任何内容。
答案2
由于延迟低,RDS 非常适合单区域部署,但当您开始扩展到不同区域时,情况就不同了。如果您想保留 RDS 实例,您可以在欧盟区域设置自己的 MySQL 服务器并进行复制。这样,速度就会更容易接受。
答案3
最近,AWS 朝着我之前在问题中提到的方向迈出了一步,宣布跨区域 RDS 只读副本。然而,这只是迈向真正的多区域设置的一小步。
答案4
改善延迟的一个可能的解决方案是使用 Amazon ElastiCache(其底层基本上是 Memcached)。
您必须在每个区域(美国东部标准时间 (US-EST) 和欧盟 (EU))创建一个 ElastiCache 节点,并让您的应用程序逻辑 (EC2) 尽可能使用缓存节点。如果您采用这种方式,您将必须重新构建您的应用程序 1) 了解要缓存的内容和时间 2) 从本地 ElastiCache 节点获取尽可能多的内容。