2012-10-26 94 views
1

我正在尋找在雲中建立一個基於Akka的應用程序,用於我正在引導的車庫啓動;根據應用程序的性質,它是半狀態的,儘可能地緩存在RAM中用於性能。 (它可以定期關閉和重新啓動,但我們希望主要通過Actors中的緩存信息進行操作。)Cloudbees應用程序中的實例可以直接通信嗎?

該體系結構是爲服務器集羣設計的,它們之間需要進行通信,以便節點A上的用戶會話可以在適當時查詢節點B上的中間件Actor。所以我的問題是,在CloudBees中有多難?

我從this page不解的是,有沒有自動目錄服務來管理這種羣集內通信的,但我可以說大概住 - 損壞程度較重,我應該能夠通過管理髮現DB,當每個節點出現時就註冊自己,並打開與其他人的多對多通信。

我想檢查的是,這種溝通很簡單。每個節點是否都有一個可靠的本地IP,它可以通知其他人聯繫它,這在應用程序運行期間至少是穩定的?或者是否有另一種/更好的方式讓節點將其地址通告給運行該應用程序的其餘節點?

(我假設一個應用程序的所有節點共享同一個數據庫實例。)

這裏任何指導,將不勝感激。我很快要選擇託管服務提供商,並繼續返回CloudBees作爲最有希望的選項...

+0

我應該注意到:這可能看起來像一個愚蠢的問題,但Heroku用流程隔離這個名字來達到這樣的難度,我不得不將它作爲一個平臺來消除。我不希望任何給定的VM始終可靠地運行,但是我確實需要我的羣集能夠像羣集一樣運行...... –

+0

最好的辦法是使用此問題來ping銷售-at- cloudbees.com 。 –

回答

4

當前對實例彼此之間沒有任何限制 - 訣竅在於發現成員資格。還有的是,不久將發佈一個API,讓您跟蹤的成員 - 但現在,下面可能工作:

  • 要獲得端口,看看$ PWD文件名/ .genapp/(例如System.getenv(「PWD」)+「.genapp/ports」) - 列出該目錄中的文件 - 通常只有1個 - 文件名是端口)。還有其他方法 - 例如JVM應用程序上的「sun.java.command」系統屬性。
  • 主機名可以通過慣用的手段來獲得(例如,InetAddress.getLocalHost()的gethostname()):該主機 名稱將是專用名稱 - 即它會解析爲私有IP - 好節點到節點通訊。
  • 公共IP /主機名:(從服務器)執行HTTP GET到以下網址: http://instance-data/latest/meta-data/public-hostname(只 回報當然是服務器端的公網IP)。

(見http://developer-blog.cloudbees.com/2012/11/finding-port-or-address-of-your.html

然後就可以,如你所說,在啓動時,註冊一個DB相應的端口/專用主機名,然後讀取每個節點爲「種子」的集羣( akka不必知道所有成員 - 只要足夠的種子)我會認爲一個2階段的啓動:1:註冊主機/端口,2,尋找其他成員,將它們作爲種子成員添加到本地Akka配置(可能需要定期做相同的一段時間,因爲其他節點啓動 - 以確保它播種足夠)

從我的閱讀Akka設置在這裏:http://doc.akka.io/docs/akka/snapshot/scala/remoting.html

它看起來像你可以指定端口 - 所以如果可能的話,我會將它設置爲app_port環境變量 - 這意味着每個節點都可以通過專用主機名與該端口進行通信。然而,http流量也將被路由到它 - 也可以akka處理這個 - 或者它需要爲akka分配一個端口,而另一個端口則需要任何http接口?

+0

我想我們會在這裏通過電子郵件聊天,但是謝謝 - 這是令人鼓舞的。不確定HTTP流量的問題;我們可能不得不嘗試一下,看看... –

相關問題