2016-12-05 125 views
1

我正在Cloud Foundry上为我的SaaS应用程序实施服务代理。Cloud Foundry for SaaS

在我的SaaS应用程序的创建服务上,我创建了另一个服务的实例(也称为service-A),即ie。另一个服务(service-A)的新服务实例也为每个承载我的应用程序的租户创建。

新创建的服务实例(service-A)的详细信息通过环境变量传递给我的服务代理。

为了能够处理这个新注入的环境变量,服务代理需要重新进行重新启动。

这意味着每个新的入职客户都需要服务代理的停机时间。

我有以下问题: 1)在Cloud Foundry中如何处理这些用例? 2)为什么Cloud Foundry选择使用环境变量来传递使用服务所需的信息?这看起来很有限,因为它需要重启应用程序。

回答

1

作为第一个猜测,您的服务可能是某种提供给客户的API。这个API必须将它发送的数据存储在某个数据库(例如MongoDb或Mysql)中。所以MongoDb或Mysql就是你所说的Service-A。

由于您希望客户的API端点性能彼此独立,因此您需要为每个客户(即服务的每个服务实例)提供专用数据库。

如果您要从服务代理的环境中获取这些数据库的凭据,那么您需要重新调整服务代理。或者至少你必须重新读取VCAP_SERVICES环境变量。但还有另一种解决方案:

使用CC-API创建服务,并将它们绑定到您喜欢的任何应用程序。然后再次使用CC-API来查询此应用程序的绑定。这将包括凭证。这里是链接到API文档在此端点:

https://apidocs.cloudfoundry.org/247/apps/list_all_service_bindings_for_the_app.html

+0

感谢您的回复。是否使用CC-API通用?你的经历有没有不好的一面? – Abhinav

+0

我相信这是一个很常见的情况。此外,cf cli在幕后使用CC-API。这个API的难点在于它使用oauth进行身份验证。但我想有些图书馆可以为你做这件事。 – user152468

+0

有CloudController API库,特别是Java:https://github.com/cloudfoundry/cf-java-client –

1

这听起来像你没有以'正确'的方式使用服务。如果没有关于用例的更多细节,很难说清楚。例如,为什么你的经纪人需要附加这项附加服务?

要回答您的问题:

1)不是这样的。您正在使用服务绑定来表示数据,而不是将它们用作后备服务。许多服务代理(我写了很多)需要动态提供像Cassandra集群这样的东西,但是它们保留了一些关于哪些Cassandra集群属于它们自己的数据存储中的哪个CF服务的状态。经纪人不会绑定到它负责创建的每件东西。

2)因为12 Factor applications should treat backing services as attached, static resources。说一个新的MySQL数据库添加到正在运行的应用程序是不正常的。

+0

在卡桑德拉的例子,你的意思是,默认情况下的服务将为其保留一些集群?如果服务代理需要一个集群,会发生什么?经纪人需要时不应该保留群集? – Abhinav

+0

这是一个非常具体的问题,取决于Service Broker的实现。更复杂的经纪人通过BOSH或其他方式提供新的虚拟机。 我仍然不明白你想要达到什么目的,或者你为什么需要为代理提供额外的服务实例,除了将自己的服务绑定到他们的应用程序。 –

+0

我的用例与user152468在其他答案中提到的类似。你看到这种用例存在任何缺陷吗? – Abhinav