Quora 用了哪些技術(轉)

原文: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 生成 HTMLCSS與 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 上的相關評論,上文中已經給出相關連接。

相關文章
相關標籤/搜索