`

豆瓣的架构—专访豆瓣网站的技术总监洪强宁

阅读更多
豆瓣的架构—专访豆瓣网站的技术总监洪强宁

  “你要是愿意,就买一枝三块钱的玫瑰,送给我吧,这城市也是怪让人伤心的,我想死心塌地的爱上你”

   这是一个叫钟童茜的歌手的歌,我在豆瓣网站发现有人评论,才知道了这首有些凄凉的歌曲。你几乎不可能从百度的最流行的mp3的列表中找到它,因为它不是那么有名,也许是这个原因,引发了我采访豆瓣的愿望。接受我采访的是,豆瓣网站的技术总监洪强宁先生和产品经理张贝宁女士。



本刊记者:好,现在开始,豆瓣是一个非常著名的Web2.0网站,你们的开发语言选择的是Python,我想问的是,为什么选择Python?

洪强宁:我们选择Python的理由是它是动态语言,具有动态语言的优点,比如开发特别迅速。我们做的是一个Web2.0的网站,这种网站的特点就是always beta,用户的需求在随时发生变化,我们也不断发现新的价值。所以网站的结构和程序会不断变化,如果用Java做,你的开发量比较大,你就难以做出迅速地改变。Python的特点就是开发迅速,你可以在一两个小时,就做出一个功能。或者说已¾¬上线了,用户反映需要某一功能,也可以比较快地做出来。



本刊记者:这就是TDD,敏捷开发的思路,和传统的方式有些不同。但是会有另一方面的问题,Python的程序员好找吗?在国内会Python的要比会Java程序员少的多。

洪强宁:对,确实是。在中国用Python的人确实不多,也给我们寻找开发任何人员带来困难。不过从另一方面说,也有好处,因为没有一个学校去教Python,会Python的人都是自己学的,也就是说他知道自己需要什么技术,而且能够通过自学掌握它,包括Python的资料中文比较少,需要学习者接触第一手资料,这都使得Python程序员的平均水平,要比使用其他热门语言的平均水平要高。另一方面Python也越来越流行,在国外比较流行的动态语言有Perl,和Python,现在Python已经超过了Perl。



本刊记者:不过,在Web开发这方面有许多选择,比如,Java,.NET,和PHP,在这个格局里Python还是比较弱势。

洪强宁:对,当然,它是新兴语言。在未来,我相信,至少在在Web2.0网站开发方面,它会有自己的一个位置。



本刊记者:还有问一个问题,Python与Perl比较怎么样?因为Python的面向对象的特性好一些,代码看起来更容易理解一些吧,我以前是用 Perl写程序的,觉得Perl的程序代码看起来比较乱。

洪强宁:对,Perl 是write once风格的,一个人写完了,过一段时间,可能自己都不能看懂,它确实很强大,但比较适合当作个人工具使用,不太适合团队的开发。Python的哲学是解决问题的最好方式只有一种,这样同样的功能,每个人写出来的程序样子应该差不太多,比较易于理解,更适合团队开发。



本刊记者:还有一个问题,,有一种说法,认为Python比较慢,在性能方面会不会有问题?

洪强宁:这个问题可以分两个方面说,首先,说Python慢,这是和编译语言比,比如与C,C++,Java比,在动态语言中,它并不慢,它比Ruby要快,它和Perl性能相当。如果选择动态语言的话,Python并不是很慢。另一方面,如果做网站开发,语言的不是速度的瓶颈,比如我把我们现在用Python写的程序全部用C写,程序当然会快一点,但是改变不是很大。Web网站一般会有很多对IO的操作,比如对数据库的访问,对硬盘的访问响应用户的请求,80%,90%你的时间都花在IO上,语言的速度,相对而言,不是那么重要。也可以这样说,网站的性能主要取决于架构设计的是否合理。因为网站需要响应大量的并发的请求,如果你的设计的不好,即使你用C写的,也可能无法应付。所以更多的考虑是在架构设计上,要使架构体系不会产生速度瓶颈。



本刊记者:那您能简要地介绍一下豆瓣的架构吗?

洪强宁:关于豆瓣的系统架构图,首先我们在Web server上做个划分,把网站内容分为动态内容和静态内容。在豆瓣上所有的html都是动态内容,图片都是静态内容。分成两个Web 服务可以做不同的调优。 对动态内容,我们用的是nginx和lighttpd的混合,nginx做负载的平衡,lighttpd通过 SCGi 与application server相连,application server是基于 quixote这个框架写的。

application server拿到用户的请求,分析用户的url,并且利用外部的资源,比如数据库,组合成一个html,返回。从数据库存取会比较慢,数据库有大量的IO,我们使用cache,我们使用的是Memcached,这是一个分布式的内存的cache,比如你可以用很多机器,每个机器有两个G的内存,我们自己开发了client端来使用它,另外如果用户有搜索请求,我们会用搜索引擎。Xapian是一个C++写的开源的搜索引擎,我们通过Web service去访问它。其他,我们还提供了另外的Web service接口响应用户的请求,比如要访问某个文件。spread是我们最近加了一部分,用户有的请求可以采用这样的异步服务。

数据库是这样的,两个MySQL做成一对,一个master ,一个 slave,根据应用划分,使得load不会太高。这个图上»¬的是两对,实际上有三对。还有一个slave,一方面作为备份,一方面用作数据挖掘,因为不能对线上的数据做直接操作。

对于静态部分,我们也是用nginx,你注意到豆瓣现在有日记的贴图功能系统,用户可能上传很多图片,我们采用的方案是用了mogile FS ,这是一个分布式的文件系统,同时可以做备份,保持高可用性,可以提高很大的IO。

关于application server,它都是用Python写的。我们是用的MVC方式,Controller我们用的是quixote ,它接受用户的请求,根据这个URL去找到Model的某个具体的函数来执行,它是一个dispatcher,当中会判断用户的权限等。然后再传给View,View根据模版进行渲染,形成网页。View的模版,我们以前是用的是PTL,PTL很高效,最近引用了mako,这是一个比较现代的开源的模版,用它写出的代码比较好维护,比PTL好维护一些.。同时,在使用mako的同时,我们的工程师做了很多加速的工作,现在mako的代码有很多是豆瓣的人写的。

你如果注意过Python的Web开发框架的话,你会发现Python的有三个比较著名的框架,Django,Pylons,TurboGears,Pylons默认的模版就是Mako。

下面的就是Model,业务模块,核心是类是User,因为Web2.0是以人为本,我们肯定会有一个User。只有人也做不了事情,还要有物。豆瓣的物,就是Subject,比如书,比如评论,比如小组等。

与数据库进行链接,我们一个很轻量级的与数据库进行链接,这也是一个开源项目,SQL Farm Manager。这个Web service,豆瓣中有很多用的都是Web service。



本刊记者:好,还想问您一个问题,Web2.0会不会也在架构设计中也有所体现呢 ?

洪强宁: Web2.0用户的反复的操作非常多,你需要一个非常流畅的体现。这需要一些技术来实现,比如Ajax;豆瓣花了很多钱很多精力,来提高性能,比如买好的机器,使用Gentoo Linux,为什么使用Gentoo Linux,因为它方便调优。还有,大量的使用cache。在数据库调优方面,我们也花了很大的精力。

另一方面,Web 2,0是用户提供数据的,用户有很多写操作。这样很多1.0优化方法在2.0中行不通。豆瓣在数据库上用的是分库的方式。除此之外我们还尝试了一些其他的方法。



本刊记者:我现在想问张贝宁一个问题,您能否谈一下Web2.0社区网站和传统的社区网站的区别?比如天涯论坛,和豆瓣的区别。

张贝宁:先说一下Web 2.0 的概念,传统网站,用户到这些网站,只是看信息,这些信息是怎么来的呢,比如像Google,它是抓来的,或者像新浪这样的门户网站,是用户给你编好的。你到这样的网站,只是获取信息,你不能创造信息,也不能决定它放的位置。按照业界的理解,Web 2.0相对于Web 1.0,它是以用户为中心的,或者说是以用户创造内容为主,并且可以决定展现方式。你刚才说的传统的社区,在某种程度上,也可以说是2.0的,因为它也由用户提供内容。不过早期的BBS,网站以内容作分类,比如体育,军事,文学等。用户不能形成自己的分类。在豆瓣,用户可以对任何一个话题进行讨论,这完全是用户自主的。这还只是关系到豆瓣的小组的功能,如果拿天涯论坛和豆瓣做比较的话,豆瓣与天涯这样的BBS不同还在于,它首先有一个物的概念,比如书,音乐,和电影。



本刊记者:我也发现了这点。这样的组织方式,给人的感觉会非常不同。比如我们要查找对余华的小说《活着》的评论,在豆瓣就比较容易找到认真,有质量的评论。而在传统的BBS上,你只能用查找的方式,搜索“活着”这个词,找出的东西,也可能还不是谈论《活着》这本小说的,而只是其中的文本包含了“活着”这个词,而且有很多无意义的吵架帖。豆瓣的组织方式,让人感觉很严肃,雅气。不过,我也发现了一个或许有些不便的地方,比如,我要在讨论德里达的小组回帖,在一般的BBS可以匿名,或具有一个ID就行了,但在豆瓣,我要首先参加德里达这个小组。

张贝宁:对,是这样的。豆瓣更关心的是人群,就是对同一话题和事物有兴趣的人群,而不是帖子,这与传统的BBS确实有一些区别。

分享到:
评论
1 楼 soul_fly 2009-06-16  
个人感觉豆瓣的盈利模式还是单调了点.

相关推荐

    豆瓣网站的技术总监洪强宁先生和产品经理张贝宁女士采访稿-豆瓣架构

    豆瓣高性能架构,来自互联网 -- 这是一个叫钟童茜的歌手的歌,我在豆瓣网站发现有人评论,才知道了这首有些凄凉的歌曲。你几乎不可能从百度的最...接受我采访的是,豆瓣网站的技术总监洪强宁先生和产品经理张贝宁女士。

    洪强宁谈豆瓣网技术架构

    洪强宁谈豆瓣网技术架构,整理出的word文档

    豆瓣的架构和一些组件

    5月30日CTO俱乐部在北京举办的第99期主题活动的主讲嘉宾:洪强宁(豆瓣 首席架构师) 介绍豆瓣的技术架构和豆瓣自行开发的主要组件(如KV存储组件BeansDB,应用开发平台DAE,Python的Spark实现Dpark等)。...

    大学生C语言程序设计(版谭洪强)实验答案.pdf

    大学生C语言程序设计(版谭洪强)实验答案.pdf大学生C语言程序设计(版谭洪强)实验答案.pdf大学生C语言程序设计(版谭洪强)实验答案.pdf大学生C语言程序设计(版谭洪强)实验答案.pdf大学生C语言程序设计(版谭洪强)实验...

    01010代码类

    仿地宝网分类信息,分类信息源码程序破解完整无错版,班班分类系统 JAVA上百实例源码以及开源项目 两例Eclipse不能启动Tomcat服务的处理过程 ...洪强宁谈豆瓣网技术架构 学习豆瓣网的技术架构发展历程

    2009QCon部分演讲稿

    绍荣:RIA的技术趋势和应用趋势 吴延安:微软云计算平台-Windows Azure架构探析 王翔:企业系统上午只能设计 洪强宁:豆瓣网技术架构的发展历程

    大学生C语言程序设计(第四版 谭洪强)实验5答案.docx

    大学生C语言程序设计(第四版 谭洪强)实验5答案.docx大学生C语言程序设计(第四版 谭洪强)实验5答案.docx大学生C语言程序设计(第四版 谭洪强)实验5答案.docx大学生C语言程序设计(第四版 谭洪强)实验5答案.docx大学生...

    大学生c语言程序设计(第四版谭洪强)实验5答案.docx

    大学生c语言程序设计(第四版谭洪强)实验5答案.docx大学生c语言程序设计(第四版谭洪强)实验5答案.docx大学生c语言程序设计(第四版谭洪强)实验5答案.docx大学生c语言程序设计(第四版谭洪强)实验5答案.docx大学生c语言...

    大学生C语言程序设计(第四版 谭洪强)实验5答案.pdf

    大学生C语言程序设计(第四版 谭洪强)实验5答案.pdf大学生C语言程序设计(第四版 谭洪强)实验5答案.pdf大学生C语言程序设计(第四版 谭洪强)实验5答案.pdf大学生C语言程序设计(第四版 谭洪强)实验5答案.pdf大学生C语言...

    大学生c语言程序设计(第四版谭洪强)实验5答案.pdf

    大学生c语言程序设计(第四版谭洪强)实验5答案.pdf大学生c语言程序设计(第四版谭洪强)实验5答案.pdf大学生c语言程序设计(第四版谭洪强)实验5答案.pdf大学生c语言程序设计(第四版谭洪强)实验5答案.pdf大学生c语言程序...

    大学生C语言程序设计(第四版 谭洪强)实验 6答案.pdf

    大学生C语言程序设计(第四版 谭洪强)实验 6答案.pdf大学生C语言程序设计(第四版 谭洪强)实验 6答案.pdf大学生C语言程序设计(第四版 谭洪强)实验 6答案.pdf大学生C语言程序设计(第四版 谭洪强)实验 6答案.pdf大学生...

    python网站引用

    Python于Web2.0网站的应用-洪强宁.pdf

    毛洪强--20054085.doc

    汇编实现接口课程设计:小车动画移动。文档齐全

    自学技巧:如果不能自学,就没有未来

    自学技巧 如果不能自学,就没有前途 。 自学是门手艺 没有自学能力的人没有未来 作者:李笑来 特别感谢霍炬( ),洪强宁( )两位良师诤友在此书写作过程中给予我的巨大帮助! # pseudo-code of selfteaching in ...

    混凝土技术参数对沉积效果的影响

    混凝土技术参数对沉积效果的影响,蒋林华,储洪强,本文就电沉积方法修复混凝土裂缝中混凝土技术参数(水灰比、保护层厚度、裂缝宽度)对沉积效果的影响进行了试验研究,测定了沉积

    钢筋混凝土结构裂缝电沉积修复技术研究(一)

    钢筋混凝土结构裂缝电沉积修复技术研究(一),蒋林华,储洪强,本文对电沉积方法修复钢筋混凝土结构裂缝进行了初步试验研究,基本确定了电沉积溶液的种类,提出了有待进一步研究的问题。

    基于GIS的土地利用分析展示系统研究

    基于GIS的土地利用分析展示系统研究,展洪强,过仲阳,本文采用插件式GIS和移动GIS技术相结合,并以土地利用结构研究的基础理论为基础,借助GIS地学统计和空间分析等功能,运用多种数学模

    氯化钠和硫酸镉对平邑甜茶MhBAG基因表达和细胞凋亡率的影响

    氯化钠和硫酸镉对平邑甜茶MhBAG基因表达和细胞凋亡率的影响,沈伟,杨洪强,通过RT-PCR及RACE技术,获得了平邑甜茶一个全长为1814bp的BAG基因cDNA序列,其基因编码区共1017bp,编码338个氨基酸,命名为MhBAG。...

    论文研究-基于session数据的信息检索优化方法 .pdf

    基于session数据的信息检索优化方法,贾洪强,肖波,本文探讨了基于session数据的信息检索优化算法。现有的基于session的检索优化算法大多针对一个会话过程中查询关键词的变化进行查询扩�

    论文研究-基于无线传感器网络的移动目标定位系统研究 .pdf

    基于无线传感器网络的移动目标定位系统研究,孟祥,刘洪强,本课题首先研究和分析了多种无线定位算法,详细介绍了各种定位算法的原理,然后利用PIC系列单片机与无线收发模块CC2420设计了无线传

Global site tag (gtag.js) - Google Analytics