在软件即服务(SaaS)等应用场景中,为不同租户提供服务时,既要保证各租户图数据的严格安全隔离,又要确保系统在高并发下仍能维持高性能与高可用,这是一个核心挑战。PolarDB PostgreSQL版的多租户架构通过将不同租户的数据映射到独立的逻辑子图,实现了物理资源共享、逻辑数据隔离的管理模式。该架构不仅从根本上保证了租户间的数据安全,还能通过哈希分片实现负载均衡与线性扩展,并支持子图级的快速备份恢复,为您的多租户应用提供高安全、高性能、高可用的图数据解决方案。
PolarDB PostgreSQL版多租户架构核心在于其子图划分机制,它在共享的物理资源之上为每个租户构建了一个逻辑上独立的图数据空间,实现了高效的数据隔离与资源调度。
数据存储模型
在PolarDB PostgreSQL版中,一个集群(Instance)可以包含多个数据库(Database)。在单个数据库内,每个图(Graph)的数据被组织在一个独立的模式(Schema)下。这种层级结构为多租户隔离提供了基础。
graph TD
A[Instance] --> B(Database A)
A --> C(...)
B --> D(Schema 1: Graph 1)
B --> E(Schema 2: Graph 2)
B --> F(...)
D --> G(Table: Label 1)
D --> H(Table: Label 2)单个PolarDB PostgreSQL版集群理论上可承载高达4×1012个Schema,这意味着您可以创建海量的图来服务不同租户或业务场景。
子图划分与数据隔离
系统通过子图划分机制,将不同租户的数据隔离在各自的逻辑子图中。该机制使用密码学安全的哈希函数,将每个租户的唯一标识符(u_id)映射到一个特定的子图标识符(G),从而确保任何数据操作都只会在指定租户的子图内进行。
其核心映射算法可表示为:G = H(u_id) mod N
G:子图标识符,决定数据归属于哪个逻辑子图。
H():密码学安全的哈希函数(例如SHA-3),确保租户ID到子图的映射分布均匀且难以预测。
u_id:租户唯一标识符,是进行数据隔离的依据。
N:当前活跃的子图总数。
当客户端发起带有user_id的请求时,系统会通过该算法快速定位到对应的子图,并将读写操作路由至该子图,实现天然的数据隔离。
|
架构优势
这种基于逻辑子图的架构带来了三大核心优势:
哈希分片与负载均衡
通过哈希分片策略,来自不同租户的写入和查询流量被均匀分散到后端的分布式存储节点上。这种设计有效避免了因部分租户访问量过高而导致的热点问题,确保系统整体吞吐量可以随节点增加而线性扩展。
索引优化与查询加速
由于每个子图仅包含单个租户的数据,其数据规模远小于整个数据集。这使得子图内的B+树索引层级更浅、体积更小,检索效率显著提升。结合缓存的局部性原理,关键查询路径的响应时间可压缩至毫秒级。
子图级备份与原子恢复
系统支持以子图为单位进行独立的备份和恢复。当某个租户的数据需要恢复时,可以执行原子级的子图恢复操作,而无需影响其他租户。相比于传统的整库恢复方案,这种积木式的容灾模式可将恢复时间目标(RTO)和恢复点目标(RPO)提升1至2个数量级。