`
robbin
  • 浏览: 4821424 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137061
社区版块
存档分类
最新评论

豆瓣的程序性能真的很惊人,但...

    博客分类:
  • Tech
阅读更多
http://www.dbanotes.net/arch/douban_web_server.html

在老冯同学的博客上看到的文章。里面介绍说豆瓣网站的情况如下:

一台Web服务器运行Lighttpd,每天处理2500万个request,峰值每秒处理1000个request;
一台应用服务器运行Python,每天处理500万PV;
数据库服务器运行MySQL,负载情况没有介绍。

我对比了一下JavaEye网站的服务器运行情况,我们是一台Web+应用服务器,一台数据库服务器,如下:

Web服务器运行Lighttpd,每天处理430万个request,峰值每秒处理150个request,平均每秒处理50个request;
Web服务器运行Ruby 1.8.6 + Rails 1.2.6,每天处理70万动态请求(去掉404,301状态的请求,只统计200的),如果算PV的话,去掉RSS订阅请求,AJAX请求,估计PV在60万左右;
数据库服务器运行MySQL,CPU负载不高,在5%-30%之间波动。

豆瓣的Lighttpd峰值每秒处理1000个request,到不让人觉得意外,因为Lighttpd本身就是设计能够并发处理上万个request的。但是豆瓣用单台服务器支撑500万动态请求,确实是很惊人的数据!看阿北介绍说,豆瓣的应用服务器是一台单颗双核AMD Opteron,JavaEye的Web服务器是两路老的单核的AMD Opteron,主频是2GHz,豆瓣的应用服务器是新的单颗双核AMD Opteron,主频不详。

目前JavaEye的Web服务器运行Lighttpd,Memcached,Email Server和Ruby的FastCGI,除了ruby之外,其他应用消耗的CPU资源都极少,Web服务器在峰值期间的CPU负载在35-50%之间波动,非峰值期间回落到20-30%。假设应用程序不做针对性优化,我估计这台服务器可以支撑到100万到120万PV,但要更高就很困难了。不过JavaEye要达到这样的访问量,估计还得一年时间。到那个时候再想办法也不迟。不过设想到这样的程度,我到宁愿加一台服务器立马解决问题,而不是投入人力去费时耗力的优化程序代码。

豆瓣使用的Python性能要比Ruby好很多,但即便如此,在同样硬件条件下,用Python支撑到500万以上,也是非常困难的,可以想像的是大量运用了页面的局部缓存,以及对程序和框架的优化达到了极致,这一点,不得不佩服豆瓣的技术人员的性能优化水准和所下的功夫。

不过,对于豆瓣只用一台应用服务器支撑500万PV,我觉得没有必要。豆瓣有2000万人民币的投资,增加一台服务器一次性开支不超过1.5万,每年托管费多支出0.5万而已,九牛一毛。但在今天一个资深程序员月薪都要超过1.5万的情况下,为了节省这点钱而需要对应用程序进行深度优化而投入的人力成本,远远超过2万元。豆瓣新版本刚上线的一段时间之内,网站访问速度非常缓慢,最近速度慢慢的提升上来了,似乎也从侧面证明了这一点。干吗不多部署几台应用服务器,让用户从一开始就享受良好的速度体验呢?而用一台应用服务器支撑,等着优化程序代码来提升访问速度呢?CSDN网站每天有600多万访问量,比豆瓣的访问量略高一些,CSDN有30多台服务器,其实服务器少不见得就有多好,服务器多也不见得就是什么坏事。用投入硬件的方式可以解决的性能问题,总是会比软件优化方式来得成本低。

43
9
分享到:
评论
6 楼 yzx110 2008-01-18  
引用

我觉得很难。豆瓣每个登陆用户看到页面都不是完全一样的,都有自己定制的内容,这部分做页面局部缓存是很难的,即使公共页面,因为包含投票等动态改变的内容,页面静态化也很难。在这种情况下,Python要每秒处理掉60个请求(其中还包含访问数据库,封装查询结果,运算用户定制内容,render页面等等操作),在单颗双核CPU上面,已经是很惊人的性能了。我自问在合理的成本范围内做不到这一点。


可能吧,我自己做的动态页面,
逻辑是加载当前用户数据,加载一个文章列表,检查是否有新文章,检查用户是否推荐文章,查看文章的每篇推荐数这样一个逻辑,

能做到每妙200个左右request,这个页面后3个逻辑是不带缓存的。

不清楚douban的程序逻辑,不过除了缓存外我也想不出其他别的办法性能达到这样的程度了。
5 楼 jasongreen 2008-01-18  
Python 的性能比 Ruby好,Ruby语法的灵活性也增加了解释器的负荷
4 楼 lovekikio 2008-01-18  
关注咯。。。。
3 楼 robbin 2008-01-18  
引用
一个权衡的问题

一天500pv,也就是60req/s,从一开始设计就考虑性能优化我想还是可以达到的,特别是针对douban这样难得并不如何复杂的页面。

增加硬件,优化应用应该双管齐下,哪方过了都不是好事


我觉得很难。豆瓣每个登陆用户看到页面都不是完全一样的,都有自己定制的内容,这部分做页面局部缓存是很难的,即使公共页面,因为包含投票等动态改变的内容,页面静态化也很难。在这种情况下,Python要每秒处理掉60个请求(其中还包含访问数据库,封装查询结果,运算用户定制内容,render页面等等操作),在单颗双核CPU上面,已经是很惊人的性能了。我自问在合理的成本范围内做不到这一点。
2 楼 yzx110 2008-01-18  
一个权衡的问题

一天500pv,也就是60req/s,从一开始设计就考虑性能优化我想还是可以达到的,特别是针对douban这样难得并不如何复杂的页面。

增加硬件,优化应用应该双管齐下,哪方过了都不是好事
1 楼 Fenng 2008-01-17  
嘿,其实我也觉得豆瓣稍稍有点"抠门"

服务器性能已经压榨的挺好了,应该在硬件上多一点点投入。用户也能得到更好的使用体验--我在浏览的时候就经常遇到空白页

相关推荐

    微信小程序——豆瓣图书(截图+源码).zip

    微信小程序——豆瓣图书(截图+源码).zip 微信小程序——豆瓣图书(截图+源码).zip 微信小程序——豆瓣图书(截图+源码).zip 微信小程序——豆瓣图书(截图+源码).zip 微信小程序——豆瓣图书(截图+源码).zip ...

    微信小程序——豆瓣电影(截图+源码).zip

    微信小程序——豆瓣电影(截图+源码).zip 微信小程序——豆瓣电影(截图+源码).zip 微信小程序——豆瓣电影(截图+源码).zip 微信小程序——豆瓣电影(截图+源码).zip 微信小程序——豆瓣电影(截图+源码).zip ...

    微信小程序源码-新豆瓣同城分类信息小程序.zip

    微信小程序源码-新豆瓣同城分类信息小程序.zip微信小程序源码-新豆瓣同城分类信息小程序.zip微信小程序源码-新豆瓣同城分类信息小程序.zip微信小程序源码-新豆瓣同城分类信息小程序.zip微信小程序源码-新豆瓣同城...

    微信小程序Demo-豆瓣电影-附完整源代码.rar

    **微信小程序Demo-豆瓣电影:打造你的专属电影推荐平台** **一、资源简介** 本资源为一款基于微信小程序的豆瓣电影Demo,提供了完整的源代码。通过该Demo,开发者可以快速搭建一个类似豆瓣电影的推荐平台,实现...

    基于python与机器学习的豆瓣电影数据分析源码+报告.zip

    基于python与机器学习的豆瓣电影数据分析源码+报告.zip 基于python与机器学习的豆瓣电影数据分析源码+报告.zip 基于python与机器学习的豆瓣电影数据分析源码+报告.zip 基于python与机器学习的豆瓣电影数据分析源码+...

    微信小程序 豆瓣电影 (源码).rar

    通过深入学习和理解“豆瓣电影”微信小程序的源码,开发者不仅可以掌握微信小程序的基本开发技能,还能了解到如何将实际的业务需求转化为功能完善的小程序应用,这对于在互联网行业从事小程序开发的人员具有很高的...

    基于Vant的豆瓣评分微信小程序源码.zip

    4. **Vue.js原理**:虽然微信小程序不直接使用Vue.js,但Vant是基于Vue的,所以理解Vue的数据绑定、组件化、生命周期等概念有助于更好地理解Vant组件的工作方式。 5. **微信小程序组件化开发**:类似于Vue,微信小...

    (微信小程序毕业设计)豆瓣同城(源码+截图).zip

    (微信小程序毕业设计)豆瓣同城(源码+截图)(微信小程序毕业设计)豆瓣同城(源码+截图)(微信小程序毕业设计)豆瓣同城(源码+截图)(微信小程序毕业设计)豆瓣同城(源码+截图)(微信小程序毕业设计)豆瓣同城(源码+截图)(微信...

    22级2班 豆瓣爬虫程序(完整版).ipynb

    22级2班 豆瓣爬虫程序(完整版).ipynb

    仿豆瓣微信小程序2020-03-08.zip

    豆瓣电影小程序可能涉及到大量数据加载,因此需要考虑性能优化,如分页加载、异步处理、减少网络请求等策略。 通过这个项目,初学者不仅能学习到微信小程序的基本开发技术,还能了解到API的使用、数据处理和用户...

    微信小程序仿豆瓣电影源码

    微信小程序仿豆瓣电影源码微信小程序仿豆瓣电影源码微信小程序仿豆瓣电影源码微信小程序仿豆瓣电影源码微信小程序仿豆瓣电影源码微信小程序仿豆瓣电影源码微信小程序仿豆瓣电影源码微信小程序仿豆瓣电影源码微信小...

    高仿豆瓣图书小程序源码.zip

    【标题】"高仿豆瓣图书小程序源码"指的是一个用于创建类似豆瓣图书功能的小程序的完整源代码。豆瓣图书小程序通常包含浏览书籍信息、搜索图书、查看书籍详情、用户评分和评论等功能,它是一个轻量级的应用,适用于...

    豆瓣同城-微信小程序源码.zip

    【标题】"豆瓣同城-微信小程序源码.zip" 指的是一个包含了开发微信小程序所需的全部源代码资源的压缩文件。这个源码是用于构建一个名为“豆瓣同城”的小程序,旨在提供与豆瓣平台相关的本地活动信息和服务。微信小...

    微信小程序 豆瓣电影 (源码)

    微信小程序 豆瓣电影 (源码)微信小程序 豆瓣电影 (源码)微信小程序 豆瓣电影 (源码)微信小程序 豆瓣电影 (源码)微信小程序 豆瓣电影 (源码)微信小程序 豆瓣电影 (源码)微信小程序 豆瓣电影 (源码)微信小程序 豆瓣...

    微信小程序仿豆瓣电影源码.zip

    微信小程序仿豆瓣电影源码.zip 可直接运行

    基于Spark实现的豆瓣电影推荐系统的python源码.zip

    基于Spark实现的豆瓣电影推荐系统的python源码.zip本资源中的源码都是经过本地编译过可运行的,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。...

    【微信小程序毕业设计期末大作业】豆瓣同城-小程序项目源码.zip

    微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程...

    微信小程序豆瓣图书.zip

    8. 性能优化:为了提供流畅的用户体验,开发者需要考虑小程序的性能优化,如减少网络请求次数、合理使用缓存、避免阻塞主线程等。 综上所述,“微信小程序豆瓣图书.zip”涵盖了微信小程序开发的基本流程,从接口...

    微信小程序豆瓣电影.zip

    它支持大部分CSS3特性,但有一些微信小程序特有的规则和限制。 4. **App.js、App.json、Page.js和Page.json** - **App.js** 是小程序的全局配置文件,定义了小程序的生命周期函数和其他全局方法。 - **App.json**...

    豆瓣电影小程序源码.zip

    在【压缩包子文件的文件名称列表】中提到的"豆瓣电影"很可能是指整个项目的核心文件夹,包含了小程序的各个页面、样式、逻辑代码等。通常,一个微信小程序的源码结构会包括以下几个部分: 1. **app.js**: 小程序的...

Global site tag (gtag.js) - Google Analytics