PHP / MySQL网站在多个地区快速加载的解决scheme

我在美国东部(弗吉尼亚州)地区的一个Amazon EC2实例上托pipe了基于ExpressionEngine的网站。 我使用Ubuntu。

该网站允许成员发布他们的内容,并显示给其他成员和未login的用户。

目标:我需要开始在全球范围内服务于同一个网站,同样快到香港,纽约和洛杉矶。

我考虑了两个解决scheme

1.为三个区域设置三个独立的EC2实例:弗吉尼亚州,俄勒冈州和新加坡。 使用Amazon Rot53地理位置根据浏览器的IP地址将stream量定向到实例。

临:该网站将加载该地区的快速。

Contra:这些将基本上是三个独立的网站。 除非我错了?

  1. 在距离所有三个位置(Ireliand)相同的区域设置一个实例,并将服务器提升到可用的最高性能。

亲:这将是所有地区的同一网站。

Contra:使其足够快,花费很多。

我的挑战:

a)我不知道如何在多个Ubuntu实例之间​​实时同步服务器设置,数据库和内容。 如果有知识的人可以向我解释如何做到这一点,我将不胜感激。

b)我不完全熟悉所有Amazon AWS资源。 AWS是否有一个内置的方法,使我能够在所有三个选定的位置同样快速地为全球范围内的单个基于PHP / MySQL的会员网站提供服务?

皮肤有很多种皮肤的方法,但基本上你需要在不同的地理位置复制你的网站。

这里有几个可能适合的选项,假设你的应用程序被阅读得很重(大多数网站都是这样)。 我不熟悉expression式引擎,因此我不确定这些架构在您的情况下实现有多困难。

选项1:跨区域只读副本

  • 在每个地区都有一台EC2应用程序服务器
  • 在每个地区都有一个只读副本数据库
  • 只写入您的主区域数据库
  • 如果您必须处理file upload,最好将这些文件存储在S3中,并让CloudFront将其caching在不同的地区

选项2:caching代理

如果你的内容几乎是完全静态的,你可以在每个地区有一个caching代理。 如果您不需要高级caching规则,则CloudFront是非常简单的解决scheme,否则您可以使用含有清漆的EC2实例。

选项3:数据库caching

数据库是在您的scheme中分发的最困难的元素,因此可以将其保留在单个区域(并将其他区域连接到主区域中的数据库),然后在应用程序中使用数据caching以最大限度地减less延迟。 如果您的应用程序支持memcache,那么ElastiCache可能是一个选项。