在云领域我们经常会听到一个词:多租户。这个词在不同的语境中有着不同的含义,本文将介绍云平台中的多租户的概念以及实现多租户支持的思路。
什么是租户
刚开始接触这个概念时,你肯定感觉“租户”这个词怪怪的,但如果我们换个词,我相信你马上就有感觉了,这个词就是“客户”(这里的客户指的就是商业上面的客户)。一个租户就是一个客户,比如我们开发的服务是给 XXX 企业使用的,那该企业就是我们的一个客户/租户;如果这个服务是面向互联网的,那么使用该服务的每个互联网用户都是一个客户/租户。
为什么需要多租户支持
开发者辛辛苦苦开发出一个服务,提供给了个人/企业使用,这样就完事了么?当然不应该只是这样,我们开发出一个服务,最好是能够同时提供给多个个人/企业使用,而且这些客户最好是共享同一套服务运行时(Runtime),这样可以大大降低服务的运维成本:
- 服务运行时如果分开,则运维的成本与客户数成正比(比如更新部署大量客户的场景)
- 节省资源(将服务所需资源利用最大化:运维团队统一、硬件使用)
另外,这样也可以降低服务的开发成本:
- 我们只需要考虑如何实现单用户的服务逻辑:业务逻辑对应其所有客户都是相同的,无论什么客户来使用,程序提供的服务都是一样的。进一步说,在业务层面我们开发这个服务时理论上不需要考虑多客户支持,我们只用关注该服务的业务逻辑如何实现
- 多客户的管理功能可以进行统一:开发者应该不用考虑客户管理功能,这部分应该是由云平台统一提供的
多租户场景举例
假设我们要开发的服务是一个博客平台,这个服务是面向互联网用户的,每个互联网用户都是我们的客户(一个用户就是一个租户)。
在不支持多租户的环境中,为了隔离每个用户的数据,至少我们在设计数据库表时会考虑大多数表都存在一个 user_id 字段,用于 CRUD 数据时使用该字段进行用户隔离。
比如现在的业务是“发布文章”,需要将文章数据保存在 article 表中,在实现时实际上我们关注了两件事情:
- CRUD:这是业务逻辑实现的一部分
- 用户隔离:需要加入 user_id,做业务关联
1 是“纯”业务逻辑部分的实现,这是必须实现的;2 则是为了多用户博客平台而需要考虑的,这并不是博客平台本身的业务逻辑。这里如果能得到平台的多租户支持,就不用考虑第 2 点了,这样可以将注意力集中于第 1 点业务逻辑实现上,这是非常典型的一个多租户场景。
多租户支持
我们可以这样理解多租户支持:
- 从服务提供的角度看,我们开发的一个服务运行时可以同时提供给多个客户使用,并且客户之间的数据/状态是保持隔离的
- 从服务使用的角度看,我和你可以作为不同的客户同时使用同一个运行的服务,此时我们使用该服务完成的业务是相互不影响的,就好像我们在使用自己独享的服务一样
那么这个服务就是支持多“客户”的,即该服务支持多租户。这里的“服务”可以是应用,可以是 SaaS 平台,也可以是 PaaS 平台。不过按目前我们熟悉的云平台看,应用的多租户支持应该是最常规的,这是因为应用面向的是用户,这个群体是很庞大的。
多租户支持从实现的角度看,“是一种软件架构技术”,之所以强调它是属于架构层面是因为要实现它必须在做技术架构时就要将其考虑在内。
一种租户模型
本文一开始我们提到使用“客户”来置换“租户”来理解租户的含义,再从“商业”这个方面来看的话,我们不难发现租户其实就是其云环境中的商业模式实现的一部分。商业模式是多样的,这意味着租户的划分也是多样的,这里我们描述其中一种可能的租户栈:
- 应用程序是提供给用户使用的,对于应用来说,用户就是它的租户(这一点业界比较统一)
- SaaS 提供的服务是给应用开发商使用的,对于 SaaS 来说,应用开发商就是它的租户
- PaaS 提供的服务是给应用系统使用的,对于 PaaS 来说,相关应用的组合就是它的租户
SaaS 和 PaaS 面向的是开发商、系统等非端用户角色,这一部分一般是由云平台开发者决定的(捆绑商业模式),特别是私有/企业云平台一般不会考虑形如“在 PaaS 平台上支持运行多个 SaaS 平台”这样的场景。所以下面我们更多的是围绕“应用对多租户支持”进行讨论。
应用多租户
应用多租户的使用场景前面已经介绍过了,现在假设我们是一个云平台开发者,为了满足支持应用支持多租户的需求,在云平台中我们需要提供下面几个支持:
- 租户管理:CRUD,统计
- 租户隔离/共享的服务:队列、缓存、数据库等
- 租户隔离的统计:日志、配额
这些支持可以分为两类:
- 租户的管理:不会直接面向应用的端用户,面向的是应用的运维,平台应该提供具体实现
- 租户数据/状态的隔离:从请求开始就应该可以区分这个请求是来自于哪个租户,请求处理时在调用链路上也需要带上租户上下文,数据的存取是按照租户隔离的,调用平台提供的服务时也是租户隔离的
第 1 点比较容易实现,这是一个业务模型方面的问题,可以根据业务域来抽象租户模型,比如企业应用一般是按照“组织机构”来区分租户的;
第 2 点是一个纯技术的需求,需要在平台技术实现上支持按“租户”的运行时隔离,我们强调的是隔离,因为在实现时我们要达到的目标就是隔离,只不过这里是按租户(租户只是一个商业概念,技术层面我们最好能够将其进行抽象,尽量减小商业模式多样化对技术架构的冲击),我们可以将租户映射到一个抽象概念上,这个抽象概念可以实现我们的隔离需求。
命名空间
前面我们讨论多租户支持都是自上而下的:从应用多租户需求到数据隔离实现;现在我们再换种视角,自下而上:先通过命名空间隔离数据,再将命名空间提 供给应用多租户的实现使用。自下而上的目的主要是在平台内部,我们可以通过“命名空间”来进行数据/状态隔离的抽象,最终的理想情况是命名空间不仅能够支 持应用多租户实现,还能够可选择性地暴露命名空间 APIs,让应用可以进行某些数据的隔离(比如缓存),方便业务实现。
隔离的实现
租户请求从开始到结束平台都需要知晓这个请求映射的命名空间,从请求处理栈我们可以这样大致划分一下:
- 负载均衡器(LB)
- 应用容器(APP)
- 平台服务接口(RPC)
- 平台服务实现(DB/Cache/MQ....)
在这个栈中每一层平台都是需要知道这个请求对应的命名空间的。平台可以提供一个统一登录的服务,将租户信息映射为命名空间并保存到用户会话中,这样每次该用户的请求:
- 过 LB 时就可以区分出命名空间来
- 在 APP 容器中可以通过会话
- RPC 时传递命名空间
- 根据服务的不同进行命名空间实现(例如 DB 根据命名空间使用不同的 Schema,MQ 根据命名空间使用不同的队列)
这里我们使用的隔离实现基本思路是“Shared application”,即多租户共享一个应用,对应一套基础设施(请参考:将单租户应用程序转换为多租户应用程序)。
一种平台设计
前面谈了这么多,现在我们可以脑补出一种支持应用多租户的云平台:
(这里的设计思路也包含了有的租户要求独享资源的场景)
总结
- 租户和客户的概念类似
- 对多租户的支持我们一般指的是应用对多租户的支持
- 在技术层面支持多租户需要实现数据/状态隔离
- 使用命名空间进行隔离实现抽象
- 租户到命名空间的映射可由平台集成
参考
相关推荐
基于等保2.0云平台与云租户安全框架、安全方案及主要设备清单 (2).pdf基于等保2.0云平台与云租户安全框架、安全方案及主要设备清单 (2).pdf基于等保2.0云平台与云租户安全框架、安全方案及主要设备清单 (2).pdf基于...
【云平台多租户实现方案】是针对云环境中软件应用如何高效、安全地服务于多个独立客户(租户)的一种架构设计。多租户方案旨在确保资源隔离、性能扩展、数据安全以及运维自动化。 1. **多租户模式支持**: - **...
最优秀、最简单、最漂亮的开源SAAS、多租户、SpringCloud2023、Mysql、Mybatis-Plus、Spring Cloud Alibaba2022 、Oauth2.1 、有BUG第一时间修复
该文档非常详细的介绍了云计算相关多租户模型与架构。对基于云平台来构建多租户应用或服务有非常好的借鉴和指导意义。
分析了 Kubernetes 访问控制和资源隔离实现方案基础上,提出了一种基于多租户访问控制模型的容器云平台多租户方案,涵盖多租户管理模型、多租户访问控制、计算资源隔离和网络资源隔离等,可切实提升基于Kubernetes的...
全网最优秀、最简单、最漂亮的开源SAAS、多租户云平台架构。最容易上手的、中台 、SAAS 、 多租户功能、最少的代码实现功能。
《多租户云平台架构》 在现代信息技术领域,多租户云平台架构已经成为企业级服务的重要模式。这种架构设计允许多个独立的客户,也就是租户,共享同一个软件实例,同时保持数据和功能的隔离。这不仅提高了资源利用率...
SkyForm云平台是一款由北京天云融创软件技术有限公司开发的云端解决方案,专为管理多租户环境而设计。本指南,即"SkyForm云平台V4.0租户管理员指南",旨在帮助管理员理解和掌握如何有效地管理和维护在该平台上部署的...
该项目为基于多租户模式的智慧党建云平台后端设计源码,总计包含1472个文件,涵盖597个Java源文件、271个JavaScript文件、132个HTML文件、96个CSS文件、113个PNG图片、78个GIF图像、73个XML文件、23个地图文件、11个...
《云平台及租户业务安全性研究思考》这篇文章深入探讨了云平台在当前信息化时代中的安全性问题,特别是针对政务云的安全需求及其解决方案。首先,文章强调了太极云的定位,它致力于构建一个覆盖全国的云基础设施和...
分布式数据库入云及多租户研究情况调研是指将分布式数据库迁移到云平台上,并实现多租户架构的研究。这个研究的目的是为了提高数据库的性能、可扩展性和安全性,并且满足多租户的需求。 1. 分布式数据库入云 ...
"基于Rancher的多租户平台管理手册" 本文档将对Rancher的概念、架构设计、功能特点和应用场景进行详细的介绍,并对Rancher在多租户平台管理中的应用进行探讨。 一、Rancher概述 Rancher是一个容器管理平台,旨在...
在公有云环境中,多租户设计是确保不同用户之间资源隔离、数据安全和高效利用的关键。本节将深入探讨MaxCompute如何实现公有云环境中的多租户设计,并结合知识图谱、物联网(IoT)和数字孪生技术,阐述它们如何共同...
此外,文章还介绍了阿里云和华为云等提供的消息队列服务,在多租户方面提出了一些限制,如Topic名字必须全局唯一,如果名称已经被其他用户使用,您将无法创建相同名称的Topic。 最后,文章介绍了浪潮云消息服务平台...
多租户模式是PaaS云平台的另一个重要特点,它允许一个平台上的单个实例为多个租户提供服务。在这种模式下,不同的租户可以共享同一平台资源,但是彼此之间是隔离的,这样既保证了安全性,又提高了资源的使用效率。 ...
《基于云平台的-Docker-多租户安全》.pdf
同时,解决方案还提供了云平台,能够提供迁移资源、迁移工具,多厂商云上协同,积累、共享迁移经验。 解决方案的核心价值在于: * 满足各种信创业务技术路线需求,适配国产芯片以及操作系统、中间件、数据库等。 *...
IaaS单租户大数据产品架构是指将大数据产品部署在IaaS云平台上,每个租户都可以拥有独立的资源和环境,具有高可扩展性和灵活性。该架构使用Hadoop Yarn作为资源管理器,Spark作为计算引擎,RHadoop作为数据存储,...