多租户是一种软件架构的名称,其中一个应用程序实例在远程服务器上运行,服务于许多客户组织(也称为租户)。
但这不是每个Web 应用程序的情况吗?数十、数百甚至数千用户都登录到系统,访问相同的软件,但从他们自己的“用户帐户”的上下文中?还是 Google 的 Multitenancy API 是某种用于开发可用作多个应用程序后端的通用数据抽象层的 API?
我想我不明白“谷歌多租户”应用程序的含义,因此不了解多租户 API 的目的或有用性。在此先感谢您的澄清!
多租户是一种软件架构的名称,其中一个应用程序实例在远程服务器上运行,服务于许多客户组织(也称为租户)。
但这不是每个Web 应用程序的情况吗?数十、数百甚至数千用户都登录到系统,访问相同的软件,但从他们自己的“用户帐户”的上下文中?还是 Google 的 Multitenancy API 是某种用于开发可用作多个应用程序后端的通用数据抽象层的 API?
我想我不明白“谷歌多租户”应用程序的含义,因此不了解多租户 API 的目的或有用性。在此先感谢您的澄清!
考虑实现多租户的标准方式:您将“租户 ID”字段添加到一个或多个表,然后将该 ID 包含在 WHERE 子句中。然后你索引那个字段。
您可以在 App Engine 中采用相同的方法,将索引属性添加到您的某些实体以保存租户 ID,并在 GQL WHERE 子句(或过滤器)中小心地包含该 ID。这将花费您更多的写入成本(对于该属性上的两个索引),如果 ID 参与包含其他过滤器的查询,则会花费更多,因为这些将需要包含 ID 的附加复合索引。
或者您使用我们的多租户 API,它可以为您提供相同的效果,而无需额外的索引写入成本。你会得到稍微简单的代码,并且花费更少。
此处的多租户不是指您的应用程序的用户,而是指您的应用程序的“实例”以及“单独的”数据存储。
它们并不是真正独立的实例或独立的数据存储,因为这些请求可能由共享实例提供服务,并且它们肯定是在与同一个数据存储通信。但是,通过使用 API,您可以设置您的应用程序,以便将数据划分到不会相互污染的单独命名空间中。
如果您的应用程序只有一个用户,那么多用户和多租户几乎是一回事。如果您有多个用户,那么通常您将在用户之间共享数据。如果是这样,您可以使用多租户仅在特定用户组内共享数据,并将其余部分划分为他们自己的租户。
正如 jtahlborn 正确地指出的那样,我们的每个 GAE 应用程序都已经是 GAE 基础架构上的租户。我们无法在不同的应用程序之间共享数据,因为它们彼此完全分开。
正如 Dave 所说,我们可以通过向所有数据添加某种域名或分区 ID 来自己实现多租户。API 只是提供了一种更简单的方法来做到这一点。
不同之处在于您在谈论谁的租户。GAE 从第一天开始就是多租户的,因为每个程序(租户)都运行在一个通用的 GAE 基础架构中。但是,最初,您的程序本身只管理一组数据(当 GAE 首次发布时)。GAE“多租户 API”使您的单个程序能够管理其(您的)自己的租户(因此您的租户而不是GAE 的租户)。
简明扼要地说:“多租户 API”允许您在单个 GAE 程序中管理自己的租户(用户),该程序又作为租户(程序)托管在 GAE 基础架构中。
当然,从理论上讲,您总是可以从 GAE 的第一天开始就这样做,但是管理租户之间数据的所有工作都将在您的代码中处理。“多租户 API” 试图消除程序员的痛苦,并使在程序中分割数据变得更加简单。