如何評價 Quora 的 Ultralisk 並行架構?

Web Server Architecture at Quora

Quora 之前用的 Webpara 並行架構中,master 和 worker 是分離在不同的物理伺服器【EC2 c1.xlarge 8核處理器】上的,任務的分發和結果的返回都需要經過網路層。實際部署後發現這樣導致內部網路流量非常大,讓整個系統變成了受 I/O 約束而不是受 CPU 約束,從而無法通過繼續增加伺服器實現橫向擴展。

於是就出現了現在這個 Ultralisk 的解決方案。簡單說來,Ultralisk 和 Webpara 的不同之處在於部署:Ultralisk 的 master 和 worker 是位於同一物理伺服器上【EC2 cc2.8xlarge 32核處理器】,並且 master 只會將任務提交給同一物理伺服器的 worker。這樣任務的分發和結果的返回都不需要離開本地伺服器,通過本地 TCP 或者 Unix socket 完成通訊,從而大幅度減少網路 I/O 【給的數字是消減了 60%】。

所以看起來是通過改用更多核的伺服器,然後利用伺服器內部的高帶寬通訊替代了之前的核數更少的伺服器之間低帶寬的網路通訊。

但我想不明白的的是:既然是在同一台物理伺服器上做並行化了,那何必再用這麼麻煩的 master/worker 機制,直接用 Python 的 multiprocessing 模塊把可以並行化的任務分發給多個處理器核心不就完了么?為什麼還要保留中間的 router 層?


Quora 上已經有人提問並且 dev manager 做了基本的介紹,見 [1]。看起來乾貨都在 [3] 里,但如果對比看……

Ultralisk 的更新,實際上是基於之前 Webpara 架構已經確立的並行頁面載入架構。在 [2] 這裡有對 Webpara 架構進行的解釋,基本是通過 master - router - worker 的架構,利用類似 map-reduce 的思路同時載入一個頁面中的不同內容以降低每個頁面載入延時。

相比之前的 Webpara 並行載入架構,Ultralisk 的改動並不是根本性的變化,最主要的變動還是在於部署方面:從 8 core 的主機換到 32 core 的,然後把分布在多台伺服器上的 master / fastrouter 和 web workers 組織到一台主機里,用匯流排代替之前的網路交互,降低延遲。

multiprocessing 這種暴力的東西只適合做 one-child-per-request 類型的傻大粗笨的事情。只要 worker 是常駐進程,任務總需要 routing 到合適的 worker 進程去,這一層就取不掉。

文中明確提到了

The fastrouter process is a custom-built multi-threaded queue server written in C++ which supports very fast enqueues and dequeues of arbitrary data.

所以他們對他們的 fastrouter 這個東西相當滿意。後面更明確的提到了:

To achieve these goals, we re-arranged various pieces of our architecture, collected detailed metrics through several A/B tests and chose the best possible configuration that could achieve those goals.

所以他們在做的實際上是 re-arrangement 而不是 rewrite。因為每個請求都可能在 master - worker 之間產生多次往返,他們通過把 master - worker 集中在同一個伺服器上,讓匯流排代替網路來降低延遲,完全利用了新的 32 核伺服器的優勢。這在舊的 8 核伺服器上根本跑不起來,因為騰挪空間太小,調度根本沒有優勢。我猜想這個 master:worker 比值是發生了變化的。

所以實際上現在有趣的是,他們的 HA Proxy 是如何給 master 分配請求的。因為以前冷熱是由 fastrouter 分配到 worker 為主,而現在實際上冷熱是把 master 和 worker 綁在一個鍋里煮了,這對 HA Proxy 的要求其實變高了。

這不算什麼 architectural innovation。相比 Google 的混合式調度架構,這個還就是過家家。
Omega: ?exible, scalable schedulers for large compute clusters
http://eurosys2013.tudos.org/wp-content/uploads/2013/paper/Schwarzkopf.pdf

[1] Quora Infrastructure: How does Quora"s parallel rendering architecture work?
[2] Improving Site Speed
[3] Web Server Architecture at Quora


推薦閱讀:

大家都用 Python 來做什麼啊?
如何用一段簡單的代碼講述一個悲傷的故事?
如何處理 Python 入門難以進步的現象?
有多少人按@蕭井陌大神給出的Python+Flask路線找到工作了?
初學 Python,有哪些 Pythonic 的源碼推薦閱讀?

TAG:Quora | Python | Web 架構 | 並行計算 |