Nile:一种新的多租户SaaS数据库


现代 SaaS 应用程序是多租户的。我们是第一个将租户虚拟化到数据库中的数据库。

这使得无缝租户隔离、每租户备份以及放置在全球任何地方的多租户或专用基础设施上成为可能。

您只需一个 Postgres 的经验就可以完成这一切!

您不必管理多个数据库、构建复杂的隔离权限或编写有缺陷的脚本来从备份中读取特定租户数据。

Nile将租户虚拟化到数据库中:

  • 1.租户隔离和每租户备份
  • 2.加入组织和用户管理
  • 3.全球租户安置
  • 4.租户感知向量嵌入
  • 5.即时内部客户仪表板
  • 6.轻松的弹性

在租户模型之上,我们提供选择加入的用户管理功能、客户特定的向量嵌入和即时租户管理仪表板。您只需很少的代码即可完成所有这些工作。

此外,Nile 的 Postgres 专为云而构建,可轻松扩展并提供真正的无服务器体验。

背景
在加入 Nile 之前,我在 Confluence 工作了六年,帮助该公司从主要内部部署转变为成功的全球 SaaS 公司。

通过这次旅程,我了解了向数千名客户和数万名用户推出和扩展 SaaS 产品所面临的挑战:
构建 SaaS 时的所有这些问题都与数据有关,但数据库几乎无法提供帮助。

我们花费了大量时间来管理和隔离租户、支持不同的租户部署模型、处理长时间停机以从备份恢复租户数据,以及优化每个租户的性能。我们还必须构建组织和用户管理功能、存储数据并将其移动到公司的不同部门、跟踪使用情况、向个人客户计费以及处理许多其他 SaaS 问题。当我们与来自不同垂直领域的许多其他公司交谈时,问题都是相似的。

为什么SaaS如此具有挑战性?为什么构建Confluent Cloud的工程师数量是构建Apache Kafka的5倍?
在过去的两年里,我们与SaaS公司进行了交谈,并迭代了方法和解决方案。
我们开始相信,SaaS的许多问题都存在于数据层,而且大多数数据库管理员在SaaS方面做得不够好。

我们开始思考 SaaS 的理想数据库是什么样子:
它需要哪些基本要素?我们如何创建一个完全集成的解决方案,简化 SaaS 的开发和扩展,同时为开发人员提供与其首选工具集成的灵活性?

我们选择 Postgres 作为我们的基础数据库。我们在其中构建了租户虚拟化,允许将许多虚拟租户数据库放置在物理 Postgres 数据库上。

我们构建了单一数据库体验来与所有这些虚拟租户数据库进行交互。这是一个强大的原语,提供了世界一流的开发人员经验并帮助解决所有租户管理问题。

  • 这些虚拟租户数据库是隔离的,有自己的备份,可以放置在多租户或专用基础设施上,并且可以部署到全球任何位置。
  • 在租户这个基础之上,我们还建立了用户的概念以及用户与租户的关系。身份验证和授权语义在此基础上执行,为租户和用户提供坚不可摧的安全级别。
  • 该数据库可以放置在更靠近租户的位置,并在索引大小变大且消耗资源时无限扩展。
  • 数据库被构建为无服务器并利用云原生解决方案。该数据库根据第一原则构建,显着简化了 SaaS 的开发和扩展。

是什么让 SaaS 变得现代化,为什么它很难构建?
我们将 SaaS 定义为任何多租户应用程序。租户可以是公司、组织或产品中包含一组用户的工作区。以下是 SaaS 产品的一些示例以及租户和用户如何映射到这些产品:

  1. GitHub 帮助一组开发人员管理和部署他们的代码。每个 Github 组织都是一个租户,这些组织内的开发人员是用户。
  2. Salesforce 或 Hubspot 帮助销售代表管理他们的销售线索。每个公司都是租户,用户是销售代表。
  3. Ring是一家家庭安防公司,为不同家庭提供报警服务。每个家庭都是租户,住在房子里使用其服务的人就是用户。
  4. Toast 是一个帮助餐厅构建软件的平台。餐馆是租户,餐馆的员工是用户。

从这些例子可以清楚地看出,SaaS 是一种交付机制,将被每个垂直领域所利用,包括技术、硬件、制造、工业、法律等。我们的见解是,95% 的公司属于这一类,并且有大量的公司有机会简化构建这些产品的开发人员的生活。

我们花了数年时间建立 SaaS 公司并与他们交谈,确定现代 SaaS 的核心原则。它们以租户为中心、安全、全球部署和可扩展、快速且响应迅速,并提供人工智能原生体验。以数据为中心、实时、协作和离线模式以及货币化等次要价值变得越来越重要。让我们根据我们的经验更详细地研究它们。

以客户或租户为中心
SaaS 应用程序为多个租户或组织提供服务。用户可以创建新组织并受邀加入现有组织。无论他们身在世界何处,他们都可以访问该组织。一个组织的数据与另一个组织完全隔离。此外,您希望一个租户的表现不会影响其他租户。
还有许多其他考虑因素:

  • 租户的数据位于哪里?
  • 删除租户数据后会发生什么?
  • 您将为每个租户保留数据备份多长时间?
  • 如何恢复特定租户的数据?
  • 您可以支持多少个租户?
  • 每个客户的合规需求是什么?等等?

具体演示
首先,将租户添加到数据库。您可以将它们固定到特定的云区域以实现低延迟,从而确保无论客户位于何处都能获得最佳性能,并满足数据监管要求:

insert into tenants (name, region) VALUES 
('customer 1', 'aws-us-east1'), 
('customer 2', 'aws-eu-west1');

接下来,只需通过提供租户 ID 插入和查询租户数据即可。Nile 将确定如何路由请求:

insert into employees (tenant_id, id, name, age, address) values 
('tenant-id-for-customer-2', 5643, 'John', 36, 'London, UK');

select * from employees where 
tenant_id = 'tenant-id-for-customer-2' and name = 'John';

最后,如果您需要检索所有租户的数据,也很容易。只需发送一个请求,无需指定租户 ID:

select * from employees;

Postgres 已成为创新的重要推动力。

详细点击标题