文章目录
经过工作中的一处场景启发,我进行了深入学习并总结出本篇文章。
核心思路
方案选择
多租户模型基本有以下三种(具体可以见这里),第一种形式隔离做的最彻底(isolated),多租户之间只在硬件层面进行共享;第三种形式共享做的最彻底(shared),在硬件、应用和DB层面都做到了共享。
一个应用要多租户化,选择何种形式,需要考虑具体的业务场景,同时也要考虑投入产出比,不同的形式投入成本不同,可以参考下面的图。上面的三种形式最左边可以认为是isolated approach,最右边是shared approach,第二种介于中间。越靠右的方式从初期来看投入成本更高,但从长久来看投入成本会更低。
设计考量
框架层面考量,如果从单纯项目实现层面也需要思考这些方面
安全性
对于一个多租户应用来说,任何业务处理、数据读写都需要有明确的租户上下文,这涉及到方方面面:
- 当前用户是否有特定租户的权限?
- 当前的web请求、RPC服务调用、任务启动、消息处理是否有特定的租户?
- 当前的数据读写是否有明确的租户参数?
一旦发现没有权限、没有租户的程序在执行,保护机制及时进行检验、发现并予以熔断报错。
扩展性
不同的租户,往往会有不同程度的差异,差异可能来自:</