多租户架构设计需要考虑解决的几个问题

分布式多租户架构的思考

现在市场上开发软件SAAS化已经是标配了,结合当前或者的分布式微服务和SAAS化多租户结构的实际现状和需求,我们作为技术架构如何考虑设计一套分布式微服务下多租户动态数据源切换的灵活架构方案,是当前比较紧要的一件事情。以下对于多租户动态数据源做了如下分析。

场景分析

场景一:
前端直接发起一个请求通过网关到后端服务,如果只有一个服务的情况下,需要处理被访问服务当前执行所需的数据源应该是当前登录用户所在租户的数据源
序列图如下:

前端 网关 微服务1 租户数据库 识别租户,路由到具体业务微服务 提供业务处理 根据租户动态切换数据源,处理业务 需要识别租户并切换数据源 数据存储/查询 返回业务结果 响应前端 前端 网关 微服务1 租户数据库

场景二:
多个服务协作完成某一业务的情况,直接上图

前端 网关 微服务1 微服务2 租户数据库 识别租户,路由到具体业务微服务 提供业务处理 服务依赖 处理业务 需要识别租户并切换数据源 数据存储/查询 返回业务结果 处理业务 需要识别租户并切换数据源 数据存储/查询 返回业务结果 响应前端 前端 网关 微服务1 微服务2 租户数据库

场景三:
多个服务协作完成某一业务的情况,并且部分业务函异步处理,如图

前端 网关 微服务1 微服务2 租户数据库 MQ 任务服务 识别租户,路由到具体业务微服务 提供业务处理 服务依赖 处理业务 需要识别租户并切换数据源 数据存储/查询 返回业务结果 存入消息队列 订阅消息 逻辑处理 需要识别租户并切换数据源 数据存储/查询 处理自身业务 需要识别租户并切换数据源 数据存储/查询 返回业务结果 响应前端 前端 网关 微服务1 微服务2 租户数据库 MQ 任务服务

场景四
多租户场景下分布式定时任务的处理场景

分布式任务调度服务 MQ 任务执行服务 协同服务 租户数据库 接收分布式任务 订阅分布式任务消息 执行任务逻辑 执行任务逻辑 获取业务所属租户 动态切换数据源 数据存储/查询 获取执行结果 loop [需要外部协同] 获取业务所属租户 动态切换数据源 数据存储/查询 执行完成 分布式任务调度服务 MQ 任务执行服务 协同服务 租户数据库

参考博文
将您的 web 应用程序转化为多租户 SaaS 解决方案
https://www.ibm.com/developerworks/cn/cloud/library/cl-multitenantsaas/
基于spring通过多数据源实现多租户应用
https://www.jianshu.com/p/54f35fa2f374
基于Hibernate动态数据源切换:https://blog.csdn.net/sysushui/article/details/90319375
实例:https://blog.csdn.net/lulitianyu/article/details/79566775

你可能感兴趣的:(架构设计,开发实战,数据库,架构,数据库架构,云原生)