前言
多租户的概念是我在毕业后不久进第一家公司接触到的,当时所在部门的业务是计划建设一套基于自研的、基于开放 API 的、基于 PaaS 的、面向企业(ToB)的多租户架构平台,将我们的服务可以成规模地、稳定高效地交付给客户使用。
当时我们就去参考了腾讯云和阿里云的多租户设计,团队经过调研后得出了以下几个基本共识:
- 要有一定的量:即业务规模大到需要使用多租户架构来解决,不然就考虑普通的 SaaS 做交付;
- 底层的硬件资源:需要足够支持这样量级的业务,运维、高可用、监控这几方面可能需要云原生团队的支持;
- 平台架构设计上:一定要保证高隔离性、高可扩展性、高性能,同时可以支持复杂的、高并发的场景;
- 成本与营收平衡:需要有一个可以接受的范围,毕竟投入进去的前期是基本亏损的,稳定后再抱有能赚钱的心态。
当然,作为一个入门系列,本篇文章的内容偏基础概念,并不是多租户技术架构的最佳实践。笔者把从互联网上学习到的相关知识与自身的工作实践相结合,希望能在分享的过程中和大家一起进步。
一、多租户的概念
多租户本质上是一种软件的技术架构,它最核心的特征是多个租户可以共享一个系统实例,并且租户间是可以实现数据和行为的隔离,这可以说是多租户技术架构里最重要的两点了。
多租户架构是 SaaS 模式中的重要且常见的架构,通过共享和复用资源降低成本,提高效率和可扩展性。其中最需要关注就是:数据/行为的隔离、身份/角色的认证与授权、底层硬件资源管理、高性能与高可用、定制化和可扩展、数据一致性、系统安全性等。
这里就不过多赘述了,下面会将概念详细铺开。如果要找一个生活中容易理解的场景做比喻,那么多租户的概念其实就和租房子的概念类似,只不过在各自的专业领域所涉及到的术语和具体实现会不一样。
二、隔离模式
一般来说多租户常见的有3种隔离模式:独立数据库、共享数据但独立数据架构、共享数据库且共享数据架构。
2.1独立数据库模式