网易首页 > 网易号 > 正文 申请入驻

豆瓣程序员如何利用Python开发出这么成功的社区?

0
分享至

豆瓣网对互联网用户来说是知名的Web 2.0社区,但对开发者而言,更重要的是一个应用Python打造的非常成功的Web 2.0站点。豆瓣网已经达到了300万注册用户,另外还有千万级的非注册用户。访问量每天则超过两千万。

豆瓣Python应用开发经验谈

豆瓣是一个Web 2.0网站,这类网站的特点就是“Always Beta”,不断有新的产品和功能升级来为用户提供更好的服务。作为使用Python进行开发的网站,豆瓣有效的程序开发配置和版本控制值得我们学习。

豆瓣的主要开发环境配置就是SVN+Trac+Bitten。豆瓣的版本管理系统使用的是Subversion(SVN),使用Trac来管理协同开发,同时使用Trac的Bitten插件进行持续集成。

在开发模式方面,由于是Always Beta,豆瓣采用的方式是:站点运行在主分支上,开发者在开发新功能时会建立一个子分支,新功能开发并测试完成后,会更新服务器的主分支版本,之后上线。

在开发框架方面,豆瓣主要使用Quixote(被称之为“堂吉诃德”,一个轻量级的Python Web框架,简单、高效,代码简洁);后台运行的Web服务主要使用Web.py(web.py也是一个Python的Web框架,简单且功能强大)。

豆瓣网可分割成两大块:一块是前端的Web,也就是用户在浏览器访问的时候会触发一系列的操作,从数据库拿出数据,渲染成HTML页面反馈给用户,这是前端;另外一块是后端,在豆瓣有一个很强的数据挖掘团队,每天把用户产生的数据进行分析,进行组合,然后产生出用户推荐,然后放在数据库里面,前端会实时的抓取这些数据显示给用户。

豆瓣(架构)设计现在在WEB这一端主要是用这么几种技术:前端是nginx和lighttpd,中间是Quixote的Web框架,后面是MySQL以及我们自己开发的DoubanDB。这些除了Quixote都是一些比较流行的、尖端的技术。Quixote稍微老一点,如果要重新设计的话,可能会在这方面做一些考虑。比如Python社区中的Django、Pylons等等都是可以考虑的,那么在豆瓣的内部的话,我们一般是用web.py,很轻量的一个Web框架来做,也是非常不错的选择,它可能需要自己做的事情多一点。但是,也不太可能完全重新设计了。

豆瓣(架构)设计现在在WEB这一端主要是用这么几种技术:前端是nginx和lighttpd,中间是Quixote的Web框架,后面是MySQL以及我们自己开发的DoubanDB。这些除了Quixote都是一些比较流行的、尖端的技术。Quixote稍微老一点,如果要重新设计的话,可能会在这方面做一些考虑。比如Python社区中的Django、Pylons等等都是可以考虑的,那么在豆瓣的内部的话,我们一般是用web.py,很轻量的一个Web框架来做,也是非常不错的选择,它可能需要自己做的事情多一点。

豆瓣现在还没有达到数据库分片的程度。最常见的手段是,按照功能分区。我们会把数据表分成几个独立的库,现在是一共有4个库。每个表都是库的一个部分,每个库会有主副两个。通过这种方式来减轻数据库的压力,当然这个是现在的方案,再往后的话,表的行数会增长,到达一定的程度后,还要进行水平分割,这是肯定的。然后我们现在的技术方面,在操作数据库之前,首先获取数据库的游标,有一个方法,这个方法会干所有的事情,我们以后做的时候会从这个方法中进行判断该从哪取东西。这个架构已经在了,只是现在还没有做这一步而已。

数据库这边主要采用什么解决方案呢?

在数据库这边,我们主要用的是MySQL。MySQL有一个问题,大文本字段会影响它的性能。如果数据量过大的话,它会挤占索引的内存。那么现在一个行之有效的方法是,我们另外建立一套可伸缩的Key-Value数据库,叫做DoubanDB。我们把不需要索引的大文本字段,放到DoubanDB里面去。MySQL只保存需要索引的Relationship这方面的信息。这样给MySQL数据库降低了压力,也就可以保证它的性能。

比如说像保证数据的安全性,以及数据库的吞吐量,豆瓣是怎样的策略呢?

首先DoubanDB会把每个数据在三个节点进行备份,任何一个出现故障都不会影响索取数据。MySQL是通过双Master方案,同时还会带1到2个slave,所以说在MySQL中我们会有三到四个的备份。这点是可以放心的。

你刚才说到MySQL的双Master方案,这方面会不会存在什么问题?比如说同步的问题,等等?

在MySQL里面,双Master方案是一个比较经典的方案,我们现在用它很大一部分是为了解决我们同步延迟的问题。在做切换的时候,会出现同步延迟的问题,但其实MySQL的同步速度还是可以的,在切换的时候,我们会忍受几秒钟等待同步的时间。在做脚本的切换的时候,我们会稍微等一下。

豆瓣的数据表一般是怎么样的规模?

数据表,这个不好说了,因为不同的表都是不一样的。我们最大的表是“九点”的Entry表,“九点”的爬虫爬过来的所有的文章,现在应该有四千万左右的行数。然后其他的上百万的表也有很多。还有包括收藏表也有千万级的行数。

在这种海量数据的情况下,对数据表的就结构变更,一定是一个比较麻烦的问题。常见的情况,比如增加一个新的索引,会导致索引好几个小时。像豆瓣之前会存在这样的问题,是怎么解决的呢?

这个问题曾经让我们吃过苦头,在忽视它的状况下就去改表,然后就锁了很长时间。后来我们意识到这个问题,如果有表的改动的话,我们会先在一个测试的库上试验一下它的时间长短,是不是在可接受的范围,如果是可接受的范围,比如说几分钟,就做一个定时任务,在深夜里面去执行。如果耗时是不可忍受的,就必须通过其他技术手段,我们现在的手段一般是建一个新表,这个新表从旧表同步数据,然后再写数据的时候,也会同步,往两边写,一直到两边完全一样了,再把旧表删掉,大概是这样一个方式。

刚才您好像提过你们设计了自己的DoubanDB,还有一个是DoubanFS,这两者关系是怎么样的?

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

DoubanFS跟DoubanDB的实现,他们在对于内容的安全性,或者内容的冗余性…

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

Python编程学习交流群:556370268,里面都是爱好编程的小伙伴哦,有大牛程序员,还有萌新小伙伴,不仅平时能聊天,有问题的时候也可以相互帮助,小编也准备了一份python学习资料,从最基础的知识、游戏、网络安全、数据挖掘、爬虫、再到网络安全的项目实战的学习资料都有整理,希望能帮助你更了解python,学习python。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
亏光2亿只是皮毛,冉莹颖再爆更多猛料,撕下了邹市明仅剩的体面

亏光2亿只是皮毛,冉莹颖再爆更多猛料,撕下了邹市明仅剩的体面

林轻吟
2026-07-10 07:08:11
6月全国新增新冠确诊7.9万例

6月全国新增新冠确诊7.9万例

21世纪经济报道
2026-07-12 14:48:07
瑟洛特谈未传给哈兰德:斯通斯封住了传球线路,我感觉传不过去

瑟洛特谈未传给哈兰德:斯通斯封住了传球线路,我感觉传不过去

懂球帝
2026-07-12 22:45:17
22岁女子多次求饶仍被前男友杀害,他“带着大号行李箱”

22岁女子多次求饶仍被前男友杀害,他“带着大号行李箱”

中国新闻周刊
2026-07-12 12:05:05
西班牙前首相调侃法国队:法国队里一个法国人都没有

西班牙前首相调侃法国队:法国队里一个法国人都没有

懂球帝
2026-07-12 06:09:06
一女子穿成这样坐地铁,引的乘客纷纷拍照!美女:你们太搞笑了

一女子穿成这样坐地铁,引的乘客纷纷拍照!美女:你们太搞笑了

背包旅行
2026-07-12 17:17:17
看完阿根廷3-1瑞士!不得不承认的5个事实,阿根廷完全没有冠军相

看完阿根廷3-1瑞士!不得不承认的5个事实,阿根廷完全没有冠军相

小青年渌渌
2026-07-12 19:55:01
招群殴?阿拉伯联军突袭伊朗!

招群殴?阿拉伯联军突袭伊朗!

高博新视野
2026-07-12 18:57:42
新式诈骗来了,不问密码不问验证码,只让你说一句,不是本人操作

新式诈骗来了,不问密码不问验证码,只让你说一句,不是本人操作

小虎新车推荐员
2026-07-12 02:21:04
就因为没把球及时传给哈兰德,瑟洛特赛后遭遇网暴

就因为没把球及时传给哈兰德,瑟洛特赛后遭遇网暴

澎湃新闻
2026-07-12 16:32:27
央媒点名不到24小时,彭女士再迎三大噩耗,停职只是一个开始

央媒点名不到24小时,彭女士再迎三大噩耗,停职只是一个开始

天天热点见闻
2026-07-12 05:43:00
38万!特斯拉新车,正式公布

38万!特斯拉新车,正式公布

科技堡垒
2026-07-12 11:52:09
“逐字翻译”抄袭国外论文被撤稿之后,人大女博士拟入职安徽大学

“逐字翻译”抄袭国外论文被撤稿之后,人大女博士拟入职安徽大学

封面新闻
2026-07-12 19:38:05
深圳航空新型大客机全部趴窝

深圳航空新型大客机全部趴窝

新浪财经
2026-07-12 05:38:28
随着张雪机车的德比斯在英国站第10完赛,WSBK最新积分榜出炉

随着张雪机车的德比斯在英国站第10完赛,WSBK最新积分榜出炉

侧身凌空斩
2026-07-12 21:57:37
中国为什么耗费千亿,造一座“不能通车的桥”?很多人难以理解

中国为什么耗费千亿,造一座“不能通车的桥”?很多人难以理解

抽象派大师
2026-07-10 19:45:41
赛力斯:预计2026年半年度净亏损15亿元-18亿元 同比转亏

赛力斯:预计2026年半年度净亏损15亿元-18亿元 同比转亏

财联社
2026-07-12 17:33:10
苹果新品突然上架:7 月 12 日,正式开售

苹果新品突然上架:7 月 12 日,正式开售

科技堡垒
2026-07-12 11:53:32
雷军让卖车的和卖房的都沉默了,网友:第一次在车上看到户型图

雷军让卖车的和卖房的都沉默了,网友:第一次在车上看到户型图

沙雕小琳琳
2026-07-11 20:19:33
嘿,阿根廷队,好消息:只剩两场比赛,坏消息:要上强度了

嘿,阿根廷队,好消息:只剩两场比赛,坏消息:要上强度了

澎湃新闻
2026-07-12 15:00:28
2026-07-13 01:00:49
小蜗牛IT
小蜗牛IT
分享程序员日常和知识点
261文章数 83关注度
往期回顾 全部

科技要闻

苹果诉OpenAI细节:一句“笑死”刺痛库克

头条要闻

媒体:阿根廷队只剩两场比赛 将直接升级到"地狱难度"

头条要闻

媒体:阿根廷队只剩两场比赛 将直接升级到"地狱难度"

体育要闻

被3个队友锁死,哈兰德以最憋屈的方式出局

娱乐要闻

台媒曝S妈许雅钧 诱使具俊晔放弃遗产

财经要闻

穿越算力恐慌:下半年AI科技的五大主线

汽车要闻

纯电/增程双动力 一汽悦意08正式上市售9.99万起

态度原创

旅游
健康
教育
手机
本地

旅游要闻

山海为幕 音乐作伴 青岛西海岸新区解锁文旅消费新场景

肝病、肾病患者注意!吃粘食要谨慎

教育要闻

重磅!科技高中“国家队”亮相!海淀这所学校“C位”出道

手机要闻

ColorOS 16霸榜流畅度排行,小米澎湃OS第六,差距在哪?

本地新闻

重庆人有自己的避暑桃花源 | 夏天就去「酉」风的地方!

无障碍浏览 进入关怀版