何谓多租户模式 ?

一、什么是多租户模式

多租户模式的定义:单个产品实例为多个用户提供服务,同时用户可按需购买使用产品资源,用户数据相互隔离。

定义里的用户即租户,租户狭义上理解就是使用系统的人。广义上来说还应该包括创建的系统、数据等一切与当前租户有关的系统资源。

 

二、举个栗子

2.1 传统模式

假设我们有一个学生管理系统,有课程查询、成绩查询两个功能,每个学生都有账号可以登陆,使用系统中的这两个功能。然后我们把这个系统卖给很多个学校去使用,这时候需要给每个学校去部署一套系统。

 

2.2 多租户模式

还是上面的系统,结合第一章节的定义,我们看多租户模式下的系统架构,这时候我们只有一个学生管理系统实例,每个学校使用的时候首先以学校为单位进行租户创建,然后可以按需购买系统功能,比如只需要成绩查询,这里的每个学校就是一个租户。

 

三、几种数据隔离模式

3.1 共享数据表,租户ID隔离

这种模式也是我们平日里系统隔离用户使用的模式,既在表中加一个用户ID字段,多租户这里就是在表中多加一个租户ID字段进行数据区分,登陆哪个租户就通过ID查询到对应租户的数据。拿成绩表的查询SQL举例就是:

select * from t_score where tenantid = '租户的ID' 

 

3.2 共享数据库,Schema隔离

该模式就是共享一个数据库实例,然后根据租户建立多个Schema,以Mysql数据库为例,就是建立多个Mysql用户,每个Mysql用户下都有完整的系统表。这里在系统开发时就需要根据租户动态进行数据源切换,获取对应租户的Schema。

 

3.3 独立数据库

该模式就是完全独立数据库实例,还以Mysql数据库为例,就是装有很多个Mysql服务,每个租户对应一个实例 ,每个实例下具有相同的Schema和表 。这里也需要在系统开发时根据租户动态进行数据源切换,获取对应租户的数据库实例。

 

四、实现多租户系统的几个关键点

将一个传统模式的系统,改成多租户架构,大的方面来说,只需要做好这两点即可实现,也是最关键的两点。

4.1 租户管理

上面3.1 给了一个SQL,这个SQL在实际开发时,会发现是不可用的,满足不了需求,为什么呢?回到上面的学生管理系统,想想看,学校管理员购买了一个租户系统,而具体使用系统的人是学生,是学生在查成绩,先想一个问题,学生的数据从哪来?

 

(1)学校管理员添加

也就是学校管理员创建了租户系统后,在后台通过学生添加功能进行学生信息录入,这不就有了学生信息了,也容易关联上租户ID,看着好像没有问题,我们来捋一下执行过程。

学生访问系统 -> 输入账号密码,点登陆后 -> 3.1 模式因为数据源是一个,所以直接连上查t_student表 -> 对比用户名、密码 - > 找到且密码正确即认为登陆成功。

例外情况1:假如学生张三由学校A转到了学校B,这时候学校A的租户和学校B的租户都有了张三的信息,这时候有两条数据,怎么比对?这时候就不对了,租户ID还无法确定。这时候就需要下面的两种方案。

例外情况2:假如使用的是3.2 或 3.3 的数据隔离模式,相当于有多个数据源,这时候登陆时连接哪一个数据源查?这时候也就不对了。租户ID还无法确定。这时候同样需要下面的两种方案。

 

(2)学生注册为租户

方式一:学校想添加学生A,可以输入学生A的邮箱地址,发送邀请,学生A收到邮件邀请,登陆平台注册为租户(不创建系统),注册后自动进入发送邀请学校的学生库。

方式二:学生A直接登陆平台注册为租户,学生A将注册信息提供给学校管理员,学校管理员添加到学生库。

存储租户的租户表本身是共享的。然后需要 「租户学生表」 (创建系统的租户ID,学生租户ID)

这时候登陆并查询成绩流程就是:学生输入用户名、密码 -> 查询租户表 -> 登陆成功 -> 查询租户学生表 -> 选择对应的租户学校 -> 进入租户系统首页 -> 查询成绩

 

(3)特定登陆地址

即给每个租户购买系统后,生成特定独有的登陆地址,带有学校的租户ID,然后将登陆地址共享给学生即可。这也可以解决租户ID无法确定的问题。而且无需学生注册为租户。

 

4.2 数据路由

数据路由是数据隔离后的关键点,3.1 模式下即实现SQL的包装,做一层AOP,查询的时候在原来的SQL上附加

 where tenantid = '' and studentid = '' 

3.2、3.3 则需要根据租户ID动态切换数据源,代码层面即获取不同的Connection,实现细节限于篇幅,此处不展开了。 

 

五、总结

其实如果抛开商业模式来说,淘宝、京东包括我们常见的系统从技术架构上看都可以算是一种多租户系统,为什么?

因为首先是单实例可以支持多用户的,其次数据是可以根据用户ID隔离的(同第三章节「共享数据表,租户ID隔离」 模式)。

 

从整体架构上看又不是,为什么?首先不满足的是系统功能不是按需付费,像淘宝每个会员进去功能都是一样的,不能按需挑选功能,你说我不要订单功能,可能吗?显然不可能,你要不要订单功能就在那。另外功能免费。

还有就是商业模式的问题,不是将软件本身作为服务销售,还拿淘宝来说,它售卖的是淘宝上的商品,而不是淘宝软件本身的功能。所以模式上不是SAAS,严格上就不算多租户系统。

 

最后给大家一个公式,完整的多租户模式 = 多租户商业模式 + 多租户技术架构。

 

PS  :可关注「风象南讲全栈」公众号,有机会成为作者微信私人好友

转载于:https://www.cnblogs.com/yuboon/p/10404473.html

### 关于云计算运维的面试题目 由于提供完整的100道面试题及答案超出了单次回复的能力范围,这里将展示部分精选的高质量云计算运维面试题及其解答。这些题目涵盖了多个方面,旨在全面评估候选人的专业知识和技术能力。 #### 题目一:定义云计算并描述其主要特点 云计算是一种通过互联网按需提供计算资源和服务的技术模式[^1]。它具有以下几个显著的特点: - **广泛网络访问**:用户可以通过任何联网设备随时随地访问云服务。 - **快速弹性扩展**:能够迅速调整资源配置以适应业务需求的变化。 - **计量付费机制**:按照实际使用的资源量计费,减少前期投资成本。 - **资源共享池化**:多租户环境下共享物理硬件设施,提高资源利用率。 #### 题目二:解释云计算的服务模型和部署方式 服务模型主要包括三种形式: - IaaS (Infrastructure as a Service): 提供基础架构层面的服务,如虚拟机实例、存储等; - PaaS (Platform as a Service): 向开发者提供开发平台环境,支持应用程序构建、测试与部署; - SaaS (Software as a Service): 直接向用户提供软件应用功能而无需关心底层基础设施管理。 部署方式则分为四种类型: - 公有云(Public Cloud):由第三方服务商运营并向公众开放使用; - 私有云(Private Cloud):专门为某个企业内部建立和维护私有的数据中心; - 社区云(Community Cloud):服务于特定社区成员之间的协作交流目的设立; - 混合云(Hybrid Cloud):结合公有云与私有云的优势形成混合型解决方案。 #### 题目三:阐述何谓弹性伸缩以及其实现方法 弹性伸缩是指根据工作负载动态增加或缩减服务器数量来满足实时处理请求的需求。具体来说,在流量高峰期自动启动更多实例分担压力;而在低谷期关闭闲置节点节省开支。这种灵活性有助于优化性能表现的同时降低成本开销。常见的实现手段包括但不限于利用自动化工具监控指标变化触发相应操作逻辑,或是借助容器编排框架(如Kubernetes)完成大规模集群调度任务。 ```python def auto_scaling_policy(current_load, threshold_high=80, threshold_low=20): """ 自动扩缩容策略函数 参数: current_load (float): 当前系统负载百分比 threshold_high (int): 扩展阈值,默认为80% threshold_low (int): 缩减阈值,默认为20% 返回: str: "scale up", "scale down" 或者 "no action" """ if current_load >= threshold_high: return 'scale up' elif current_load <= threshold_low: return 'scale down' else: return 'no action' ``` #### 题目四:探讨如何确保云计算环境中系统的高可用性 为了达到较高的服务水平协议(SLA),通常会采取一系列措施增强系统的稳定性和可靠性。这可能涉及到采用冗余设计原则防止单一故障点影响整体运行状态;实施定期健康检查及时发现潜在风险因素加以修复;配置灾难恢复计划以便应对突发情况下的紧急响应流程等等。此外,合理规划地理分布式的数据中心布局也有助于提升跨区域间的协同作业效率,从而进一步加强整个体系结构的安全防护等级。 #### 题目五:分析云计算中的数据安全保障措施 保护敏感资料免受未授权访问至关重要。为此,可以考虑从以下几个角度出发制定综合性的防御方案: - 加密传输通道以阻止中间人攻击窃取信息内容; - 应用身份验证机制确认合法用户的合法性; - 设置严格的权限控制列表限制不同角色所能执行的操作种类; - 定期备份重要文档以防意外丢失造成不可挽回损失; - 建立健全的日志记录制度便于事后追溯异常行为轨迹。 以上仅列举了一部分内容作为示例说明,并不代表全部的一百个问题。对于更深入的学习研究建议查阅相关领域权威书籍文献获取更为详尽的知识要点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值