多租户的三种实现方式

什么是多租户

多租户(multi-tenancy)是一种软件架构模式,它允许单个软件实例(例如,一个网站、一个应用程序或一个服务)同时为多个用户或租户提供服务。在多租户架构中,不同用户共享同一套软件和硬件资源,但彼此之间的数据是隔离的,每个用户通常只能访问自己的数据。

多租户的概念是为了提高资源利用率、降低成本和简化管理。通过将多个用户放置在同一实例中,可以避免每个用户都需要独立的软件实例和硬件资源,从而节省了资源。同时,多租户还可以使软件提供商更轻松地管理和维护系统,因为只需管理一个实例而不是多个实例。

在多租户架构中,通常会使用各种技术来确保不同用户之间的数据隔离,如数据库分区、数据加密和访问控制等。

多租户架构的实现方式有许多种,最常见的实现方式是以下三种。

实现方式一

在多租户系统中,我们为每个数据库表增加一个所属租户的字段,例如 `tenancyId` ,来实现租户数据的隔离,这是一种常见的做法。`tenancyId` 是一个标识符,用于标识每个租户的数据。

当用户登录系统时,我们要求用户必须选择一个租户系统之后才能登录,当用户操作写入数据时,同时这条数据里的 `tenancyId`  字段必须记录用户所属的租户,当用户操作查询数据时,系统自动追加查询条件,确保每个租户只能访问自己的数据。

通过使用 `tenancyId` 字段,多租户系统可以实现数据隔离。

这种方式只需要部署一套应用程序、一个数据库schema,对于部署运维来说,比较方便;数据都在一起,方便做跨租户的统计分析业务。

但是这种方式的缺点也很明显:

  1. 具有一定的数据安全问题,数据并没有真正的做到物理隔离;
  2. 所有租户的数据都在一起,系统产生大量数据后,会导致所有租户的访问体验下降;
  3. 当一个租户的数据出现问题时候,可能会影响其他租户;
  4. 这种方式只适用于一些标准业务,租户不能进行定制;
  5. 如果是已有系统进行这种方式的多租户改造,工作量将会很大。

实现方式二

第二种方式,是部署一套应用程序,多个数据库schema,租户共用一套标准的应用程序,租户的数据分别放在不同的数据库schema中,实现了真正的数据物理隔离。

这种方式不需要为每个数据库表增加所属租户的字段,我们为每个租户创建一个专用的数据库schema,并初始化系统的数据库表结构。系统必须实现了多数据源架构,我们在系统的数据操作层,增加一个数据源切换的逻辑,不同租户操作或查询数据时,系统自动切换到对应的数据源。

这种方式相比第一种方式,实现了数据的真正隔离,对业务的侵入性更小,是一种更好的选择。

这种方式的缺点:

  1. 租户共享一套应用程序,只能适用标准业务,不能进行定制;
  2. 频繁切换数据源,对系统具有额外的性能开销,高并发下可能会有问题;
  3. 实现切换数据源的逻辑要求较高,必须稳定可靠,否则会导致租户数据串改的情况。

实现方式三

当前容器技术已经非常成熟,借助容器技术,实现真正应用隔离、数据隔离的多租户架构,是目前市场上最普遍的做法。

部署一套容器云环境,可以是k8s、rancher等开源云平台,也可以是阿里云、华为云等商业云平台。开发一套租户管理系统实现租户的注册、管理、租户应用的自动开通、自动监控、自动注销等功能,当租户注册时,自动调用容器云平台的接口,为租户部署一套专用的应用程序、数据库schema,生成一个租户专用的应用访问地址。

这种方式,借助容器云的技术,快速、稳定的部署系统,且实现了应用程序、应用数据的物理隔离,不同租户之间没有任何影响,这种方式对业务的侵入性几乎为零,扩展性、稳定性最好。

这种方式的缺点:

  1. 因为应用程序和应用数据都实现了物理隔离,如果做跨租户的统计分析业务,只能先从不同租户的数据库聚合要统计的数据,才能进行统计;
  2. 相对物理机的系统,容器云的运维更复杂一些,对运维人员的要求更高一些。

总结

无论哪一种方式,都有自己的优缺点,适用于不同的业务需求和技术环境,设计者还需要结合自己项目的实际情况,有所取舍,最适合自己的才是最好的。

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值