资源描述:
《豆瓣网技术架构的发展历程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、豆瓣网技术架构的发展历程Text2009.4洪强宁hongqn@douban.comMonday,March23,2009豆瓣网简介•2005年3月上线•以分享和发现为核心的社区•读书、电影、音乐、小组、同城、九点•我的豆瓣、友邻Monday,March23,2009一些数据•2.8M注册用户,约1/4活跃用户•千万级非注册用户•20M动态请求/天,峰值500~600/sec•23台普通PC服务器(1U*15/2U*8)•12台提供线上服务•38GmemcachedMonday,March23,2009单服务器•单台1U服务器(f
2、rodo)•单核AMDAthlon641.8GHz•1G内存,160GSATA*2•GentooLinux•MySQL5•Quixote(aPythonwebframework)•Lighttpd+SCGI(shire)•Memcached(!)Monday,March23,2009InternetLighttpdSCGIAppFSMySQLMemcacheStaticFilesMonday,March23,2009GentooLinux•容易维护•emergemysql•ebuild便于管理patch•只安装需要的东西•安全性•
3、GLSA(GentooLinuxSecurityAdvisories)Monday,March23,2009MySQL•Theworld’smostpopularopensourcedatabase•写少读多/写多读少==>MyISAM•读写并发高==>InnoDB•ReplicateforbackupMonday,March23,2009Python•开发迅速•BatteryIncluded•第三方库成熟•社区成长中•CPUG:http://python.cn/Monday,March23,2009Quixote•简单,轻量,易
4、于实现REST风格的URL•当时还没有Django,TurboGears,Pylons这些选择,只有一个笨重的ZOPE•http://www.douban.com/subject/1000001#luz/subject/__init__.pydef_q_lookup(request,name):subject=get_subject(name)returnlambdareq:subject_ui(req,subject)#luz/subject/subject_ui.ptldefsubject_ui[html](request,s
5、ubject):site_header(request)“
%s
”%subject.titlesite_footer(request)Monday,March23,2009Lighttpd•很好的动态和静态性能•原生SCGI支持•SCGI:一个简化版本的FastCGI,由Quixote开发者开发•所有的请求都通过80端口的lighttpd进程分发,动态内容走SCGI到localhost上的Quixote进程。Monday,March23,2009Memcache•从上线起就在使用,有效减轻MySQL负担•对libm
6、emcache做了python封装(使用Pyrex),性能是纯python版的3x+defget_subject(subject_id):subject=mc.get(‘s:’+subject_id)ifsubjectisNone:store.farm.execute(“selectxxx,xxxfromsubjectwhereid=%s”,subject_id)subject=Subject(*store.farm.fetchone())mc.set(‘s:’+subject_id,subject)returnsubjectMo
7、nday,March23,2009问题出现•1.2M动态请求/天•磁盘IO成为瓶颈•需要寻找新机房Monday,March23,2009解决方案•购买两台1U服务器•pippin和meriadoc(后改名merry)•双核,4G内存,250GSATA*3•一台作为应用服务器,一台作为数据库服务器•迁移到双线双IP机房,使用DNS解析不同网段IP-_-b•开始多人协作开发,frodo做为开发用机(subversion,trac,etc...)Monday,March23,2009InternetLighttpd(#$)DNSHTTP
8、SCGIProxyAppLighttpd(!")FSStaticFilesMemcacheMySQLMonday,March23,2009几点发现•数据库的内存分配对性能影响重大•innodb_buffer_pool_size•磁盘随机寻道速度比吞