我想让两个相同的网站共享一个数据库。一台服务器在亚洲,托管一个网站和数据库。另一台服务器在美国,通过远程数据库托管同一个网站。但是,美国的网站响应非常慢,但将数据库移至本地服务器(美国服务器)后,网站响应很快。如何加快美国服务器和亚洲数据库之间的连接速度?
我正在使用Centos7+Nginx+MySQL。
答案1
如何加快美国服务器和亚洲数据库之间的连接速度?
你可能做不到。美国和亚洲之间的距离很长,而且存在延迟。简而言之:光速是有限的。
您可能应该研究查询远程数据库的替代方法,例如在多个位置缓存资产、使用 CDN 或使用数据库复制方案,以便您可以拥有数据的本地副本。
答案2
您的 Web 应用程序是否会进行多个单独的数据库查询?一个查询是否依赖于前一个查询,或者是否存在可以并行运行以重叠其延迟的独立查询?
如果是后者,请确保这在您使用的编程语言中确实发生,而不是不必要地序列化您的查询。
如果这还不够或者不可能,您将需要以某种方式减少 Web 服务器和数据库之间的往返延迟,要么通过复制数据库以便您可以拥有本地副本,要么缓存一些不经常更改的“热”部分,或者其他各种事情,例如缓存 Web 服务器的最终输出或 CDN 可以做的其他事情(参见 vidarlo 的回答)。
答案3
你无法提高光速。{需要引用}
您可能需要研究 MySQL 提供的任何复制功能,而不是跨洲查询。您需要一个位于亚洲的网络服务器和一个数据库服务器,并在每个位置(美国、欧盟、非洲、中东等)进行复制。当网络服务器写入时,本地数据库会立即更新,然后 MySQL 会将该更新内部推送到远程数据库服务器。
优点:
- 用户的会话可以从一个站点切换到另一个站点,并且他们的数据库记录将保持一致。
- 您只需备份一个数据库服务器即可获得所有内容。
- 可以通过主站点来增加冗余和容错能力,如果主站点发生故障,则故障转移到远程站点。
- 可以在每个站点水平扩展 Web 服务器,以便进行更新/重启等停机维护
- 您甚至可以在每个站点本地拥有一个备份数据库服务器,同样可以实现冗余,而无需进行故障转移
缺点:
- 增加复杂性
- 更多资源的成本增加
从根本上来说,这是一个基础设施设计问题,而不是网络服务器的问题。
答案4
距离不会使数据库变慢,只会增加延迟。
缓解延迟的措施包括
- 并行运行多个查询
- 减少所需的查询数量
- 本地缓存结果
- 在本地保存数据库的只读副本
一些 SQL 包装层喜欢进行大量额外查询来确定数据库结构,您可能必须重新设计以使用本机 SQL。
尽可能使用连接而不是查询循环。如果需要,可以进行多行更新和插入,但我不知道在 mysql 中使用最佳语法。