首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨多个服务扩展web应用程序

跨多个服务扩展web应用程序
EN

Server Fault用户
提问于 2014-02-11 22:16:02
回答 2查看 530关注 0票数 1

我们正在开发我们的web应用程序,并且一直致力于减少我们的负载时间。当我们开始开发应用程序时,我们与一家知名的托管提供商签约,该公司在云上提供“专用解决方案”。因此,我们为我们的web应用程序提供了一台专用服务器,为我们的数据库提供了一台专用服务器。这两台服务器都是使用相同数量的RAM、相同的CPU和SSD驱动器来设置的。即使在我们的基础设施上投入时间和资金,我们也注意到了8-10秒的负载次数。

另一家托管公司告诉我们,我们应该缩小规模,把所有东西放到一台服务器上(而不是把它分开)。他们提到,将服务器分开将导致更高的负载时间,因为网络延迟,并指出PHP将更快地通过套接字与SQL通信,而不是通过网络。我知道这是真的,但我没想到我们会得到这样的结果。在将所有内容移动到原来的应用服务器之后,我们的负载时间从8-10下降到3-4秒!

问题是,我们现在正在研究一个新的托管提供商,并建议我们利用一个集群,其中包含负载均衡器、数据库服务器、应用服务器和从那里开始的扩展。需要关注的是,如果我们再次分离应用程序和数据库服务器,我们将回到起点。

从我所读到的一切来看,似乎总是建议将这些服务器分开,而不是分组在一起。在正确设置时,这样做是否会提高性能,还是仅仅是为了长期的可伸缩性?

我很感谢你的帮助!

EN

回答 2

Server Fault用户

发布于 2014-02-11 22:45:15

你的问题很广泛,所以我只提几个方面:

  • 本地套接字I/O比TCP快,但对于大多数应用程序来说,与周转时间的所有其他部分(负载均衡器、PHP处理、DB查询处理、.)相比,这应该是微不足道的。
  • 拆分系统允许更好的缓存,例如DB服务器可以在RAM中保存更多的索引。
  • 可能是一个可伸缩性点:拆分系统更容易配置,例如,要部署新的软件版本或更新PHP,您只需添加一个新的应用程序服务器,测试它,最后删除旧的应用服务器。
  • 要调查您的问题:检查每个web请求打开了多少个DB连接。度量的一个解释是,应用程序使用许多SQL查询而没有持久连接,因此为每个DB访问打开一个新的TCP连接。
票数 2
EN

Server Fault用户

发布于 2014-02-11 22:59:30

我不知道您在做什么来获得8-10秒的加载时间(假设您将“加载时间”定义为“HTTP请求之间的时间,页面被构建并发送到浏览器之间的时间”)。

你不应该让你的CPU 100%的使用一个web服务器和一个数据库,即使你以某种方式管理它,把web服务器和数据库放在一个服务器上也于事无补。

此外,在同一硬件上移动两个服务器不会减轻DB服务器上的任何类型的重载。

所以这个问题几乎与

  • 很多非常小的SQL语句被单独发送到DB,因此即使本地网络上的小延迟也会累积(假设每页有10000条SQL语句,网络延迟为0.1m秒)。这将导致您的10秒加载时间)。
  • 存储在数据库中的巨大气泡,需要通过sql连接到达web服务器,这种连接通常比为文件传输而设计的协议慢,特别是通过网络传输。
  • 您的主机之间的网络连接在某种程度上受到人为限制。

也许这是我目前无法想象的另一件事,因为当你在更多的CPU上分发它时,一个典型的web应用程序会变得非常缓慢,只要这些CPU之间有一个快速的网络连接。

只要您不找出在不同主机上引起问题的原因/原因,您可能再次遇到相同的问题,或者您可能不会。

去年我遇到了第一个问题--我的一个客户和第三方签约为他们开发了一些软件。演示笔记本电脑上的一个典型操作大约需要4个小时才能完成。当我的客户将软件转移到预期的生产环境(大型应用程序服务器,大型数据库集群)时,同样的事情花费了16个多小时。通过筛选日志并进行网络跟踪,我们发现应用程序在dev系统上每秒钟进行大约15.000次选择,应用服务器和数据库之间的0.3ms延迟将这一延迟限制在每秒钟3000次以上。devs被告知要改变访问数据库的方式(对两个表进行连接,而不是对一个表进行选择,然后对每个结果进行一行选择),这导致整个操作所需时间不到30分钟。

关键是,你遇到的这种麻烦是不寻常的,可能与你的软件以一种不寻常的方式行为有关,你真的应该调查一下这里发生了什么,以及为什么2台机器的设置要慢得多。

分裂成2台机器通常会提高性能,因为您有更多的CPU来完成这项工作。它还增加了可维护性。您的数据库可能需要一个特殊的内核参数或补丁级别才能正常工作;您的web服务器可能有冲突的需求。而且,无论何时进行升级,都很容易升级这两个系统中的一个而不触及另一个系统。

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

https://serverfault.com/questions/574853

复制
相关文章

相似问题

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