【问题标题】:Communication between instances in Cloud FoundryCloud Foundry 中实例之间的通信
【发布时间】:2021-09-21 11:57:06
【问题描述】:

是否有可能在部署到 Cloud Foundry 的应用程序的多个实例之间进行通信? 我检查了 Cloud Foundry API,但找不到任何关于这个主题的内容。 我已经尝试过 Hazelcast,但不幸的是,我的 Cloud Foundry 提供商不支持多播,所以我必须知道每个其他实例的 IP 地址才能连接。

我想我不可能是唯一对此感兴趣的人。

【问题讨论】:

    标签: cloud-foundry hazelcast


    【解决方案1】:

    我建议您使用消息传递服务(如 RabbitMQ)在应用程序实例之间进行通信。您还可以将共享信息存储在数据库服务或文件系统之外的任何远程位置。

    在云中构建需要此类通信的应用程序通常不是一个好习惯。理想情况下,每个实例都应该能够独立运行并且是无状态的。

    【讨论】:

    • 谢谢@ram-vennam。我同意您的观点,即此类应用程序应使用不同的架构或不部署到云中。在我的例子中,每个实例都有一个Scheduler(Node.js 中的调度模块或 JavaEE 中的注释)。对于概念验证,调度程序每分钟将一个值写入数据库。但是对于 2..n 个实例,我不想每分钟有 2..n 个条目,所以我正在寻找一些东西来同步这些实例,以便所有实例中只有一个写入数据库 - 可能每个实例都有一个不同的实例分钟由于负载或可用性。
    • 我看到 RabbitMQ 是 Cloud Foundry 中提供的一项服务,所以我会试一试。非常感谢你的想法。我想我会尝试实现 RabbitMQ 的“工作队列”模式。
    • 我在 CF 中使用了 Redis PUB/SUB 来实现类似的场景。所有应用程序实例都注册到特定的 Redis 通道并通过它广播消息。如果您的分布式问题需要某种同步,它可能会变得更加复杂。
    【解决方案2】:

    如果您可以通过编程方式访问 IP 地址,则可以构建 Hazelcast Config 对象并使用它来设置集群。然后,您可以依赖 tcp-ip 发现。

    伪代码:

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

    您甚至可以加载现有的 Hazelcast XML 配置并使用 XmlConfigBuilder 即时增强它。

    【讨论】:

    • 谢谢@pveentjer。这是我的计划,但在 Cloud Foundry 中,每个实例在启动时都会获得一个任意/无法确定的 IP 地址。因此其他实例不知道 IP 地址。这就是我依赖多播的原因——不幸的是,我的应用程序云提供商没有激活/阻止它。顺便说一句,我想使用 Vert.x 作为 EventBus 进行通信。它原生支持 Hazelcast,而且非常容易设置。
    • 大多数 CF 操作员,尤其是运行不受信任应用程序的公共操作员,将禁用直接容器到容器通信。虽然直接的容器到容器通信可能会让你做一些有趣的事情,但如果一个坏人可以在同一个 CF 安装上运行一个应用程序,它也会允许他们对你做一些有趣的事情。
    【解决方案3】:

    在某些情况下,实例可能需要在它们之间进行通信,而不是使用外部组件来提高效率或避免依赖。一种可能性是在 http 中使用带有特定实例 ID 的 gorouter 本身,并带有以下标头。 X-Cf-App-Instance=app-uuid:instanceno-integer

    此链接中解释了我尚未探索的其他选项 https://ict.swisscom.ch/2018/05/container-networking-with-cloud-foundry/

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2020-04-27
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多