我正在搜索有关 Web 服务器容量的信息,即它如何处理大量服务器请求、http 请求、甚至数据库查询或任何其他名称。我知道服务器上的 Web 流量可以用 RPS(每秒请求数)来衡量,例如 FB(Facebook)拥有一个高可扩展数据中心,每秒可以处理数亿个请求。根据以下文章,了解服务器的典型负载。 https://wrongsideofmemphis.wordpress.com/2013/10/21/requests-per-second-a-reference/
假设普通服务器可以处理 2000 RPS。所以我想知道的是,如果流量请求超出限制,假设有 3000 RPS 进入服务器。服务器会自动崩溃吗?或者它不会崩溃,但超额请求只会在第二个时钟的下一个滴答声中得到处理?
谢谢...
答案1
在完美的世界里,用于基本静态内容 Web 服务器
如果 Web 服务器在操作系统和硬件的限制范围内正确配置和调整,那么一切就都正常。不会出现崩溃、缓慢、重启等情况……传入连接将挂起,因为服务器不会试图承担超出其能力范围的任务。它们最终将被处理或超时,具体取决于经过了多长时间。
对于任何超载服务器,甚至是复杂的 Web 应用程序服务,这都是最佳情况。不幸的是,由于所有可能的复杂性,当发生不可预见的流量/流量模式/任何事情时,系统可能会崩溃、变慢等。但希望这些服务可以提前配置/调整,以帮助防止这种情况发生。
你的问题太宽泛,无法给出进一步的回答
答案2
服务器将变慢,甚至可能达到无法管理的程度,这取决于哪个设备是瓶颈。
思考这个问题的最佳概念模型是将计算机视为一系列由队列(或缓冲区)支持的处理单元(又称服务器或中心)。事务通过一个队列到达计算机,经过处理后再发送到另一个队列。
对于 Web 服务器,“请求”将通过网络接口到达并位于网络接口缓冲区中。然后,NIC 将对其进行处理,并将其发送到 CPU 进行进一步处理。此时,它将被传递给应用程序,这意味着更多的 CPU 处理(即直接返回到 CPU 队列),然后可能需要磁盘访问(转到磁盘队列,由磁盘处理),返回到 CPU,最后返回到 NIC。
每个处理单元每秒可以处理的工作量由处理每笔交易的平均时间(以秒为单位)决定(服务时间)。因此,如果 CPU 平均需要 10 毫秒来处理一个 Web 请求,那么 CPU 可以处理 100 RPM(1000 毫秒/10 毫秒)。如果超过 100 RPM 到达 CPU,那么队列就会开始增长,并且会一直增长,直到 TPS 降回 100 以下。
处理每个请求的实际时间(响应时间)由以下公式给出:服务时间 + 队列等待时间。
当没有流量且服务器完全空闲时,请求将直接通过而无需在任何队列中等待,因此响应时间 = 服务时间。
在您的问题中,如果流量为容量的 150%,那么队列将不断增长,直到最终填满。所有处理队列都有限制,要么由机箱中的 RAM 数量决定,要么由 NIC 中的硬件队列决定。此时,响应时间将取决于队列的最大长度 - 非常长的队列意味着非常长的等待时间。如果队列长度增长到缓冲区无法处理的长度,那么任何传入的事务都将被丢弃并需要重新发送。
如果您此时尝试登录服务器,那么您的登录数据包也可能会丢失。这会导致尝试访问服务器的速度严重减慢。如果您需要建立 RDP 连接,那么您会发现速度非常慢,甚至可能无法使用。
服务器本身不会崩溃,但如果 RAM 被传入请求占用,则内存不足管理器(Linux 上的 OOM Killer)将开始终止应用程序。这可能会使服务器看起来像是崩溃了。Apache 在这些情况下通常会使用大量内存,因为每个传入请求都使用单独的进程,具有自己的内存需求。