只读副本

只读副本

Wordpress 网站目前托管在美国,我们的目标受众有 40% 都在美国。其余访客来自中东、澳大利亚、俄罗斯、中国、新加坡、英国、瑞士、哈萨克斯坦……世界各地。

尽管所有缓存都已到位(不是 CDN),它在亚洲/大洋洲仍然难以加载,在欧洲也存在速度问题。

我可以简单地设置多个服务器并创建指向不同地区的不同服务器的多个 A 记录,并假设来自澳大利亚的访问者将由澳大利亚服务器提供服务吗?

有小费吗?

答案1

正如您所看到的,地理分布 WordPress 的问题都围绕着 MySQL 数据库。

基本上有两种方法可以实现这一目标:

只读副本

在这种架构中,您将在多个地理位置使用 WordPress 运行 LAMP 前端,每个地理位置都有主 MySQL 数据库的只读副本(从属)。您需要使用类似MySQL 代理将写操作直接送回主服务器,因为 WordPress 本身不支持使用不同的数据库连接进行读取和写入。

这种设置的最大问题是,如果您的主服务器出现故障,您将无法进行更改(例如,没有新帖子或评论)。因此,主服务器可能应该进行集群化或以其他方式保护(例如,使用 Amazon RDS Multi-AZ)。由于 LAMP 前端和远程 MySQL 主服务器之间的网络延迟,数据库写入也会略有延迟。

多主控

在这种架构中,你可以在多个地理位置使用 WordPress 运行 LAMP 前端,每个地理位置都有一个多主复制数据库,使用类似MariaDB Galera或者等效的 MySQL 解决方案(如果您能找到的话)。如果您选择这条路线,您需要至少有三个主服务器。

由于没有单点故障,所以即使一个主服务器发生故障也无关紧要(只要它们不会全部同时发生故障;这种情况需要人工干预才能恢复)。

这样做的问题是写入需要更长的时间,因为它们必须复制到所有多个主服务器。因此,人们在执行任何写入数据库的操作(例如评论或撰写新帖子)时可能会注意到几秒钟的延迟。实际上,这种延迟并不那么重要,因为用户在这些情况下提交信息时已经预料到了延迟。


如果您要部署到三个或更多地理位置,我建议您继续努力实现多主服务器。如果您只有两个位置,那么现在可以使用只读副本和代理。

答案2

由于这个问题已被标记为 amazon-web-services,我假设您的 Wordpress 网站正在 Amazon AWS EC2 实例上运行。如果是这样,您可以使用 Amazon 的 Route53 产品来提供地理 DNS 记录。您可以找到一个深入的教程这里。还有其他支持地理 DNS 记录的 DNS 提供商,例如动态但请注意,这是一项高级功能,您需要付费才能使用。

答案3

我可以简单地设置多个服务器并创建指向不同地区的不同服务器的多个 A 记录,并假设来自澳大利亚的访问者将由澳大利亚服务器提供服务吗?

不,不可能。在这种情况下,它会像循环一样。在我看来,在你的情况下,CDN 是最好的选择。

相关内容