首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >网站使用远程数据库响应非常慢

网站使用远程数据库响应非常慢
EN

Server Fault用户
提问于 2021-12-31 14:15:26
回答 4查看 3.7K关注 0票数 5

我想要两个相同的网站共享一个数据库。一台服务器位于亚洲,承载着一个网站和数据库。另一台服务器在美国,通过远程数据库托管同一个网站。但是,美国的web响应非常慢,但是当将数据库移动到本地服务器(美国服务器)时,web响应很快。如何加快美国服务器与亚洲数据库的连接?

我正在使用Centos7+Nginx+MySQL。

EN

回答 4

Server Fault用户

发布于 2021-12-31 22:40:41

您的web应用程序是否进行多个单独的数据库查询?一个查询是依赖于前面的查询,还是存在独立的查询,它们都可以并行运行以重叠它们的延迟?

如果是后者,请确保在您使用的任何编程语言中都会发生这种情况,而不是不必要地序列化查询。

如果这还不够或者不可能,您将需要以某种方式减少web服务器和数据库之间的往返延迟,要么通过复制DB,使您可以拥有一个本地副本,缓存一些不经常更改的“热”部分,要么缓存web服务器的最终输出或CDN可以做的其他事情(参见vidarlo的答案)。

票数 14
EN

Server Fault用户

发布于 2022-01-01 12:14:15

数据库支持的网站的通常设计使用很少(或更多,如50或100)数据库查询,以便响应浏览器请求生成单个网页。

这些查询中的每一个都需要web服务器和数据库服务器之间的往返时间。这可以很快加起来。

相比之下,浏览器和网站之间的连接是在浏览器和服务器之间往返两次之后建立的,然后数据在连接允许的速度范围内被流水线化到浏览器上。

看到的区别?2用户服务器往返与多次(可能数十)服务器-服务器往返。服务器之间的连接可能会更快,但不会在很大程度上。

这就是为什么你的设置通常是毫无意义的。

那又能做些什么呢?

  1. 使用靠近数据库的单个web服务器。为了改善用户体验,拥有地理分布的服务器的时代是很重要的,而不是全球性的电子商务或新闻中心。

今天的用户体验首先被用户的连接属性所支配,并且几乎不依赖于web服务器的位置。

是的,有时一个主要的全球骨干网络中断了,中国和欧洲之间的连接变成了真正的痛苦,但是如果这种不幸的事件发生,你的网络服务器和数据库服务器之间的连接也会受到同样的影响。实际上,这比减缓web服务器和用户之间的连接更糟糕,参见上文。

有一些CDN技巧可以改善您的响应时间,即使在一个服务器上也是如此,看起来您在不同的位置有多个服务器。像Cloudflare或Akamai这样的主要CDN提供商拥有非常强大的工具。

  1. 使用数据库复制,并维护两个web服务器附近的数据库。这可能需要对应用程序设计进行深入的重新思考,以及更广泛的技能集和/或更昂贵的DB许可证。
  2. 检查两端的数据库连接属性(db服务器和web服务器)。
  • 数据库服务器端的广泛日志记录、复杂身份验证和反向dns可能严重滞后于每个db查询的结果。
  • 在web服务器端使用持久的db连接可以减少db查询往返次数的2-5倍。
  1. 重新设计应用程序,以减少每页使用的db查询。另一方面,这可能会导致查询变得更复杂、更慢、更难维护。你的里程可能会不同。
票数 3
EN

Server Fault用户

发布于 2022-01-01 13:26:08

距离并不会使数据库变得更慢,它只会增加延迟。

延迟的缓解包括

  • 并行运行多个查询
  • 减少所需查询数量
  • 本地缓存结果
  • 在本地保存数据库的只读副本。

一些SQL包装层,如进行大量额外查询来确定数据库结构,可能需要重新设计才能使用本机SQL。

在可能的情况下,使用联接而不是查询循环。如果需要,可以进行多行更新和插入,但我不知道在mysql中使用哪种最佳语法。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1088677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档