豆瓣的 Web 服务器

豆瓣最近发布新功能有些”疯狂”,所以服务器也有新的部署。看到阿北同学在豆瓣广播里说:

豆瓣的第二台应用服务器终于投入了使用。Hongqn 忙了一晚上就完成了部署。第一台服务器支撑到 500 万动态PV/天,服务 On Demand 即时分布式部署......

500 万 PV , 还是动态 PV, 是个很惊人的数字。因为,如果都能达到一台机器支撑 500 万,那么国内稍有点规模的网站(就说动态 PV 上亿的吧),只需要 20 台 Web 服务器就够了。事实上,即使比较强调技术的网站怕也要上百台 Web 服务器的规模。

我们知道豆瓣用 Lighttpd 做 Web 服务器。 从侦测到的数据看,目前线上有两个版本。

$ curl -I http://www.douban.com
HTTP/1.1 200 OK
.....(无关内容略)
Server: lighttpd/1.4.15

另外一个版本:

$ curl -I http://www.douban.com/people/ahbei/
HTTP/1.1 200 OK
.....(无关内容略)
Server: lighttpd/1.4.18

其实豆瓣服务器还有个更为惊人的性能数字。从这个 Powered by Lighttpd 的列表来看,豆瓣在一台 Gentoo 服务器上的记录是 1200 万/天的点击量。这应该是动、静态页面混合情况下的吧。

有同事对这个数据有些好奇,问我到底豆瓣是用啥做的服务器,其实这个问题我也问过阿北,他们就是自己攒的 PC 服务器,然后把性能发挥到极致。阿北也表示过,即使现在豆瓣流量激增个十倍啥的性能也不会是问题。这也是从起始就考虑扩展性的收益吧。

这里这位老兄用 七个 Mongrels 实例(也是一台Server)跑了 55 万 PV (thanks Robin 纠正) 就蛮自豪的,所以豆瓣的一台跑了”500 万动态 PV” 的确非常惊人。

Updated 2008-1-17 0:57:09

阿北留言了。主要是上面的有的数据还是旧的:

Lighty 网站上的数字很久没有去更新了。现在豆瓣的web服务器(lighttpd)每天估计2500万 Hits, 高峰时间大约1000 req/s (这里说的是主要输出HTML/CSS/JS和小图片的一台前端。大图片有另外的web服务器)。
我在广播里说500万PV/天的是应用服务器,就是lighty和mysql之间跑python的那台。现在豆瓣大多数PV来自注册用户,每个页面都需要几到十几种类的动态数据。
现在的服务器只是单片双核的opteron。换4核的话,应该能到一台1000万PV/ 天。

友情提醒,留言很精彩,敬请查看。不过在这个 Blog 上留言的确用户体验很糟糕(我也很烦),相信本周末能得到解决。

EOF


36 thoughts on “豆瓣的 Web 服务器

  1. s5s5

    一秒钟就60次,高峰期*5,也就300次,而且还是还是web服务器,豆瓣的逻辑也不是很复杂,很一般的机器嘛……
    ^_____^!!!

    Reply
  2. robin

    mongrel通常是以cluster方式部署的,类似于fastcgi中proc数.那篇文章应该是指7个mongrel instances, app server只是一台.”The domain is hosted at LayeredTech on a dedicated two-server (DB + Web/App) setup.”

    Reply
  3. jesea

    楼主看看这篇文章,了解一下豆瓣的服务器:
    http://blog.douban.com/douban/2007/12/17/105/
    感觉楼主的理解不太正确,否则真是这样,1台lighttpd跑500W PV,太NX了,著名的43 things 2005年的资料是30W左右动态PV,需要两台Apache WEB服务器。按这个推算,豆瓣真是神了!阿北所说的应用服务器,可能是指的运行memcache一类的服务器,而不是WEB服务器,这个 “500WPV”的动态PV和应用服务器挂上勾说的有点不伦不类。。。。压力大的是WEB服务器和数据库服务器~,应用服务器只要多点内存,多开几个类似 Mongrel,fastcgi之类的进程就行了~

    Reply
  4. 阿北

    lighty网站上的数字很久没有去更新了。现在豆瓣的web服务器(lighttpd)每天估计2500万 Hits, 高峰时间大约1000 req/s (这里说的是主要输出HTML/CSS/JS和小图片的一台前端。大图片有另外的web服务器)。。
    我在广播里说500万PV/天的是应用服务器,就是lighty和mysql之间跑python的那台。现在豆瓣大多数PV来自注册用户,每个页面都需要几到十几种类的动态数据。
    现在的服务器只是单片双核的opteron。换4核的话,应该能到一台1000万PV/ 天。

    Reply
  5. volcano

    如果内容都被缓存的话,支持每秒300个请求还是不成问题的。临时查表什么的,支持50个请求就不错了。

    Reply
  6. Cherife

    还有一个版本,lighttpd/1.5.0。
    为什么我这里看http://www.douban.com/people/ 是1.4.15
    douban.net lighttpd/1.4.8
    lighttpd 跑静态不错。

    Reply
  7. Kedy

    500W,很NB了。如果有机会,Fenng兄愿意帮忙代为请教一下他们的部署情况吗?想请教一下douban的技术团队,我目前用两台机器流量可以做到100w+,lighttpd的性能是一方面,但这应该不是最优秀的地方。

    Reply
  8. yzx110

    总之,我觉得还是挺厉害的。
    我自己做应用,用php,中等复杂度的逻辑,每s才50个request,当然还有些优化的余地。
    光说量看不出差距,比比就知道了。

    Reply
  9. ShiningRay

    老实说
    ruby 的性能要比python低不少
    目前目前相对来说,ruby运算慢,虚拟机占内存多,加上rails这个框架也肥
    而且python还有twisted
    虽然貌似这篇文章和这二者无关

    Reply
  10. Qiangning Hong

    @jesea
    那篇blog说的是豆瓣所有的服务器,里面有这样一句话“梅里(Merry)和山姆(Sam)这两个霍比特人挑起了大梁,承担起所有用户的请求,向豆友们展现丰富多彩的页面”,merry就是lighttpd服务器,sam就是应用服务器,跑python。
    @fenng & @Cherife
    现在实际上是有三个版本的lighttpd在跑,HTML/CSS/JS/小图片这边会load balance到1.4.15或者1.4.18。大图片用的是1.5.0。

    Reply
  11. snow123

    python跑起来真够快的.
    自从你DIY了哪台服务器,就没有声音了。
    我还以为你用的是一台服务群组呢。原来是一台服务器。太强了。
    阿北,应该介绍一下这方面的经验。

    Reply
  12. 编程浪子

    看怎么算吧,如果前端服务器只是做为负载均衡器,请求处理都到后台机器的话,这一台前端服务器再撑更大的流量都不是问题。

    Reply
  13. bixuan

    我觉得大家都忽略一个问题:业务/程序的逻辑是否复杂?
    如果不复杂的逻辑,优化相对简单了!

    Reply
  14. DeadFire

    看来没有几个是专门做服务器的或者是这方面的技术高手,大家估计也就是管过个几台服务器的经验。

    Reply
  15. tan

    这个性能真的很好?我很怀疑,看看我的数据—-windows2k3跑自己写的cache server,html/css/js等静态内容是15kqps,没错,15000qps,2个千兆网口跑满,25MPV只要1666秒,不到半个小时搞定

    Reply
  16. 邹月明

    我靠,这就算快了? 这是太常规的访问量了吧? 日访问量500万PV,也就是说一秒钟57个PV,如果把静态内容加上,一个PV 加20,一秒也不过就是57*20=1140/秒请求, 这个请求量只要是服务器就能撑住, 呵呵. 这种数字,骗外行还可以, 骗内行就让人笑话了吧

    Reply
  17. 七夜

    其实想达到这种程度 也不难。
    AMD64, Opterons
    8G以上内存
    64位的linux kernel 2.6.x
    增大ipv4和file-max 等参数。就可以了。
    尽量最小化运行。
    应用程序不要太烂。尽量不调用数据库。做好缓存
    很轻松的

    Reply
  18. 老土匪

    我个人测试 iocp + 120线程
    2000 上限并发,可以轻松做到 2.5 pv/ 5分钟
    客户端cpu 占用 不到5%. 内存10m.
    服务器 centos 4.6 测算下来 720w/day
    apache
    所以单纯的说这个没有什么意义。

    Reply
  19. hmy

    hmy@luna:~$date
    2008年 10月 15日 星期三 16:06:15 CST
    hmy@luna:~$curl -I http://www.tudou.com
    HTTP/1.1 200 OK
    Date: Wed, 15 Oct 2008 08:06:20 GMT
    Server: Apache
    Last-Modified: Wed, 15 Oct 2008 07:56:20 GMT
    Accept-Ranges: bytes
    Content-Length: 62226
    Cache-Control: max-age=420
    Expires: Wed, 15 Oct 2008 08:13:20 GMT
    Vary: Accept-Encoding
    Content-Type: text/html
    现在好像换成apache和iis了

    Reply
  20. redhat

    一看时间是2008年写的文章!有没有比nginx还好的web程序呢?http://www.fovweb.com/web/llmp.html
    [root@www ~]# curl -I http://www.douban.com/
    HTTP/1.1 200 OK
    Server: nginx
    Content-Type: text/html; charset=utf-8
    Connection: keep-alive
    Keep-Alive: timeout=20
    Content-Length: 83215
    Expires: Sun, 1 Jan 2006 01:00:00 GMT
    Pragma: no-cache
    Cache-Control: must-revalidate, no-cache, private
    P3P: CP=”IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”
    Set-Cookie: bid=”zkwP3j+o7r0″; path=/; domain=.douban.com; expires=Thu, 01-Jan-2012 00:00:00 GMT
    Set-Cookie: ll=”None”; path=/; domain=.douban.com; expires=Thu, 01-Jan-2012 00:00:00 GMT
    Date: Sat, 12 Mar 2011 05:04:44 GMT

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *