【问题标题】:Google App Engine Multitenancy APIGoogle App Engine 多租户 API
【发布时间】:2012-10-24 11:04:22
【问题描述】:

根据GAE docs on the Multitenancy API

多租户是一种软件架构的名称,其中一个应用程序实例在远程服务器上运行,服务于许多客户组织(也称为租户)。

但这不就是每个 Web 应用程序吗?数十、数百甚至数千用户都登录到系统,访问相同的软件,但从他们自己的“用户帐户”的上下文中?还是 Google 的 Multitenancy API 是某种用于开发可用作多个应用程序后端的通用数据抽象层的 API?

我想我不明白“Google 多租户”应用程序的含义,因此不了解多租户 API 的用途或用途。在此先感谢您的澄清!

【问题讨论】:

    标签: java api google-app-engine multi-tenant


    【解决方案1】:

    考虑实现多租户的标准方式:将“租户 ID”字段添加到一个或多个表,然后将该 ID 包含在 WHERE 子句中。然后你索引那个字段。

    您可以在 App Engine 中采用相同的方法,将索引属性添加到您的某些实体以保存租户 ID,并在 GQL WHERE 子句(或过滤器)中小心地包含该 ID。如果 ID 参与包含其他过滤器的查询,这将花费您更多的写入成本(对于该属性上的两个索引),因为这些将需要包含 ID 的附加复合索引。

    或者您使用我们的多租户 API,它可以为您提供相同的效果,而无需额外的索引写入成本。您会得到更简单的代码,并且花费更少。

    【讨论】:

    • 此外,所有(几乎)其他服务都支持命名空间 API。因此,通过在开始处理时设置命名空间,您进行的所有 GAE 服务调用都将被限制在指定的命名空间/租户中。依赖这个全局 API 比尝试自己实现隔离效果更好。
    【解决方案2】:

    此处的多租户并不是指您应用的用户,而是指具有“独立”数据存储的应用的“实例”。

    它们并不是真正独立的实例或独立的数据存储,因为这些请求可能由共享实例提供服务,并且它们肯定与同一个数据存储通信。但是,通过使用 API,您可以设置您的应用程序,以便将数据划分到不会相互污染的单独命名空间中。

    如果您的应用只有一个用户,那么多用户和多租户几乎是一回事。如果您有多个用户,那么通常您将在用户之间共享数据。如果是这样,您可以使用多租户仅在特定用户组内共享数据,并将其余部分划分为他们自己的租户。

    正如 jtahlborn 正确指出的那样,我们的每个 GAE 应用程序都已经是 GAE 基础架构上的租户。我们无法在不同的应用程序之间共享数据,因为它们彼此完全分开。

    正如 Dave 所说,我们可以通过向所有数据添加某种域名或分区 ID 来自己实现多租户。 API 只是提供了一种更简单的方法来做到这一点。

    【讨论】:

    • 我们如何为不同的租户分开计费?有办法吗?
    • @xtrahelp.com 您是在谈论 GAE 计费还是您自己为租户单独计费?最好将其作为关于 SO 的单独问题提出 - 如果您创建一个问题,我会尽力回答。
    【解决方案3】:

    区别在于您在谈论谁的租户。 GAE 从第一天开始就是多租户的,因为每个程序(租户)都运行在一个通用的 GAE 基础架构中。但是,最初,您的程序本身只管理一组数据(当 GAE 首次发布时)。 GAE“多租户 API”使您的单个程序能够管理其(您的)自己的租户(因此 您的租户而不是 GAE 的租户)。

    简明扼要地说:“多租户 API”允许您在单个 GAE 程序中管理自己的租户(用户),该程序又作为租户(程序)托管在 GAE 基础架构中。

    当然,理论上,您总是可以从 GAE 的第一天开始执行此操作,但是管理租户之间数据的所有工作都将在您的代码中处理。 “多租户 API”试图消除程序员的痛苦,并简化程序中的数据分段。

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2012-01-06
      • 2017-10-12
      • 2012-08-24
      相关资源
      最近更新 更多