楼主: chszs

洪强宁谈豆瓣网技术架构

[复制链接]
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
11#
 楼主| 发表于 2010-3-10 22:24 | 只看该作者
刚才您好像提过你们设计了自己的DoubanDB,还有一个是DoubanFS,这两者关系是怎么样的?

首先是先出来的DoubanFS,我们刚开始的时候用MogileFS来解决我们可扩展图片存储的问题,由于MogileFS有一个重型数据库,这成为了它的性能瓶颈。我们为了解决这个问题,开发了DoubanFS,基于哈希来寻找节点。之后,我们又发现了新的问题,数据库中的大文本字段也会影响性能。所以,我们在DoubanFS的基础上,换了一个底层,做了一些调整,参照Amazon的dynamo思想,搭建了DoubanDB,把文本字段放在 DoubanDB里面。做完之后,又反过来用DoubanDB来实现FS,大致是这么一个过程。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
12#
 楼主| 发表于 2010-3-10 22:25 | 只看该作者
DoubanFS跟DoubanDB的实现,他们在对于内容的安全性,或者内容的冗余性…

都是(备份)三份。这都是可以配置的,现在的配置是3份。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
13#
 楼主| 发表于 2010-3-10 22:25 | 只看该作者
DoubanDB就是用什么机制实现的?

DoubanDB简单来说是这样子:你来一个Key,它是Key-Value数据库,你要写或读的时候,通过这个Key来寻找这个值。拿一个Key对它做哈希,通过Consistent哈希方法去查找它在哪个节点上,然后往这个节点上去写或读。在这个节点上,顺着哈希的wheel顺次的找到第二、三个节点,写的时候会保证这三个节点都写,读的时候是任意一个,如果其中一个读失败了,会自动切换到下一个。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
14#
 楼主| 发表于 2010-3-10 22:26 | 只看该作者
您刚才提DoubanDB的话,是采用的技术是?

DoubanDB的底层存储用的是TokyoCabinet,是一个很轻量级、高效的Key-Value数据库。我们在它的基础之上,做了分布式,用这种方式来实现的。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
15#
 楼主| 发表于 2010-3-10 22:27 | 只看该作者
实际上有一些其他的方案可以解决,比如说像Berkeley DB(简称BDB)、CouchDB等等,你们为什么要选择TokyoCabinet?

最简单的原因是由于它足够快,实际上BDB跟它比较类似,BDB更加强大一些。对我们而言,我们在这边就是需要一个可靠、高效的Key-Value存储,这两个其实是我们都可以替换的,只要统一下接口就可以。CouchDB的话就是另外一个东西了,它是一个文档型数据库,它不仅仅做了一个Key- Value的工作,它还在这上面做了很多其他的事情,比如它有View的概念,可以进行query。这些TokyoCabinet是没有的,而我们暂时也不需要这些功能。CouchDB是一个很有意思的数据库,我们可能会在其他方面(应用),我们也在研究它。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
16#
 楼主| 发表于 2010-3-10 22:28 | 只看该作者
从我们刚才的讨论中,Web前端你用了nginx又用了lighttpd。它们都是非常流行的前端,这两种方案经常打架,豆瓣为什么把它们融合在一块?

这是历史原因。我们其实没有刻意地去倾向某一个。这两个都是非常优秀的Web Server,都很轻量,都很高效。最开始的时候我们用的是lighttpd,然后是因为出现过一些问题,其实不是lighttpd的问题,但当时我们怀疑可能是lighttpd有问题,就尝试了一下nginx,觉得这个也不错,然后这个结构就保留下来了。nginx对开发者和用户的友好性都更好一些。我举个例子,比如说重启,其实在豆瓣的Web Server是经常要重启的,我们会有一个健康检查的脚本,定时的检查网站是不是正常,如果觉得不正常的话,就会做一些保护措施,其中就包括重启。 lighttpd的重启,是一个很粗暴的Kill。Nginx是一个reload的方案,会先把手头的事情做完了再重启。这样会好很多,而且它会在重启之前会帮你做一些好的事情。所以,现在我们用Nginx越来越多。Nginx的配置文件也比lighttpd写起来更舒服一些。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
17#
 楼主| 发表于 2010-3-10 22:28 | 只看该作者
豆瓣现在有一个庞大的用户群体,针对这样一些海量数据做好数据挖掘,肯定不是一件容易的事情,能从技术这个角度讲讲挖掘的实现吗?

在豆瓣专门有一个算法团队,他们的主要工作就是数据挖掘。这边讲技术实现的话,可能就讲不完了。只能讲一些大概,数据挖掘是怎么和前端结合起来的,让用户看见的。每天用户在豆瓣上的操作都会产生很多数据,在豆瓣上面看到的东西,收藏的东西,都会存在数据库或是访问日志。每天这些信息都会传到算法团队的机器上,然后会从这个数据中建立一个稀疏矩阵,你看过什么,干过什么。他们维护了一个很高效的稀疏矩阵运算库,然后用它来做各种各样的尝试,去看是否能得到好的结果,一旦发现这个结果很好,就会把它写到数据库里面。然后用户在访问的时候,前端从数据库中取出推荐给你的数据,然后把这些数据做一些过滤(比如你读过的东西就不再给你展现了)、调整,最后展现给用户。基本上是这么一个逻辑。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
18#
 楼主| 发表于 2010-3-10 22:29 | 只看该作者
从刚才你所描述的内容,可以发现豆瓣其实是一个应用非常多的,几乎用的都是开源框架吧?

全部是开源的。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
19#
 楼主| 发表于 2010-3-10 22:29 | 只看该作者
我相信你们从社区的智慧以及各方面都会获取很多东西,我不知道豆瓣对开源社区是不是也做了一些回馈?

是有的,我们最大的回馈形式是patch。我们用很多的开源软件,这当中就不可避免的有各种各样的问题,我们会尝试通过自己的努力解决这些问题,把我们的解决方案反馈给开发者。比较典型的像libmemcached,是一个C的memcached客户端。现在也是非常火的,基本是一个官方的C的客户端。它其实有很多bug,我们在使用的时候发现,去修正它。现在我们的团队成员里面有直接就是它的开发成员。比如说像Python的Mako模板,也是用的人非常多的模板。我们也在使用,使用起来发现它的性能稍微弱一些,我们也花了精力对它进行了优化,这个优化现在也是被接受了,在Mako的后来版本发布出来了。然后豆瓣自己也有一些开源的项目,最主要的开源的项目是豆瓣API的访问客户端,这个是在google code上面,也有很多志愿者参与进来,帮我们一起修改。然后从另外一个方面来说,豆瓣和国内的开源社区也有紧密的联系。豆瓣的上线通知就是发在开源组织 CPUG的邮件列表里面的,豆瓣的很多成员也是CPUG的成员,会在邮件列表里面去帮助回答问题,讨论问题,这也是一种回馈的方式。

使用道具 举报

回复
论坛徽章:
63
2010广州亚运会纪念徽章:台球
日期:2010-10-18 12:43:48茶鸡蛋
日期:2013-01-09 10:59:002013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:帆船
日期:2013-04-02 17:07:052013年新春福章
日期:2013-04-08 17:42:48奥运纪念徽章
日期:2013-07-18 13:55:12优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11马上有钱
日期:2014-03-20 16:14:11
20#
 楼主| 发表于 2010-3-10 22:30 | 只看该作者
豆瓣的开发团队是怎么样的?

我们现在开发团队这边是11个人,有全职有兼职,还是比较放松。我们采用的是敏捷的方法,但是也不是完全的一模一样的方式。在豆瓣内部,我们尽可能地去发挥每个人的创造力。比如,在豆瓣作息是自由的,你可以自己决定什么时候来,什么时候走。比如你想在家里面静下心来写code,你可以往邮件列表里面发条消息说,我今天不过来了,就可以在家里面。每天会有很多的讨论,我们在豆瓣的办公室是一个独立的区域。在这个区域里面有白板,大家可以随时讨论。然后每周我们会有一个技术交流会议,大家轮流来发表一下自己最近在看一些什么东西,有什么心得,跟大家分享一下,这些都促进团队的沟通与发展的,很有用的东西。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表