Performance web服务器的理论性能限制是什么?

Performance web服务器的理论性能限制是什么?,performance,c10k,Performance,C10k,在当前部署的web服务器中,其性能的典型限制是什么 我相信一个有意义的答案应该是每秒100、1000、10000、100000或1000000个请求中的一个,但今天这是真的吗?5年前是这样吗?5年后我们会期望什么?(即,带宽、磁盘性能、CPU性能等方面的趋势如何影响答案) 如果是重要的,那么应该考虑HTTP over TCP是访问协议这一事实。操作系统、服务器语言和文件系统效果应该被认为是最好的 假设磁盘包含许多静态服务的小型唯一文件。我打算消除内存缓存的影响,CPU时间主要用于收集网络/协议信

在当前部署的web服务器中,其性能的典型限制是什么

我相信一个有意义的答案应该是每秒100、1000、10000、100000或1000000个请求中的一个,但今天这是真的吗?5年前是这样吗?5年后我们会期望什么?(即,带宽、磁盘性能、CPU性能等方面的趋势如何影响答案)

如果是重要的,那么应该考虑HTTP over TCP是访问协议这一事实。操作系统、服务器语言和文件系统效果应该被认为是最好的

假设磁盘包含许多静态服务的小型唯一文件。我打算消除内存缓存的影响,CPU时间主要用于收集网络/协议信息。这些假设旨在使答案偏向于“最坏情况”估计,即请求需要一些带宽、一些cpu时间和磁盘访问


我只是在寻找一些精确到一个数量级左右的东西。

我认为这里有太多的变量来回答你的问题

什么处理器,什么速度,什么缓存,什么芯片组,什么磁盘接口,什么主轴速度,什么网卡,如何配置,这个列表是巨大的。我认为你需要从另一个角度来处理这个问题

“这就是我想做和实现的,我需要做什么?”

阅读。您也可以阅读StackOverflow。C10K代表10000个同步客户端


长话短说——原则上,限制既不是带宽,也不是CPU。这是并发性。

这将取决于您的CPU核心是什么 你的磁盘速度是多少 什么是“胖”中型托管公司管道。 什么是web服务器

这个问题太笼统了


部署您的服务器—使用类似的工具测试它,并查看您的进展情况。

操作系统、服务器语言和文件系统效果是这里的变量。如果您将它们取出,那么您将得到一个无开销的TCP套接字


在这一点上,这实际上不是服务器性能的问题,而是网络性能的问题。如果使用无开销的TCP套接字,您将达到的限制很可能是防火墙或网络交换机,同时可以处理多少个连接。

我认为这实际上取决于您所提供的服务

如果您正在为动态呈现html的web应用程序提供服务,那么CPU是消耗最多的

如果您多次提供相对较少数量的静态项,您可能会遇到带宽问题(因为静态文件本身可能会在内存中找到自己)


如果您正在提供大量静态项目,您可能首先遇到磁盘限制(查找和读取文件)

在任何使用数据库的web应用程序中,您还需要打开一个全新的优化范围

索引、查询优化等

对于静态文件,应用程序是否将其缓存在内存中


etc,etc,etc

如果无法在内存中缓存文件,则磁盘查找时间可能是限制因素,并将性能限制在每秒1000个请求以下。使用固态磁盘时,这可能会有所改善。

六年前,我看到一个8-proc Windows Server 2003机箱每秒可处理100000个静态内容请求。这个盒子有8个千兆以太网卡,每个网卡位于一个单独的子网中。限制因素是网络带宽。你不可能在互联网上提供那么多的内容,即使有一个真正巨大的管道

实际上,对于纯静态内容,即使是一个普通的盒子也会使网络连接饱和

对于动态内容,没有简单的答案。可能是CPU利用率、磁盘I/O、后端数据库延迟、工作线程不足、上下文切换过多等等

您必须测量应用程序以找出瓶颈所在。它可能在框架中,也可能在应用程序逻辑中。它可能会随着工作负载的变化而变化

每秒100、1000、10000、100000或1000000个请求,但今天哪一个是真的

这项测试是在一台普通的i3笔记本电脑上进行的,但它审查了Varnish、ATS(Apache流量服务器)、Nginx、Lighttpd等

有趣的一点是,使用高端8核服务器对大多数服务器(Apache、Cherokee、Litespeed、Lighttpd、Nginx、G-WAN)几乎没有什么帮助:

由于测试是在localhost上进行的,以避免网络成为瓶颈,因此问题出在内核中,而内核无法扩展—除非您这样做

因此,为了回答您的问题,进度裕度取决于服务器处理IO的方式。
他们必须使用更好的数据结构(无需等待)。

更重要的是,浏览器速度和缓存响应与其他任何东西一样重要。通常内存首先耗尽。然后修复应用程序。然后CPU就耗尽了。然后修复应用程序。然后网络带宽耗尽。然后修复应用程序。那个么内存就耗尽了……主要为静态文件服务的线程服务器不会耗尽RAM。这个问题并没有意义。RAM缓存、TCP卸载等都会达到理论性能限制。加入人为限制会给您带来同样人为的性能限制。在实践中,每个人都至少使用一些RAM缓存,哪怕只是在磁盘本身。当我说消除操作系统、语言和文件系统的影响时,我的意思是使它们正常化,或者假设每个都是“最佳可用的”。我假设C10K意味着“一万个客户机”,这在kegel页面中并不清楚。我最初的想法是i18n/L10nWell模式,Kegel页面的第一行:“现在是web服务器同时处理一万个客户端的时候了,你不这么认为吗?”。