首页 » 网站建设 » php和mysqlweb开辟豆瓣技巧_豆瓣轨范员若何运用Python开拓出这么成功的社区

php和mysqlweb开辟豆瓣技巧_豆瓣轨范员若何运用Python开拓出这么成功的社区

访客 2024-10-30 0

扫一扫用手机浏览

文章目录 [+]

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

豆瓣Python运用开拓履历谈

php和mysqlweb开辟豆瓣技巧_豆瓣轨范员若何运用Python开拓出这么成功的社区

豆瓣是一个Web 2.0网站,这类网站的特点便是“Always Beta”,不断有新的产品和功能升级来为用户供应更好的做事。
作为利用Python进行开拓的网站,豆瓣有效的程序开拓配置和版本掌握值得我们学习。

php和mysqlweb开辟豆瓣技巧_豆瓣轨范员若何运用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,也便是用户在浏览器访问的时候会触发一系列的操作,从数据库拿出数据,渲染成HTML页面反馈给用户,这是前端;其余一块是后端,在豆瓣有一个很强的数据挖掘团队,每天把用户产生的数据进行剖析,进行组合,然后产生出用户推举,然后放在数据库里面,前端会实时的抓取这些数据显示给用户。

豆瓣(架构)设计现在在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感兴趣的小伙伴,记得私信

标签:

相关文章

微信第三方登录便捷与安全的完美融合

社交平台已成为人们日常生活中不可或缺的一部分。微信作为我国最受欢迎的社交软件之一,拥有庞大的用户群体。为了方便用户在不同平台间切换...

网站建设 2025-02-18 阅读1 评论0

广东高速代码表解码高速公路管理智慧

高速公路作为国家交通动脉,连接着城市与城市,承载着巨大的物流和人流。广东作为我国经济大省,高速公路网络密布,交通流量巨大。为了更好...

网站建设 2025-02-18 阅读1 评论0