原文:http://dbanotes.net/arch/quora_tech.htmlhtml
不少团队都在学习、研究 Quora 。前段时间看到这篇 Quora’s Technology Examined ,阐述了 Quora 的技术架构,有一些值得关注的信息,记录并分享一下。前端
使用云计算服务node
Quora 大量使用 Amazon EC2 与 S3 服务;操做系统部署的是 Ubuntu Linux,易于部署和管理;静态内容用 Cloudfront.服务分发,图片先传到 EC2 服务器,使用 Pyhon S3 API 处理后后传到 S3。web
从开始就使用云计算服务的的好处是节省了大量人工维护硬件服务器的成本,固然这个作法在咱这片土地上不太可行。apache
(refer: Copyright )
Web 层与 CMS后端
HAProxy 做为前端负载均衡服务器,反向代理服务器是 Nginx,Nginx 后面则是 Pylons (Pylons + Paste) , 承担动态 Web 请求。服务器
Webnode2 与 LiveNode 这两个内部系统承担建立、管理内容的重任,Webnode2 生成 HTML、CSS与 JavaScript ,而且与 LiveNode 轻度耦合。LiveNode 的做用用以显示 Web 页面内容。用 Python、C++ 与 JavaScript 写的。特别提到用到了 jQuery 与 Cython。LiveNode 有可能开源。架构
为何用 Python?并发
前面已经提到了一些 Python 相关的技术组件。有意思的是从 Facebook 出来的团队竟然用 Python 做为主要开发语言。Quora 对此有所解释: Facebook 选择 PHP 也并不是是最佳选择,而是有历史缘由。Quora 技术团队在考察了多个语言以后选择的 Python ,固然理由有一大堆,整体看来,并不是很激进。app
通讯处理
后端通讯使用的是 Facebook 开源出来的 Thrift,除了开发接口简单以外,可能更为熟悉也是一个因素吧 :) Comet 服务器使用的是 Tornado,用以处理 Long polling 以及 Push 更新(不知道知乎用的什么?),Tornado 是前 FriendFeed 技术团队开源的产品。
实时搜索
由于 Sphinx 不能知足实时性方面的要求,Quora 启用了本身开发的搜索引擎,只使用了 Thrift 与 Python Unicode 库,此外没有用别的。Quora 的搜索比较特别,由于要对输入内容作关联而且要作有效提示,因此须要提供更好的前缀索引(Prefix indexing)功能。
Quora 搜索的实现仍是挺有技术含量的,对后端的查询请求压力也不小(或许当前的并发请求量还没那么大)。对这个场景,作相关开发的朋友不妨仔细研究一下。若是大致框架相似,那么决定最后生出的因素极可能是那些细节。
数据持久层
大量使用 MySQL 做为存储方案,Memcached 做 Cache 层。没有使用当前比较火爆的 NoSQL 相关产品。Quora 这样作有本身的理由,用户量级没有达到百万的 SNS 站点彻底不必用 NoSQL 的东西。或许之后 Quora 也会启用。
创始人查理·奇弗(Charlie Cheever)与亚当·德安杰洛(Adam D’Angelo)以前都在 Facebook ,因此,Quora 的技术还真有很多 Facebook 的基因。Quora 的团队规模并不大,作技术的估计十余人而已,这么紧凑的团队利用了这么多的技术与产品,可见不少人都是多面手了。这是国内技术团队须要向国外同行学习的地方。
–EOF–
这只是一篇概要性的描述,若是要知道一些更为细节的东西,请看 Quora 上的相关评论,上文中已经给出相关连接。