关于多租户系统的思考
前言
今天去公园走了十四多公里,想通了很多事情。其实,最近困扰我的主要是这个多租户系统的搭建都需要做什么事情。初步想来,其实很多问题,但是,当我大方向决定使用分数据库来解决的时候,似乎大多数问题都解决了,剩下的问题就是如何实现了。而这中间的实现其实也有不少问题,接下来我们一个一个来聊聊。
思考
数据隔离
多租户的系统最根本是每个租户在系统上都不会感受到别的用户的存在。而与多用户的区别是,租户有自己的用户,而租户的用户也是感受不到别的租户的,但是可以感受到同租户下用户的存在。就像是用同一套代码充当很多个公司的管理后台一样。这件事的复杂度是很高的。基本上来说,就是在原来所有的事情基于用户的前提下,再多一个租户的过滤。这件事要深入到每一个业务中。如果真的这么做,这事看起来也不难。但是,我们希望租户的概念在开发的时候是尽可能透明的。
所以,我们选择一个租户一个数据库。这样,每个数据库的复杂程度和原来就相同的。但是,这也迎来了另一个挑战,多数据源。不过这件事我们后面说,这里,我们仅说明,数据隔离,我们使用多数据库的方案实现。这里面临的更多的问题可能就是自动创建数据库,和自动创建数据表这类事了,这些就属于细节上的一些小事情了,或许会存在问题,不过都可以实现。
身份认证
在之前,我一直将这个问题归结为会话的问题。但是,今天我想的时候,把验证用户身份,和维持会话两件事情分开了。事情,似乎一下开朗了。验证用户身份,是验证这个人是否是他声明的那个人。身份验证通过,我们才开启会话。如果有其它的机制的话,我们也可能不需要验证身份就开启会话,总之,两者是合作关系,而不是谁是谁的必要条件。
多数据源
说数据隔离的时候,我们提到了多数据源。其实,多数据源的情况是复杂的。首先,不同租户在同一应用下,需要切换数据源,来更新各自的数据库。其次,因为存在公共统一的后台服务,它们可能会落入到统一的数据源。这样就可能需要在同一个事务里操作多数据源,这件事,是复杂的。在之前我们使用XA
事务做过一个版本。说实话,当时总是出现一些资源耗尽的事情,而且这样处理吞吐量是很低的。个人也不喜欢XA事务。但是,开发人员是喜欢的,因为不用学太多新东西。不过,今天我又深入得思考了一番,为什么一定要使用多数据源呢?我们可以用API嘛。
前后端分离
本来呢,这并不是多租户的必要条件。但是,我希望我这次的多租户系统可以是统一前端,但是后端api的提供可以分离,再通过api网关聚合出来。但是,这里有个很讨厌的事,就是前端很难获得后端的配置信息。于是,我就想了个办法,让后端生成一个js文件,让前端引用。然后,我今天解决的问题就是怎么让它不缓存这个js文件而每次更新,我们在js后面加个参数。但是,这个随着前后端分离后可能会变成一个伪需求,因为我发版不用重新打包了。不过,无论如何,让js文件及时更新的方法是非常有用的。
权限如何划分
在传统来说,我们的系统一般来说是直接划分菜单的。但是,最近,我头疼的是,我们每个功能模块可能都有仪表盘中的一部分内容。那么,我再直接给用户划分菜单,似乎就不太合适了。这里如何组织,是值得深入思考的。
应用如何研发
在多租户系统中,其实存在很多重复的基础模块,比如上述说到的菜单。那么,这些是不是我们就可以集中存储和打造了呢?那如果这个模块可以集中存储和打造,那么别的模块又怎么做呢?这个是真的值得深入思考的。
后记
这里引出了对多租户问题的一些思考,后续我有进展还会更新。欢迎一起讨论。
关于多租户系统的思考相关推荐
- SAAS平台的基础,构建多租户系统的思考
多租户应用程序擅长使用一套代码为多个租户提供服务.该体系结构可以使用单个代码源为许多不同的客户端或租户提供服务.构建多租户系统一般都是哪些构建思路呢? 1.什么是租户 在多租户体系结构中,应用程序的一 ...
- 实现多租户系统的一点思考
2020年突发的新冠疫情,让在线协同办公在疫情期间成为了刚需.我们也从 2020 年的 2月3 日开始在家远程办公,直到四月份.协同办公软件一下子火爆了起来,钉钉.企业微信.特别是腾讯会议等都在疫情期 ...
- 新零售SaaS架构:多租户系统架构设计
什么是多租户? 多租户是SaaS领域的特有产物,在SaaS服务中,租户是指使用SaaS系统的客户,租户不同于用户,例如,B端SaaS产品,用户可能是某个组织下的员工,但整个企业组织是SaaS系统的租户 ...
- AMA分享回顾丨镜像网络MW对于分布式存储底层系统的思考和后续发展的看法
2020年11月4日15点,藏金阁CryptoPAV邀请到了镜像网络(Mirror World Network)的联合发起人老冯作客,分享关于「镜像网络MW对于分布式存储底层系统的思考和后续发展的看 ...
- mysql单表多租户架构_多租户系统架构
多租户系统架构 一种多租户系统架构 背景: 去年的时候,因为某些特殊原因,有幸带了一个组,参与了B2B平台的开发.说是B2B平台,因为这套程序开发完了后,可以拿给多个客户使用.客户可以搭建一套具有京东 ...
- 张保生:关于AI法律系统的思考(附PPT、视频)
2018年3月23日,清华校内举办了清华RONG系列论坛之司法大数据专场活动,中国政法大学原副校长张保生教授发表题为<关于人工智能法律系统的思考>的演讲.数据派为大家整理了视频及PPT内容 ...
- SpringCloud微服务实战——搭建企业级开发框架(四十一):扩展JustAuth+SpringSecurity+Vue实现多租户系统微信扫码、钉钉扫码等第三方登录
前面我们详细介绍了SSO.OAuth2的定义和实现原理,也举例说明了如何在微服务框架中使用spring-security-oauth2实现单点登录授权服务器和单点登录客户端.目前很多平台都提供了单 ...
- 多租户系统技术实现mysql_SaaS “可配置”和“多租户”架构的几种技术实现方式...
1.数据存储方式的选择 多租户(Multi-Tenant ),即多个租户共用一个实例,租户的数据既有隔离又有共享,说到底是要解决数据存储的问题. 常用的数据存储方式有三种. 方案一:独立数据库 一个T ...
- 关于企业级系统一些思考
本人参与的一个大型系统至今已经有超过5年的历史,并且仍然还保持至少有30人左右的开发团队.系统本身的功能已经非常之丰富,当然随着而来的便是复杂程度的急剧增加.稳定性降低,需要大量的测试才能保持.另一方 ...
最新文章
- apache 启动故障(httpd: apr_sockaddr_info_get() failed fo)
- OpenCV | 双目相机标定之OpenCV获取左右相机图像+MATLAB单目标定+双目标定
- C#数据库事务原理及实践(下)
- idea中自动deployment的步骤
- 文档过期打不开怎么办_标准的产品需求文档在这里!(详细说明版)(2)
- phpcms文章 title 溢出 str_cut 省略号(······) - 代码篇
- java实现从头部及尾部删除指定长度字符
- 浅谈.net remoting 与webservice
- 看完阿里的代码规范,立马学会代码分层,再也不会被同事怼
- 1.2 Filters
- 斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”
- Java开源电商系统
- camera软件测试技术,Camera功能、图片测试
- 浙江省计算机二级办公软件高级应用技术,浙江省计算机二级办公软件高级应用技术考试大纲.doc...
- 快速合并所有txt文档
- 鲍尔.爱迪斯生前在图论中未完成的问题
- 心理健康测试抑郁分析系统
- oracle中的表别名怎么,Oracle 表别名
- 用python编写吃苹果小游戏
- 格式化内置T卡和外置T卡
热门文章
- 计算机网络系统 NTP时钟同步服务器 IP地址汇总
- 英飞凌 AURIX 系列单片机的HSM详解(4)——Tricore核与HSM核之间的通信方法
- 大学生礼仪青花瓷旗袍 个个显得靓丽
- 【愚公系列】2023年01月 网安实验-.NET程序的破解与加密
- android4.2.2 surfaceflinger,[imx6 ]Android4.4.3--surfaceflinger导致系统起不来,ldb显示问题...
- android 字体样式设置为LCB(实现第三方库字体)
- 关于openwrt使用web升级提示固件版本不对的处理方法
- Linux下解析域名命令-dig 命令使用详解
- 重磅:字节跳动张一鸣90亿布局元宇宙,下一个时代已经来临
- 理解运筹学||数学规划