来源:韩锋频道
随着SaaS软件日益流行,如何为企业用户提供即统一又相互独立的服务,成为很多基础软件商的课题,因而租户能力正受到更多关注。另一方面,随着分布式数据库的流行,如何充分利用分布式环境的算力及存储资源为不同业务服务,也同样对租户能力提出的要求。本文针对常用的租户实现方法、技术路线进行说明,重点说明场景数据库的租户能力并加以对比。
1).多租户业务诉求
2).多租户构建模式

从上面多种构建模式对比可见,各方案有着鲜明的优缺点。在技术实现上,可分为两种情况,一种是采用数据库内置能力来支持租户,一种是在应用侧来解决。针对前者,后文将着重谈谈各数据库的租户能力;后者往往依赖于应用研发能力。特别是共享库、Schema、表的模式,具有成本低的明显优势,通常在应用研发侧来解决,但这一模式面临诸多难点,在实际使用中常通过中间件策略增强这一模式能力,补齐短板。
3).中间件策略解决难点
有很多数据库已经内置了多租户能力,用户可很方便地基于此快速开发 SaaS 类应用。下面简单对比下:

1).Oracle 租户能力
独立性:每个 PDB 都是一个独立的数据库,具有自己的数据和配置。这使得您可以在同一个数据库实例中运行多个独立的应用程序,而不会相互干扰。
共享资源:多个 PDB 可以共享一些资源,如数据库服务器、CPU 和内存。这有助于提高资源利用率,并降低硬件成本。
数据隔离:每个 PDB 都有自己独立的数据存储,确保数据安全性。此外,Oracle 多租户还支持跨 PDB 数据复制和同步,便于数据在不同 PDB 之间共享和一致性。
权限管理:Oracle 多租户功能允许您为每个 PDB 独立设置用户和权限。这有助于实现精细化的权限控制,提高数据安全性。
简化管理:通过 Oracle 多租户功能,您可以集中管理多个 PDB,从而简化数据库管理和维护工作。
高可用性:Oracle 多租户支持 PDB 的自动故障转移、数据备份和恢复,确保应用程序的高可用性。

2).PostgreSQL 租户能力

3).TiDB 租户能力

资源组,是资源管理的逻辑单元。任意一个会话属于唯一的资源组,而同一资源组的所有会话共享同一组资源限额。TiDB 支持数据库用户与资源组的映射关系,通过设置数据库用户的默认资源组,用户会话可以分属于不同的资源组。未指定默认资源组的用户,与系统内置的 default 资源组相关联。
资源限额,TiDB 首先支持为资源组配置用量 (RU)。RU (Request Unit) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的单位,目前会考虑 CPU、IOPS 和 IO 带宽三个指标,按照一定的比例统一到 RU 单位上。TiDB 支持设置资源组为 BURSTABLE 模式,BURSTABLE 模式允许资源组超额使用到集群的空闲资源。
调度优先级,默认情况下所有资源组的优先级 (PRIORITY)均为“中等(medium)”。当资源组在同一优先级下,调度优先级按照资源配额的比例分配,这已经能够满足绝大多数场景的需要。用户仍旧可以显式地指定资源组优先级为“高(high)”或者“低(low)”,从而完成更复杂的设定。
4).OceanBase 租户能力

5).PolarDB-X 租户能力
PolarDB-X 是阿里云旗下一款分布式数据库产品。它通过结合非模板化二级分区与Locality两项能力,来解决租户场景问题。

非模块化二级分区,是指 PolarDB-X 支持使用二级分区创建分区表。可在各个一级分区之下的二级分的分区数目及其边界值定义允许不一致。通过这种方式可以将大小租户的数据进行不同的数据存储策略,例如大租户可以将数据路由到一组数据分区中,小租户可以按哈希算法自动均衡到不同分区,从而避免访问热点。
Locality,PolarDB-X 通过这个关键字来指定数据库分区的实际存储资源位置(PolarDB分布式版中存储资源由多个数据节点(DN节点)组成,可以通过DN的ID进行位置分配),以实现数据隔离或数据的均匀分布。
1).TiDB 操作示例

2).OceanBase 操作示例

