服务器

2007年1月30日

回到2003年2月,我(Jan)正在完成我的论文。写论文可以说是我做过的最令人沮丧的工作。

虽然我的主题很棒(“开发用于非汽车环境中监控和控制CAN总线系统的手持系统”),并且软硬件开发是一个真正的挑战,但我不得不撰写论文,其中记录了设计决策、准备工作等等。

对于开发者来说,这才是真正困难的部分:编写文档。尤其是当你必须完成论文的日期一天天临近时。为了激励自己,你需要一些分散注意力的事情。

对我来说,这是一个由Dan Kegel编写的c10k问题的概念验证。如何在单个服务器上并行处理10000个连接。我之前已经看到Apache仅仅处理100个并行连接就耗尽内存并进入交换区,从而导致系统崩溃。

最初几周,这仅仅是一个挑战,即如何编写快速、优化的代码。在变更日志中,你仍然可以看到我关于如何实现这一点的评论。尽可能多地缓存。如果‘Date:’头的时间戳一直相同,为什么要每秒重新生成1000次呢?

由于我自己的目的需要PHP支持,这是最早添加的功能之一。变更日志显示,我在其他工作完成后两周内就使其运行起来了。包括将负载从一个Web服务器分配到多个fastcgi后端进行负载均衡。

在某个时候我问自己:这只是一个概念验证。我们现在进展如何?我们与其他服务器相比如何?

第一个对手是thttpd,那个大型单线程Web服务器。特别是在大文件方面,我们比它性能高出2到5倍。接下来是boa和mathopd,两者都有问题且速度较慢。Zeus是第一个真正的挑战,他们证明了Zeus是一个很棒的Web服务器。如果你想在Web服务器上花钱(除了让我为你开发一些东西),那就是购买Zeus的许可。(不,我没有以任何方式从他们那里获得报酬)。

添加了不同的优化:新的事件处理器,如epoll和kqueue;新的网络后端,如sendfile()。

因此,我现在回顾2.5年的开发历程,看到安装数量每月都在增长。https://news.netcraft.com/每月都在告诉我们,这个数字仍在增加,我也会给邮件列表发送邮件,让每个人都知道并保持这种喜悦,因为这个小小的概念验证已经变成了一个运行良好的Web服务器。