0

我正在尝试为 Cloud Foundry 创建集群缓存服务。我了解我需要实现 Service Broker API。但是,我希望这个服务是集群的,并且在 Cloud Foundry 环境中。如您所知,容器到容器连接 (TCP) 尚不支持,我不想将我的后端托管在另一个环境中。

基本上我的问题与这个问题几乎相同:http: //grokbase.com/t/cloudfoundry.org/vcap-dev/142mvn6y2f/distributed-caches-how-to-make-it-work-multicast

我正在努力实现他建议的这个解决方案:

B) 是通过实现 Service Broker API 来创建 CF 服务,如本文档页面底部的一些示例所示 [1]。服务没有固有的网络限制。因此您可以在集群中拥有一个使用多播的 CF 缓存服务,那么您的应用程序上就会有本地缓存​​客户端,可以使用 TCP 等出站协议连接到该集群。

首先,这个服务在哪里?在 DEA?后端实现会在代理本身中吗?如何实现扩展集群的后端,重新启动同一个服务代理?

第二个也是另一个非常重要的问题是,如果应用程序不允许 TCP 连接,其他服务如何工作?例如,MySQL 服务如何与应用程序通信?

4

2 回答 2

1

有几种不同的方法可以解决这个问题,解决方案越健壮,就越复杂。

最简单的解决方案是拥有固定数量的后端缓存服务器,每个都有自己不同的路由,并让您的客户端应用程序在应用程序层对这些路由实施 (HTTP) 多播。如果您希望后端缓存服务器作为 CF 应用程序运行,那么目前,所有解决方案都需要在应用程序层执行 HTTP 多播逻辑。

下一步是引入一个中间服务代理,以便您的客户端应用程序都可以绑定到一个服务以获取后端缓存服务器的路由列表。因此,您将部署后端,然后在了解后端的情况下部署服务代理 API 实例,然后当客户端应用程序绑定时,它们将在用户提供的服务元数据中获取此信息。

当您想向上或向下扩展后端时会发生什么?然后您可以变得更复杂,其中后端基本上将自己注册到某种中央元数据/配置/发现服务,并且您的客户端应用程序绑定到该服务并可以定期查询它以获取缓存服务器列表的实时更新。

您也可以将多播逻辑移动到单个(集群)服务中,因此:

  • 后端缓存注册到 config/metadata/discovery 服务
  • 多播器定期查询发现服务以获取缓存服务器路由列表
  • 客户端应用程序向多播服务发出请求

如果您自己做元数据服务,那么其中一个困难是实现。如果你想要集群,你需要实现一个高度可用的一致的数据存储,这几乎是你要解决的原始问题,除了服务处理将数据复制到集群中的所有节点,所以你不必多播。

于 2015-11-23T22:16:06.153 回答
0

您可以查看https://github.com/cloudfoundry-samples/github-service-broker-ruby以获取作为 CF 应用程序运行的示例服务代理。

于 2015-12-01T00:46:47.950 回答