Quora 用了哪些技术 ?

| 21 Comments

很多团队都在学习、研究 Quora 。前段时间看到这篇 Quora's Technology Examined ,阐述了 Quora 的技术架构,有一些值得关注的信息,记录并分享一下。

使用云计算服务

Quora 大量使用 Amazon EC2 与 S3 服务;操作系统部署的是 Ubuntu Linux,易于部署和管理;静态内容用 Cloudfront.服务分发,图片先传到 EC2 服务器,使用 Pyhon S3 API 处理后后传到 S3。

从开始就使用云计算服务的的好处是节省了大量人工维护硬件服务器的成本,当然这个做法在咱这片土地上不太可行。

Quora_China_chat.png.scaled500.png
(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 ,当然理由有一大堆,总体看来,并非很激进。

通信处理

后端通信使用的是 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 上的相关评论,上文中已经给出相关链接。

21 Comments

我正在考虑使用EC2,为什么在大陆不行呢?有延迟还是会被封?

虽然做过很长时间的站内搜索,但我一直不明白“实时搜索”的定义,能搜到5分钟前的新内容?1分钟前?30秒前?5秒前?不知道国内中型网站能做到多“实时”。
开源的搜索框架虽然原生不支持实时搜索,但是稍微包一层,做到分钟级还是很容易的。

Facebook内部还是以Python为主的(PHP除外),大家热爱Python(Ruby就没什么应用了)。一个典型的例子是phpsh就是用Python写的:https://github.com/facebook/phpsh。

用python的确是很好, 语法简练, 表达力强
但如何处理好unicode的确是个问题啊.

php就是让新手光速入门,但对于Web后续的开发和系统的整合,其实是不够Python强大的。偶通过Php入门,写了两年Php现在一边倒向Python了。在Python成熟的包管理体制下面,选择Python并不是激进的行为。特别需要爬虫,需要处理与系统交互,建设服务器的一些底层url路由或者中间件的时候,PHP更是望尘莫及。Python这点好处不得不夸大赞美一下。嗯嗯,在fenng的地方装B了,各位PHP高人手下留情,小心轻拍。我不是来冷落PHP的,对于程序语言,我没有敌人。。。

IDC不在本地就是很慢是吗?不知道大陆访问quora速度如何?

不知道php以后会不会被python替换的.有些底层的应用用C实现不一样的么.

从大陆到亚马逊的平均速度大概是 40kB/s 还可以接受,anyway,如果主要客户是米国,放亚马逊不错。

编程语言是见仁见智的话题,php做web开发肯定有其优势的地方,底层的东西可以用其他语言。在国内用EC2基本就别考虑了,你的用户能忍受这速度吗。Sphinx做全文检索不错,但是Quora需要在用户输入问题的时候匹配类似问题,最重要的是出匹配结果的效率,这个他们是自己写的程序,估计是在内存有一个很大的关键字列表可以匹配。

feng,可以试试阿里云为万网开发的虚机。

大辉目前更新blog的速度有点慢哈

呵呵 顶上那个sql语言有意思

博主都在丁香园做神马具体工作 我虽然是医生但是很少去丁香园
不过你以前在alipay 看过你的介绍 好像是数据库开发应用吗?

hi,对这个类似问题匹配很感兴趣,有知道具体怎么实现的吗?

知乎 Comet 用的应该也是 Tornado

AWS的新加坡机房最近抽风的很,延迟高达600,掉包还严重,基本处于瘫痪状态了。

觉得速度有点慢啊