故事

由 Lighttpd 驱动

2007年4月4日

lighttpd 被许多知名网站使用。典型场景是使用 lighttpd 作为卸载服务器来分发静态内容,并将复杂工作留给其他服务器处理。

一个例子是 YouTube。他们有一组服务器,专门用于分发你在观看视频之前看到的缩略图。

$ curl -I http://sjl-static16.sjl.youtube.com/vi/TgF_eRkfqEY/2.jpg
HTTP/1.1 200 OK
Content-Type: image/jpeg
ETag: "983726135810477085"
Accept-Ranges: bytes
Last-Modified: Fri, 03 Feb 2006 04:32:53 GMT
Content-Length: 3495
Date: Wed, 04 Apr 2007 06:49:51 GMT
Server: lighttpd-aio/1.4.11.8

正如你在命名方案中看到的,还有一些类似的服务器在分发内容。

在维基百科上,他们至少运行着 2 台使用 lighttpd 的服务器

  • upload.wikimedia.org
  • download.wikimedia.org

其中,当数据库的 SQL 备份文件倾向于增长超过神奇的 4GB 边界时,download 用于分发这些文件,而 `upload` 则用于分发所有图片并在必要时调整它们的大小。

$ curl -I https://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Mandel_zoom_00_mandelbrot_set.jpg/250px-Mandel_zoom_00_mandelbrot_set.jpg
HTTP/1.0 200 OK
Content-Type: image/jpeg
ETag: "6460328581220324712"
Accept-Ranges: bytes
Last-Modified: Mon, 04 Dec 2006 22:24:53 GMT
Content-Length: 5973
Date: Wed, 14 Mar 2007 11:16:19 GMT
Server: lighttpd/1.4.13
X-Cache: HIT from sq13.wikimedia.org
X-Cache-Lookup: HIT from sq13.wikimedia.org:3128
X-Cache: HIT from knsq12.knams.wikimedia.org
X-Cache-Lookup: HIT from knsq12.knams.wikimedia.org:3128
Age: 6265
X-Cache: HIT from knsq10.knams.wikimedia.org
X-Cache-Lookup: HIT from knsq10.knams.wikimedia.org:80
Via: 1.0 sq13.wikimedia.org:3128 (squid/2.6.STABLE12), 1.0 knsq12.knams.wikimedia.org:3128 (squid/2.6.STABLE12), 1.0 knsq10.knams.wikimedia.org:80 (squid/2.6.STABLE12)
Connection: close

lighttpd

2007年2月2日

安全性、速度、合规性和灵活性——所有这些都描述了 LightTPD,它正在迅速重新定义网络服务器的效率;因为它专为高性能环境而设计和优化。与其他网络服务器相比,LightTPD 具有更小的内存占用、有效的 CPU 负载管理以及先进的功能集(FastCGI、CGI、身份验证、输出压缩、URL 重写等等),是解决所有面临负载问题的服务器的完美方案。最重要的是,它是根据修订的 BSD 许可证授权的开源软件。

轻量级占用 + httpd = LightTPD (发音为 lighty)

Web 2.0

lighttpd 驱动了多个流行的 Web 2.0 网站,如 YouTube维基百科meebo。其高速 I/O 基础设施使它们在相同硬件条件下,比使用其他网络服务器能够实现数倍的扩展性

这个快速的网络服务器及其开发团队在设计时就考虑到了未来网络的需求。

其事件驱动架构针对大量并行连接(keep-alive)进行了优化,这对于高性能 AJAX 应用程序至关重要。

服务器

2007年1月30日

回溯到 2003 年 2 月,我(Jan)正在完成我的论文。就我而言,写论文是你所能做的最令人沮丧的工作。

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

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

对我来说,那是 Dan Kegel 撰写的c10k 问题的一个概念验证。如何在单台服务器上并行处理 10000 个连接。我以前曾见过 Apache 服务器因内存不足导致系统崩溃,即使只有 100 个并行连接也陷入了交换区。

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

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

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

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

添加了不同的优化措施:新的事件处理程序,如 epoll 和 kqueue,以及新的网络后端,如 sendfile()。

所以,我现在回顾 2.5 年的开发历程,看到每月安装数量都在增长。https://news.netcraft.com/ 每月都在告诉我们,这个数字仍在持续增长,我也会向邮件列表发送邮件,让每个人都知道并分享这个小小的概念验证项目发展成为一个运行良好的网络服务器的喜悦。