8

我們有一個計算密集型服務,用於執行大量轉換。它在很大程度上受計算限制(CPU綁定)過程。本質上發生的是我們有一個消息代理,它通過Thrift將消息發送到處理服務。使用Zookeeper和Thrift進行負載均衡服務

現在我們有多個不同的處理服務,它們運行不同的algos來處理消息 - 這些消息被路由到一個或多個處理算法。我們的消息量是可變的,處理算法的需求也是可變的(即我們可以得到許多包含XYZ的消息,然後發送給算法1,否則發送給算法2)。

我們希望將其擴展到水平可伸縮的東西。所以我們有多個運行處理算法的節點。現在,根據消息傳遞負載,我們的Thrift請求應該發送到不同的服務器(假定所有服務正在運行每個處理Algo1到3的實例)。例如,我們正在獲取大量我們想要在Algo 1上處理的消息,然後我們有兩臺運行算法1的服務器,第三臺服務器負責處理其他兩個算法(Algo 2 & 3)的請求。

因此係統看起來是這樣的:

Client ----Request-------| 
       -----------|-------------------- 
       | Coord & Load Balancer Service | ... like zookeeper 
       -------------------------------- 
         <--|--> 
         | Route messages to servers... 
    Server1:    Server2:   Server 3: 
Algo1 instance  Algo1 instance  Algo2 instance 
              Algo3 instance  

所有過程都用Java編寫的。

因此,使用Zookeeper進行設置有多容易。我知道當我們添加或更改算法時,我們可以很容易地使用Zookeeper來處理事物的配置方面(即服務器偵聽算法更新或添加並按配置提供),但我們如何管理負載平衡方面?

乾杯!

+0

嗨,你解決了這個問題嗎?我可以問你你是怎麼做到的?我現在正在研究同一個問題(可擴展的自維護節儉服務部署),任何經驗或建議都會很好; - ) –

+0

@Sergey Vasilyev,我們以類似的方式實現了我們自己的解決方案 - 頂級ZooKeeper到諾伯特做事情的方式(有許多較少的特徵)。可以考慮實施諾伯特,如果一些空閒時間滾動,非常漂亮的項目。國際海事組織不做我們所做的事情,請看下面的喬納斯的答案。讓我知道你是否仍然想要更多關於我們的impl的信息。 – NightWolf

+0

是的,與Norbert類似,不同之處在於我使用Python和PHP(已經),並且將在將來使用Java和C/C++(最近或者足夠遠 - 尚未決定)。這就是我選擇Thrift作爲RPC解決方案的原因。唯一剩下的就是負載平衡和集羣管理。 ZooKeeper看起來不錯,但我正在尋找特定的架構解決方案。從這幅圖上看,諾伯特是我所追求的基本概念。那麼,它好嗎?它穩定嗎?管理容易嗎?或者你能描述你是如何解決這個問題的?我的jabber是「[email protected]」,Skype是「nolar.info」。謝謝:) –

回答

6

你們可能想要像LinkedIn上的Norbert:http://sna-projects.com/norbert/ 他們使用客戶端和服務器之間的持久對等通信,並使用zookeeper進行服務註冊和帶外信令。 很酷的東西。 它使您能夠啓動另一個處理節點,可以在高負載時幫助處理請求。

/Jonas

+0

非常好。我們最終實現了這樣的目標,沒有像全功能那樣接近,而是採用了類似的概念。我們幾個月前不知道這件事。謝謝! – NightWolf