豆瓣网技术架构的 发展历程(一)

豆瓣简介:

•2005年3月上线

•以分享和发现为核心的社区

•读书、电影、音乐、小组、同城、九点

•我的豆瓣、友邻

214026_kRMj_584165.gif

 一些数据:

•2.8M注册用户,约1/4活跃用户
•千万级非注册用户
•20M动态请求/天,峰值500~600/sec
•23台普通PC服务器(1U*15/2U*8)

•12台提供线上服务
•38G memcached

单服务器:

• 单台1U服务器 (frodo)
• 单核AMD Athlon 64 1.8GHz
• 1G内存,160G SATA*2
• Gentoo Linux
• MySQL 5
• Quixote (a Python web framework)
• Lighttpd + SCGI (shire)
• Memcached (!)

214309_Xdae_584165.gif

                                                Gentoo Linux

•容易维护
•emerge mysql
•ebuild 便于管理 patch
•只安装需要的东西
•安全性
•GLSA(Gentoo Linux Security Advisories)

                                                MySQL

•The world’s most popular open source database
•写少读多/写多读少 ==> MyISAM
•读写并发高 ==> InnoDB
•Replicate for backup

                                              Python

•开发迅速
•Battery Included
•第三方库成熟
•社区成长中
•CPUG: http://python.cn/

                                           Quixote


简单,轻量,易于实现REST风格的URL

当时还没有Django, TurboGears, Pylons这些选择,只有一
个笨重的ZOPE

http://www.douban.com/subject/1000001
# luz/subject/__init__.py
def _q_lookup(request, name):
subject = get_subject(name)
return lambda req: subject_ui(req, subject)
# luz/subject/subject_ui.ptl
def subject_ui [html] (request, subject):
site_header(request)
“<h1>%s</h1>” % subject.title
site_footer(request)

                                                   Lighttpd

•很好的动态和静态性能
•原生SCGI支持
•SCGI: 一个简化版本的FastCGI,由
Quixote开发者开发
•所有的请求都通过80端口的lighttpd进程
分发,动态内容走SCGI到localhost上的
Quixote进程。

                                                     Memcache

• 从上线起就在使用,有效减轻MySQL负担
• 对libmemcache做了python封装(使用Pyrex),性能是
纯python版的3x+
def get_subject(subject_id):
subject = mc.get(‘s:’+subject_id)
if subject is None:
store.farm.execute(“select xxx, xxx from subject where id=%s”,
subject_id)
subject = Subject(*store.farm.fetchone())
mc.set(‘s:’+subject_id, subject)
return subject

                                                         问题出现

•1.2M动态请求/天
•磁盘IO成为瓶颈
•需要寻找新机房

                                                           解决方案

•购买两台1U服务器
•pippin 和 meriadoc (后改名merry)
•双核, 4G内存,250G SATA*3
•一台作为应用服务器,一台作为数据库服务器
•迁移到双线双IP机房,使用DNS解析不同网段
IP -_-b
•开始多人协作开发,frodo做为开发用机
(subversion, trac, etc...)

                                   几点发现

•数据库的内存分配对性能影响重大
•innodb_buffer_pool_size
•磁盘随机寻道速度比吞吐量更重要
•网上找来的IP段分布很不靠谱

转载于:https://my.oschina.net/lichaoqiang/blog/282729

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值