Cloud Foundry 中实例之间的通信
Communication between instances in Cloud Foundry
是否可以在部署到 Cloud Foundry 的应用程序的多个实例之间进行通信?
我查看了 Cloud Foundry API,但找不到任何提及此主题的内容。
我已经尝试过 Hazelcast,但不幸的是,我的 Cloud Foundry 提供商不支持多播,所以我必须知道每个其他实例的 IP 地址才能连接。
我想我不可能是唯一对此感兴趣的人。
我建议您使用消息服务(如 RabbitMQ)在应用程序实例之间进行通信。您还可以将共享信息存储在数据库服务或文件系统之外的任何远程位置。
在云中构建需要此类通信的应用程序通常不是一个好的做法。理想情况下,每个实例都应该能够 运行 独立并且是无状态的。
如果您可以通过编程方式访问 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 即时增强它。
在某些情况下,实例需要相互通信而不是使用外部组件来提高效率或避免依赖。一种可能性是使用 gorouter 本身和 http 中的特定实例 id,低于 header。
X-Cf-App-Instance=app-uuid:instanceno-integer
这个 link 中解释了我尚未探索的其他选项
https://ict.swisscom.ch/2018/05/container-networking-with-cloud-foundry/
是否可以在部署到 Cloud Foundry 的应用程序的多个实例之间进行通信? 我查看了 Cloud Foundry API,但找不到任何提及此主题的内容。 我已经尝试过 Hazelcast,但不幸的是,我的 Cloud Foundry 提供商不支持多播,所以我必须知道每个其他实例的 IP 地址才能连接。
我想我不可能是唯一对此感兴趣的人。
我建议您使用消息服务(如 RabbitMQ)在应用程序实例之间进行通信。您还可以将共享信息存储在数据库服务或文件系统之外的任何远程位置。
在云中构建需要此类通信的应用程序通常不是一个好的做法。理想情况下,每个实例都应该能够 运行 独立并且是无状态的。
如果您可以通过编程方式访问 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 即时增强它。
在某些情况下,实例需要相互通信而不是使用外部组件来提高效率或避免依赖。一种可能性是使用 gorouter 本身和 http 中的特定实例 id,低于 header。 X-Cf-App-Instance=app-uuid:instanceno-integer
这个 link 中解释了我尚未探索的其他选项 https://ict.swisscom.ch/2018/05/container-networking-with-cloud-foundry/