多租户
多租户(Multi-tenancy)是SaaS模式平台能够大规模获利的关键
它解决一个核心问题:如何在共享资源的同时,保障每个客户数据的绝对独立。
一套系统能够支撑多个租户。
一个租户通常是具有相似访问模式和权限的一组用户,典型的租户是同一个组织或者公司的若干用户。
数据层的多租户模型对上层服务和应用的多租户实现有突出影响。
多租户实现需要考虑因素:
- 扩展性:租户数量级别,以及未来发展趋势
- 安全性:租户之间数据隔离级别要求
- 资源共享:多租户通常有某种形式的资源共享,需要避免某个租户的糟糕SQL吃掉系统资源,影响其他租户的响应时间
- 灵活性:不同租户可能有不同的需求,对特定租户需求的扩展能力
- 跨租户分析和优化:对全部租户或者多个租户的数据和行为进行分析的能力
- 运维和管理:运维管理的复杂度和便宜性,包括监控、修改数据库模式、创建索引、收集统计数据、数据加载等
- 成本:总体拥有成本,包括方案实现成本、运维成本等
多租户的三种实现路径:一租户一数据库、一租户一名字空间、全共享方式
| 隔离方案 | 描述 | 扩展性 | 成本 | 安全性 | 适用场景 |
|---|---|---|---|---|---|
| 一租户一数据库 | 每个租户一个专属数据库 | 低 | 最高 | 最高 | 金融级、政府级 IoT 项目 |
| 一租户一名字空间 | 同一个库,不同命名空间 | 中 | 中等 | 中等 | 多数企业级 SaaS 平台 |
| 全共享方式 | 都在一张表里,靠 tenant_id 区分 |
高(一键更新) | 最低 | 较低(易出错) | 轻量级、大量小客户场景 |
与普通电商系统不同,物联网的多租户还要考虑设备接入:
- 设备权限隔离: 你绝不能让A工厂的设备,把数据发到B工厂的租户账号里。
- Topic隔离: 在MQTT中,必须通过租户ID动态限制订阅权限。
- API限流: 如果某一个租户疯狂发送垃圾数据,不能让这台设备把整个平台的服务器压垮,必须针对租户做QoS限制。
在设计 IoT 平台时,“租户隔离”不仅仅是数据库层面的事,它是从接入认证到数据存储,再到前端展示的全链路逻辑。如果在设计之初没有定好 tenant_id 的传递逻辑,后期想补救会非常痛苦。

浙公网安备 33010602011771号