多租户saas云平台框架---weiit

article/2025/9/22 18:01:45

今天谈下云平台下的多租户架构,不论是在公有云还是私有云平台,是设计一个面向最终组织或用户的 SaaS 应用还是面向业务系统的 PaaS 平台,多租户都是前期架构设计的一个关键内容,因此有必要对里面的一些核心要点进一步说明。

多租户架构概述

首先还是看下百度百科对多租户的一些关键说明如下:

多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。一个支持多租户技术的系统需要在设计上对它的数据和配置进行虚拟分区,从而使系统的每个租户或称组织都能够使用一个单独的系统实例,并且每个租户都可以根据自己的需求对租用的系统实例进行个性化配置。

多租户技术可以实现多个租户之间共享系统实例,同时又可以实现租户的系统实例的个性化定制。通过使用多租户技术可以保证系统共性的部分被共享,个性的部分被单独隔离。通过在多个租户之间的资源复用,运营管理维护资源,有效节省开发应用的成本。而且,在租户之间共享应用程序的单个实例,可以实现当应用程序升级时,所有租户都可以同时升级。同时,因为多个租户共享一份系统的核心代码,因此当系统升级时,只需要升级相同的核心代码即可。

这段描述可能理解起来比较啰嗦,我们还是从简单的场景来进行说明。

比如我们开发一个 SaaS 云服务的 CRM 系统。这个系统部署在公有云端可以开放给多个企业客户使用。那么我们就遇到了一个关键问题。即是否当新入驻一个新的企业客户的时候,我们都需要重新在部署一套应用给这个客户使用?

如果是这样,那么当新客户入驻的时候,将带来具体的人工投入和资源投入成本。

因此实际的情况是我们希望新增加客户的时候,仍然还是已有的那套应用系统。但是对于最终的入驻客户来说,我们又希望客户完全感知不到这点,就像是单独给他们部署了一套系统一样。虽然很多客户使用同一套应用,但是能够很好地做到资源和数据的隔离。

而这正好就是多租户架构的一个关键点。

多租户,多组织,用户区别

接着谈下一些常见概念的关键区别。

多租户和多组织

实际上在云计算和多租户这些概念出来前,就已经有多组织的概念。

比如常说的类似 Oracle ,SAP 等 ERP 系统都是支持多组织架构。多组织架构简单来说就是对于一个大的集团性质企业,企业本身涉及到子公司或分公司,子公司可能涉及到独立法人也可能涉及到需要独立输出财务报表,或者相关公司还在海外涉及到不同的财务和会计准则。

基于以上各种场景持续了多组织架构。

一个多组织架构支撑集团所有的企业都上同一套 ERP 系统,里面通过法人,财务账簿,OU 等设置进行了多组织的支撑。而不是单独为一个子公司再去部署一套独立的应用系统。

从这个概念来看多组织和多租户相当类似。

那么两者的关键区别点在哪里?

简单总结来说多组织架构重点考虑的是数据层面的隔离,但是对于多租户架构更多的还需要考虑资源层面的隔离。多组织架构一般不会考虑类似云平台中的计费和计量管理,数据隔离更多是为了后续财务和数据安全管控要求,而多租户架构则需要考虑计费和计量管理。多组织架构下一般资源全共享,而多租户架构下资源是否共享和资源安全管控要求相关。

租户和用户

租户和用户实际是不同的两个概念,租户更多的是为了资源管理和计费计量使用,而用户更多的是为了业务功能和授权使用。

租户和用户有时候也是一一对应的关系,比如你开发一个面向个人用户的在线邮箱 SaaS 应用,那么这个时候租户和用户本身是对应的,租户即用户。

但是如果你开发的是一个面向企业的 SaaS 应用系统,那么这个时候租户对应的是组织这个层面,即入驻的企业是租户,对应企业入驻后,SaaS 应用会先给企业分配一个管理员账号,这个时候管理员再去详细的录入企业里面的具体用户账号。

也就是说租户是第一层,而下面的组织架构和用户是第二层

SaaS 应用和 PaaS 平台的多租户

注意对于 SaaS 应用和 PaaS 平台本身都有多租户的概念。

对于 SaaS 应用来说,比如一个 toB 的 SaaS 应用服务。最终面对的是企业和最终用户,因此每一个入驻的企业组织就是租户。

而对于 PaaS 平台来说,比如我们在企业内部建设一个公共流程平台,这个流程平台即企业私有云内部的 PaaS 平台一部分,那么这个平台本身也需要进行多租户设计,而这个平台的租户实际是各个需要使用流程引擎能力的业务系统。对于类似容器云 PaaS 平台,消息,缓存各种 PaaS 技术服务,都可以看到实际上各个业务系统就是最终的租户。

还是拿上面的例子来说。

如果企业内部的公共流程平台提供给多个业务系统开发商使用,类似用友在该企业本身开发了 CRM 和 SRM 两个业务系统。

那么实际管理方式可以是 CRM 和 SRM 单独进行租户申请和注册。也可以是两层结构,即还是先进行组织申请,组织作为第一层租户。但是组织接入后还需要维护需要接入的业务系统,业务系统作为第二层租户。第一层的组织实际只是一个抽象的租户集的概念。

而实际的资源管理,计量计费等可以细粒度地管理到业务系统这个层级。

多租户架构设计和资源隔离

在多租户和云结合的情况下,IaaS 基础资源层的共享已经会变化为最基本的要求。那么在 Iaas 层之上来谈主要则包括两个方面的内容,即应用是一套还是多套?数据库是一套还是多套?最彻底的多租户即上图中的第 6 种 share everything 的模式,在这种模式下数据库和应用都为一套。

多租户我们首先考虑隔离,在多租户下的隔离包括了几个方面的内容。

一个是系统本身元数据和基础主数据的隔离(用户,角色,权限,数据字典,流程模板),一个是系统运行过程中产生的动态数据的隔离,一个是业务系统底层所涉及到的计算资源和存储资源的隔离。

在应用一套,数据库多套或多 schema 分离情况,我们比较容易实现计算资源和存储资源的单独分配,但是在完全 share everthing 的情况下,对于计算和存储资源的隔离则需要我们的 PaaS 应用本身去考虑。

在当前云原生和容器下,整个动态部署和持续交付都更加容易,那么为了更好地进行资源隔离,我们完全可以为单独的大租户动态的扩展一套独立的容器集群为该租户服务,即实现该租户能够单独使用一组容器资源池而非共享。

在私有云下的多租户,往往隔离又不是绝对的,在能够完全隔离的情况下又需要支撑跨租户或组织的数据共享,可以看到如果存在这种需求,在 Share everthing 的情况下是比较容易满足的。

多租户除了隔离外,另外一个重点就是能够为各个租户按需要实时地提供各种计算资源和存储资源,而且有清楚定义的数据采集和计费模型。由于资源池是共享的,我们必须要能够准确地采集到各个租户对实际资源的使用情况,以方便进行多租户的计费。

共享资源时候的资源隔离

当在 IaaS 云平台的时候,一台物理机可以虚拟化为多台虚拟云主机提供给不同的租户使用,虚拟机可以做到在计算,网络,存储等方面的资源逻辑隔离。也就是说一个租户本身导致的虚拟机使用异常或性能问题,并不会影响到其它租户使用的虚拟机。

到了 SaaS 层多租户,实际上仍然需要考虑租户下面的资源管理,特别是在多个租户共享一套底层资源的情况下。

比如当前有 A,B,C,D 四个租户在使用 SaaS 版本的 CRM 系统,那么我们就需要考虑是不是会出现由于 A 租户出现的大并发和大数据量访问而导致了剩余的三个租户无法正常使用系统。要做到这点,我们就必须做到面向租户的服务容量控制,服务限流等能力。

多租户下的资源计费

如果是一个 IaaS 平台的多租户,可以看到对于弹性计算和弹性存储资源都是单独申请的,资源本身也是逻辑隔离,这个时候计费相对简单。

但是对于 SaaS 应用来说,要做到按资源使用情况计费就比较复杂。因此一般的 SaaS 应用会简单地根据用户注册数,并发数或存储容量分配来进行组合计费。当然如果是非共享资源模式的多租户架构,相当来说就更加容易按资源使用来进行计费。

多租户下的分域和分组

即使是资源完全共享下的多租户架构,仍然不建议采用一个大集群来为所有租户提供服务,而是应该对大集群进行分域或分组,或者多大的集群资源进行分区或分片处理。让不同的租户分配到不同的集群组或分片上面。

这样做的好处可以避免单个大集群无限扩展导致的性能问题和管理难度,同时也提升了整个应用对外的容错能力,比如 A 集群全部故障,还可以快速的将 A 集群流量切换到 B 集群。

多租户下的数据库扩展

在公有云下的多租户,如果采用完全共享的模式,还必须考虑数据库的可扩展性,多租户架构服务下的数据库可以是独立数据库,共享数据库但是 Schema 独立,完全共享数据库几种模式。

独立数据库模式为每个租户分配一个独立的数据库,其在 SID 层就是完全独立的。而对于共享数据库但是 Schema 独立这种模式下,SID 只有一个,但是当入驻新的租户的时候会单独新生成一个独立的 Schema。

最后一种模式就是完全共享数据库,SID 和 Schema 都只有一套,在这种模式下核心是所有数据库表都需要增加租户 ID 字段对数据进行多租户隔离,以保障某一个租户登录系统只能够看到自己租户下的相关信息。如果是一个完整的多租户应用,还需要考虑第二层按用户,组织,角色群组等进行第二级的数据隔离,以满足业务系统的使用需求。

可以看到独立数据库模式资源利用率低,但是数据隔离性最好;而完全共享模式下资源利用率高,但是数据隔离性最弱。因此具体采用哪种模式仍然需要根据实际租户的需求来进行灵活创建和配置,一个灵活的 SaaS 应用实际需要同时灵活支撑上面三种模式。最后给大家推荐一个早些年全开源的 saas 新零售系统:weiit-saas是一款Java开源项目,属于weiit团队自研产品,意在通过技术封装,让企业无需代码开发,帮助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城。对 saas 感兴趣的小伙伴可以去研究学习一下。


http://chatgpt.dhexx.cn/article/T0Bd9IG7.shtml

相关文章

SaaS是什么,目前主流的国内SAAS平台提供商有哪些?

SaaS是什么,目前主流的国内SAAS平台提供商有哪些?SaaS这个概念近两年可谓说是十分火热,尤其是后疫情时代。 但还是有很多人对SaaS这个名词云里雾里,被碎片化的信息裹挟,并没有真正意义上理解SaaS的概念。 这篇就综合…

移动端mousedown不生效 类型“TouchEvent”上不存在属性“clientX”

移动端只有如下四个操作 mousedown相当于touchstart 然后两个方法里面的对象也不一样,mouse的是MouseEvent,touch的是TouchEvent。 MouseEvent里面的clientX对应TouchEvent里面的changedTouches[0].clientX,所以做个判断,适配下…

WPF开发经验-WPF的TextBox控件的MouseDown事件不响应的解决方法

一 问题的发现 最近项目有个需求,大概是,当点击某个TextBox时,先执行一些业务上的逻辑处理。 于是按以往思维,将TextBox的MouseDown事件关联事件处理方法,将业务处理写在方法里。 调试发现,点击TextBox时&a…

原生js事件 mousedown,mouseup,mousemove结合实现元素拖拽

拖拽要注意 解决鼠标焦点丢失问题 鼠标移动过快,会导致鼠标移出盒子,出现盒子和鼠标不同步,且在盒子外鼠标抬起,发现鼠标再次划入盒子,不点击鼠标盒子也仍然还会拖拽。 IE/火狐 把盒子和鼠标绑在一起 调用元素的 se…

mousedown、mousemove、mouseup实现一个可拖拽的div

可拖拽的div 前言:前端开发当中不单单是简单的页面布局,很多的事件也应用在其中,比如一个窗口实现在整个页面的拖动的需求。 明确步骤 (1)对div设置position:absolute;属性并设置top&#xff1a…

WPF中Button中的MouseDown和MouseUp不触发问题解决方法

按照WPF的帮助说明,某些控件的路由事件被内部处理了,已经被标记为Handled,自行定义的事件处理代码便不再起作用了,有时候会很郁闷! 不过WPF提供了必要的方法。1)使用相应的Preview事件。须注意隧道类型的事…

Three.js mousedown不触发

想点击3D物体触发事件,然后进行旋转操作之后再抬起的时候也会触发click事件,因此想在鼠标按下的时候记录一下鼠标位置,click触发的时候判断位置是否相等再触发事件。 但是试了好久mousedown事件怎么都不触发,最后发现是和OrbitCon…

Web服务器性能压力测试工具

webbench webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。 下载地址可以到google搜,我这里给出一个 下载地址:http://soft.vpser.net/test/webbench/webbench-1.5.tar.gz 安装非常简单 #tar zxv…

web压力測试-Web Bench

1.web bench下载。地址:http://home.tiscali.cz/~cz210552/webbench.html 2.wen bench安装: [rootweb111 tmp]#tar -zxvf webbench-1.5.tar.gz [rootweb111 tmp]# cd webbench-1.5 [rootvstar111 webbench-1.5]# ll total 28 lrwxrwxrwx 1 1001 root …

电脑网页压力测试软件,网站压力测试工具

网站压力测试软件可以测试不同上网方式、不同地区、访问Web不同页面、在不同并发访问密度情况下的客户端响应时间、流量和流速,实现极高的服务器测试,数据精准。网站压力测试软件适用于所有windows平台,操作简单,新手也能快速上手…

十个免费的 Web 压力测试工具

本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的。这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能。 0. Grinder – Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提…

介绍几款Web服务器性能压力测试工具

原文转自:http://www.qixing318.com/article/introduce-a-few-web-server-performance-pressure-testing-tools.html 目录结构 一、http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。…

web服务器压力测试工具---ab

文章目录 写在前面1、吞吐率(Requests per second)2、并发连接数(The number of concurrent connections)3、并发用户数(The number of concurrent users,Concurrency Level)4、用户平均请求等待…

WEB压力测试

互联网的普及,宽带的流行,使得越来越多的 个人和单位都架设了自己的网站。而充当网站的 服务器 的大多是普通的PC或者低档 服 务器 , 这样访问者人数一多或者遭受DDos攻击,很容易造成瘫痪。因此我们需要网站在真正发布前对其进…

10个免费的web压力测试工具

转自:http://apps.hi.baidu.com/share/detail/53794908 当一套程序写完或者一台服务器配置完成后,相必很多朋友会像我一样,非常想知道它到底能够承受多大的负载压力,那在本文中,就给大家介绍十个免费的可以用来进行Web…

Web网页性能压测工具 ApacheBench 和 WebBench

转载: Web网页性能压测工具 ApacheBench 和 WebBench (米扑博客) 1. ApacheBench ab 压测工具安装 ab是针对apache的性能测试工具,可以只安装ab工具,支持 http 和 https 网页。 Ubuntu安装:sudo apt-get -y install…

网站压力测试工具webbench

webbench最多可以模拟3 万个 并发连接 去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。 1、适用系统:Linux 2、编译安装: 引用 wget http://blog.s135.com/soft/linux/webbench/webbench-1.…

web压力测试-Web Bench

1.web bench下载,地址:http://home.tiscali.cz/~cz210552/webbench.html 2.wen bench安装: [rootweb111 tmp]#tar -zxvf webbench-1.5.tar.gz [rootweb111 tmp]# cd webbench-1.5 [rootvstar111 webbench-1.5]# ll total 28 lrwxrwxrwx…

web压力测试工具(持续更新)

由于需要测试zabbix监控性能,特意研究了下web压力测试工具,工具如下: 第一款:http_load http_load是一款基于Linux平台的web服务器性能测试工具,用于测试web服务器的吞吐量与负载,web页面的性能&#xff…

十个免费的 Web 压力测试工具(转)

本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的。这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能。 0. Grinder – Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提…