2015-08-19 45 views
1

部署到Cloud Foundry的應用程序的多個實例之間是否可以進行通信? 我檢查了Cloud Foundry API,但找不到任何關於此主題的提及。 我已經嘗試了Hazelcast,但不幸的是,我的Cloud Foundry提供程序不支持多播,因此我必須知道每個其他實例的IP地址才能連接。Cloud Foundry中實例之間的通信

我想我不能是唯一對此感興趣的人。

回答

2

我建議您使用消息服務(如RabbitMQ)在應用程序實例之間進行通信。您還可以將共享信息存儲在數據庫服務或文件系統外的任何遠程位置。

在雲中構建需要此類通信的應用程序通常不是一個好習慣。理想情況下,每個實例能夠獨立運行並且無狀態。

+0

謝謝@ ram-vennam。我同意你這樣的應用程序應該使用不同的架構,或者不要部署到雲中。就我而言,每個實例都有一個'Scheduler'(Node.js中的schedule-modul或JavaEE中的註釋)。爲了證明概念,調度器每分鐘只將一個值寫入數據庫。但有了2..n個實例,我不希望每分鐘都有2..n個條目,所以我正在尋找某些東西來同步這些實例,以便所有實例中只有一個寫入數據庫 - 可能每個實例都有一個不同的實例分鐘由於負載或可用性。 – user3105453

+0

我看到RabbitMQ是Cloud Foundry中的一項服務,所以我會試一試。非常感謝你的想法。我想我會嘗試實施RabbitMQ的「工作隊列」模式。 – user3105453

0

如果您可以通過編程訪問IP地址,則可以構建Hazelcast配置對象並使用它來設置羣集。然後你可以依靠tcp-ip發現。

僞代碼:

List<String> ipAddresses = cloudfoundry.getIps() 
Config config = new Config(); 
config.getJoinConfig().getIpDiscovery().addMembers(ipAddresses) 
HazelcastInstance hz = Hazelcast.newHazelcastInstance(config); 

你甚至可以裝入現有的Hazelcast XML配置和使用XmlConfigBuilder提高它的飛行。

+0

謝謝@pveentjer。這是我的計劃,但在Cloud Foundry中,每個實例在啓動時都會獲得任意/不可確定的IP地址。所以IP地址對於其他實例是未知的。這就是爲什麼我依靠多播 - 這是不幸的是我的應用程序雲提供商不活動/阻止。順便說一下,我想使用Vert.x作爲通訊的EventBus。它本地支持Hazelcast並且非常容易設置。 – user3105453

+0

大多數CF操作員,特別是運行不受信任應用的公共操作員,將禁止直接容器到容器通信。雖然直接的容器到容器通信可能會讓你做一些有趣的事情,如果一個壞人可以在同一個CF安裝上運行應用程序,它也可以讓他們爲你做一些有趣的事情。 –