我想要两个相同的网站共享一个数据库。一台服务器位于亚洲,承载着一个网站和数据库。另一台服务器在美国,通过远程数据库托管同一个网站。但是,美国的web响应非常慢,但是当将数据库移动到本地服务器(美国服务器)时,web响应很快。如何加快美国服务器与亚洲数据库的连接?
我正在使用Centos7+Nginx+MySQL。
发布于 2021-12-31 22:40:41
您的web应用程序是否进行多个单独的数据库查询?一个查询是依赖于前面的查询,还是存在独立的查询,它们都可以并行运行以重叠它们的延迟?
如果是后者,请确保在您使用的任何编程语言中都会发生这种情况,而不是不必要地序列化查询。
如果这还不够或者不可能,您将需要以某种方式减少web服务器和数据库之间的往返延迟,要么通过复制DB,使您可以拥有一个本地副本,缓存一些不经常更改的“热”部分,要么缓存web服务器的最终输出或CDN可以做的其他事情(参见vidarlo的答案)。
发布于 2022-01-01 12:14:15
数据库支持的网站的通常设计使用很少(或更多,如50或100)数据库查询,以便响应浏览器请求生成单个网页。
这些查询中的每一个都需要web服务器和数据库服务器之间的往返时间。这可以很快加起来。
相比之下,浏览器和网站之间的连接是在浏览器和服务器之间往返两次之后建立的,然后数据在连接允许的速度范围内被流水线化到浏览器上。
看到的区别?2用户服务器往返与多次(可能数十)服务器-服务器往返。服务器之间的连接可能会更快,但不会在很大程度上。
这就是为什么你的设置通常是毫无意义的。
那又能做些什么呢?
今天的用户体验首先被用户的连接属性所支配,并且几乎不依赖于web服务器的位置。
是的,有时一个主要的全球骨干网络中断了,中国和欧洲之间的连接变成了真正的痛苦,但是如果这种不幸的事件发生,你的网络服务器和数据库服务器之间的连接也会受到同样的影响。实际上,这比减缓web服务器和用户之间的连接更糟糕,参见上文。
有一些CDN技巧可以改善您的响应时间,即使在一个服务器上也是如此,看起来您在不同的位置有多个服务器。像Cloudflare或Akamai这样的主要CDN提供商拥有非常强大的工具。
发布于 2022-01-01 13:26:08
距离并不会使数据库变得更慢,它只会增加延迟。
延迟的缓解包括
一些SQL包装层,如进行大量额外查询来确定数据库结构,可能需要重新设计才能使用本机SQL。
在可能的情况下,使用联接而不是查询循环。如果需要,可以进行多行更新和插入,但我不知道在mysql中使用哪种最佳语法。
https://serverfault.com/questions/1088677
复制相似问题