2010-09-15 66 views
5

我正在寫一個小型代理應用程序,它應該是多餘的,例如,主代理將在一臺服務器上運行,而冗餘代理將在單獨的服務器上運行。是否有一個簡單的高可用性框架,可以用來實現這種冗餘?例如,這個HA框架會在實例之間發送ping,並在第一個實例發生故障時在另一個實例上引發某種異常或通知。Java HA框架

回答

1

近年來,構建這樣的系統一直是我的日常工作。我發現jgroups 一個非常有用的工具來接收和處理這種類型的分組事件。如果你想建立你自己的高可用性基礎架構,就是這種情況。我不知道,但也許在你的情況下,只需一個簡單的反向代理(如HAProxy)就足夠了。

-2

hadoop是開始

+0

認真嗎? Hadoop是一個分佈式計算框架。爲什麼你會爲此使用map-reduce框架? – 2010-09-15 14:23:58

0

如果你想HA毫不費力,只需使用與HA能力的一些負載平衡器例如一個好地方Ultramonkey,LVSkeepalived

在HA配置中,您通常希望使用虛擬IP,因此即使您將此ping/notify功能作爲框架,您仍然有要做的事情(一旦另一個實例失敗,開始響應對虛擬IP的請求)。所以除非你正在尋找學習機會,否則我會建議使用中間件,而不是使用框架自己編寫代碼。

您可以爲這些中間件配置多個運行狀況檢查。例如,簡單的健康檢查可能會向您的應用發起GET請求。定期在響應中查找特定的字符串(例如「XXX正在運行」),以確保您的應用程序。運行良好。

0

你不提供有關應用程序做的工作太多細節,所以這取決於如何狀態是什麼,它是否能容忍輕微dataloss,是對時間要求嚴格,你的價值開發時間過機時,你可以有不同的解決方案。

上面有一些很好的建議,我會補充一下:看看JMS和持久消息。通常情況下,這些恢復相當微不足道,但是以延遲成本爲代價(除非你通過商業產品並熟悉它或支付供應商來調整應用程序)。通過JMS隊列,您可以實施主動 - 主動處理,並節省您自己的頭痛故障檢測。

另一個方向看被分配狀態管理/羣集框架像GigaSpaces的,連貫,寶石,Infinispan的,Gridgain和陶土。這些可以複製您的數據並保證不同的服務質量。他們大多數都帶有某種類型的故障檢測和分佈式管理機制。