【问题标题】:Cloud Foundry for SaaSSaaS 的 Cloud Foundry
【发布时间】:2016-12-05 18:04:58
【问题描述】:

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

在我的 SaaS 应用程序的创建服务中,我还创建了另一个服务的实例(比如服务 A),即。还为每个加入我的应用程序的租户创建另一个服务 (service-A) 的新服务实例。

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

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

这意味着每位新入职客户的服务经纪人都需要停机。

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

【问题讨论】:

    标签: service cloud-foundry restart saas


    【解决方案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

    【讨论】:

    • 感谢您的回复。使用 CC-API 很常见吗?你的经历有什么不好的地方吗?
    • 我相信这是一个很常见的场景。 cf cli 在幕后使用 CC-API。这个 API 的难点在于它使用 oauth 进行身份验证。但我想有些图书馆可以为你做到这一点。
    • 有 CloudController API 库,尤其是 Java 库:github.com/cloudfoundry/cf-java-client
    • @user152468:谢谢!我会试试这个。
    • @EngineerBetter 感谢 API
    【解决方案2】:

    听起来您没有以“正确”的方式使用服务。如果没有更多用例的详细信息,很难说清楚。例如,为什么您的经纪人需要附加这项附加服务?

    回答您的问题:

    1) 不是这样的。您正在使用服务绑定来表示数据,而不是将它们用作支持服务。许多服务代理(我写过不少)需要动态配置诸如 Cassandra 集群之类的东西,但它们会在自己的数据存储中保留一些关于哪些 Cassandra 集群属于哪个 CF 服务的状态。代理不会绑定到它负责创建的每个事物。

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

    【讨论】:

    • 在 Cassandra 的示例中,您的意思是默认情况下服务会为它们保留一些集群?如果服务代理需要多一个集群,会发生什么?集群不应该在代理需要时保留吗?
    • 这是一个非常具体的问题,取决于 Service Broker 的实现。更复杂的代理通过 BOSH 或其他方式提供新的虚拟机。除了将您自己的服务绑定到他们的应用之外,我仍然不明白您想要实现什么,或者为什么您需要为您的代理提供额外的服务实例。
    • 我的用例类似于 user152468 在其他答案中提到的用例。你觉得这种用例有什么缺陷吗?
    • 我还是不明白为什么用户的应用需要绑定数据服务;这听起来像是你的经纪人应该绑定的东西。如果用户绑定到您的一项服务,他们不会期望突然将两项服务绑定到他们的应用程序。也许您可以“组合”其他服务。您的代理完成它需要做的事情,并调用另一个代理,将应用程序需要的任何凭据传递回 CloudController。这使得用户可以清楚地看到涉及的许多服务。
    • 没错,我的经纪人正在为每个创建我的服务实例的客户创建并绑定到另一个服务。现在我的代理需要重新启动/重新启动以获取此服务的凭据,这就是问题所在。
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2021-10-09
    相关资源
    最近更新 更多