教科书般的充电桩平台多租户技术架构设计,建议收藏!-慧哥充电桩开源平台

  • 慧哥充电桩开源平台V2.5.2_----- SpringCloud 汽车 电动自行车 云快充1.5、云快充1.6 https://liwenhui.blog.csdn.net/article/details/134773779?spm=1001.2014.3001.5502

一、多租户的概念
多租户本质上是一种软件的技术架构,它最核心的特征是多个租户可以共享一个系统实例,并且租户间是可以实现数据和行为的隔离,这可以说是多租户技术架构里最重要的两点了。
多租户架构是SaaS模式中的重要且常见的架构,通过共享和复用资源降低成本,提高效率和可扩展性。其中最需要关注就是:数据/行为的隔离、身份/角色的认证与授权、底层硬件资源管理、高性能与高可用、定制化和可扩展、数据一致性、系统安全性等。
这里就不过多赘述了,下面会将概念详细铺开。如果要找一个生活中容易理解的场景做比喻,那么多租户的概念其实就和租房子的概念类似,只不过在各自的专业领域所涉及到的术语和具体实现会不一样。
二、隔离模式
一般来说多租户常见的有3种隔离模式:独立数据库、共享数据但独立数据架构、共享数据库且共享数据架构。
2.1独立数据库模式
在这里插入图片描述
独立数据库模式示例
2.1.1特征
一个租户一个数据库,隔离级别最高,对系统底层所涉及到的计算、存储、网络等资源的隔离。
和传统软件模式(SaaS)的区别:
独立数据库模式有标准的租户身份识别、租户入驻流程、计费体系、运营流程等。除此之外,本质上其提供的服务还是端到端的 SaaS 模式,某种意义上可以看作每一个租户都各自拥有一套端到端的基础设施。
2.1.2优点
满足强隔离需求:一些租户为了保证系统和数据的安全性,可能会提出非常严格的隔离要求,期望软件产品能够部署在一套完全独立的环境中,不和其它租户的实例、数据放在一起;
计费逻辑简单:在这种竖井模式下,计费模型相对是比较简单的;
降低故障影响:因为每个租户的系统都部署在独立的环境中,如果一个环境出现故障,并不会影响其他租户的软件服务。
2.1.3缺点
规模化问题:由于租户是各自独立的环境,每入驻一个租户就需要准备、创建、运营一套 SaaS 环境,如果只有少量租户还可以管理,一旦租户的数量多起来,管理和运营这些环境将会是非常大的挑战;
成本问题:每个租户都需要单独的部署环境,那么花费在每个租户上的成本就会非常高,会大幅度降低 SaaS 软件服务的盈利能力;
敏捷迭代问题:一般来说 SaaS 模式的优势是可以很快响应市场变化,可以迅速迭代产品功能,但是在这种竖井模式下更管理、运维这些租户的 SaaS 环境会变得非常复杂且低效;
基础设施的监控:同样地,在这种非中心化的模式下,对每个租户的基础设施的运维与监控也是非常复杂且繁琐的。
2.2共享数据库独立数据架构
在这里插入图片描述
独立数据库共享数据架构模式示例
2.2.1
多个租户或者所有租户共享数据库,每个租户会拥有一个 schema 形成逻辑上的隔离,而并不是物理上的隔离(还在一个实例内)。即多个租户共享一套基础设施,降低 Saas 软件服务的资源成本。
简单介绍下 schema:
schema 就是数据对象的集合,这个集合包含了各种对象如:表、视图、存储过程和索引等。如果把数据库看作是一个仓库,那么schema就是一个个的房间,表就是 一个个的柜子。user 是 schema 的 administrator,有操控每个 schema 的权限。
但需要说明的是,MySQL 数据库中没有 schema 这个概念,但是一个MySQL实例可以有多个数据库。
2.2.2优点
高效管理:在上述共享策略下,所有的租户都可以集中管理,同时监控基础设施将更容易,且产品的迭代可以更快;
低成本:相对于竖井模式的独立数据库,共享数据库的成本更低,还可以方便地根据用户的使用需求动态地扩展系统;
隔离性较好:虽然同在一个实例内,但是做了逻辑区分,租户使用的库不一样,隔离效果还是比较好的。
2.2.3缺点
租户相互影响:由于所有租户共享同一资源,当一个租户占用大量机器时会消耗很多资源,其它租户的使用很可能会受到影响。在这种情况下,对整个系统架构的可用性和扩展性的要求就比较高了,同时可能也考虑适当地设计限流、降级和熔断等措施来应对;
运维工作量大:每增加一个租户,都需要为其需要创建新的业务数据库来进行管理,还可能需要与开发人员共同维护这些数据库;
租户计费困难:所有租户共享资源,使得计费可能更加困难,但在研发资源较为充足的时候也不是很大的问题。
2.3共享数据库共享数据架构
在这里插入图片描述
共享数据库共享数据架构模式示例
2.3.1特征
所有租户共享一个数据库实例,共享同一个数据库,只不过在每张表都加上租户标识字段用以区分。
2.3.2优点
资源成本低:一个实例的一个数据库就可以搞定所有租户的数据,支持的租户数量理论上可以很多;
便于迭代:在开发的时候只需要额外关注租户标识字段就好,产品迭代维护起来也能很方便;
2.3.3缺点
隔离性差:所有租户的数据都放在一起,一旦业务层没有做好对租户标识的区分,很容易造成租户的数据混乱;
性能瓶颈:随着租户数据量的成倍增加,单表的性能一定会逐步下降,且性能优化会受限于基础资源的不足;
扩展性差:一旦业务变得复杂,业务之间的耦合也会变紧,可能会引起分布式事务、数据不一致性等一系列的系统问题。

三、隔离方案选型
关于怎么对上述提到的 3 种隔离模式的选型,可以从以下 4 个维度来做比较:
1.资源共享度:即多个租户之间的对基础设置的共享程度如何,是竖井还是schema还是共用数据库?
2.数据隔离度:当租户对于业务数据的隔离要求比较高时可以选择竖井,成本比较紧张或者在初始阶段可以考虑共享数据库;
3.业务复杂度:有些核心业务是比较复杂的,对整体的服务和底层资源的考验都比较大,其它业务可以适当做一些简化;
应用成本:既然选用多租户技术框架,那么说明用户肯定是达到了一定的量级,运营、维护、硬件等的综合成本一定要考虑。
在这里插入图片描述
隔离方案选型对比图示
四、架构模型
4.1模型分层
在这里笔者分为了3个层次:管理层、服务层、基础设施,如多租户架构图示(一)所示,下面展开讲一下这样分层的原因。
在这里插入图片描述
多租户架构图示(一)
管理层
这一层有点类似于阿里云的控制台,阿里云自己内部可以监控每个租户的大致情况,租户自己可以监控到自己付费的资源情况。
5.对于开发者而言,这一层主要就是对租户的管理:即租户购买了哪些服务、租户之间的隔离、对租户的计费等。就像房东对一栋楼每个房间租户的管理:几层几号房租给了谁、要租多久、租金包含什么等,房东只管出租和维护房子,不会管里面租户的日常生活。
6.对于租户而言,就是对花钱租的服务进行管理:即具体购买了哪些系统、哪些资源、怎么角色授权等。比如租户租了个一室一厅一卫,客厅怎么布置、厨房要不要做饭、卫生间的垃圾几天丢一次,这些东西房东基本不会干涉的。
服务层
这一层就是具体提供的系统服务了,这些服务是由开发者开发的,一般情况下所有租户都是共享一套代码和系统的,特殊定制化的服务除外。
7.对于开发者而言,普通传统 SaaS 开发模式下,对每一个客户都得定制开发一套系统,虽然定制化的内容可能大同小异,不会有本质上的区别,但受到数据隔离、底层资源和角色授权等方面的限制,只能单独为每个客户部署一套服务和一套资源。
一旦客户的数量多起来,劣势是非常明显的:开发成本和部署的成本都太高了,且可复用程度低。
多租户模式下,如果有一套优秀的、成熟的多租户技术架构,那么无论对于开发者还是租户,都是省时省力省钱且高效的。像阿里云提供的 CDN 内容分发、OSS 对象存储、RDS 云数据库、SLB 负载均衡等可供租户购买的服务,都是经过市场打磨的优秀产品。
8.对于租户而言,这层就是购买的具体服务了,这些购买的服务一般会作为底座,用于支撑租户的业务发展。举个例子:A 公司花 10 万元买了阿里云的一些产品服务来支撑自己公司的业务,A 公司将这些业务投入市场后,销售价格可以为 15 万元,而可能阿里云为一个租户提供产品服务的实际成本仅为 5 万元。
基础设施
这一层有点类似于IaaS基础设施即服务的概念。我们知道,无论什么软件服务都要基于 CPU、内存、磁盘、路由器、交换器等一系列的硬件设施。
9.对于开发者而言,基础设施要么自建要么采购。就目前来说,市场上只有少数几个厂家拥有成熟的硬件设施解决方案,所以软件服务的开发者一般以采购为主;
10.对于租户而言,对基础设施是无感的:租户不必关心具体的底层硬件结构,只需要关注服务层的告警,如有告警可以提出紧急工单对接开发者。
4.2模型关系
这个模型里我理解可以分为 4 种体系:SaaS平台体系、权限角色体系、业务体系与云资源体系。如多租户架构图示(二)所示,每种体系之间都有各自的关联关系。为方便大家理解,每种关系我都展开讲讲。

在这里插入图片描述
多租户架构图示(二)
SaaS平台与租户的关系:这个平台里面有多个租户,一般的话采用共享数据库独立数据架构的模式,容纳几十个租户应该问题不大。
租户与组织用户的关系:租户一般指的是企业或者组织,通常会有一些员工担任管理员的角色来管理购买的 SaaS 服务。
用户与权限角色的关系:面对众多的 SaaS 服务系统,一般只会选择性地给用户授予某些权限,比如管理员、超级管理员等。
租户与业务的关系:一般来说这里的业务指的是租户自己的业务,租户需要依赖购买的 SaaS 服务来支撑这些业务。
业务与底层资源的关系:底层资源一般指的是服务器等硬件资源,但是业务通常不关心底层资源。
租户与底层资源的关系:租户需要在购买的时候知道底层硬件的配置,其运维和告警等由 SaaS 管理平台的开发者负责。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/684289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx漏洞解析及复现

Nginx漏洞 Nginx能做到正向代理、反向代理、负载均衡、HTTP服务器等,强大的功能不言而喻,但也伴随着使用 上的风险,深入理解Nginx的漏洞有助于创建安全的业务系统。 Nginx解析漏洞 漏洞原理 Nginx的解析漏洞的出现和Nginx的版本没有关系&…

C-数据结构-树状存储基本概念

‘’’ 树状存储基本概念 深度(层数) 度(子树个数) 叶子 孩子 兄弟 堂兄弟 二叉树: 满二叉树: 完全二叉树: 存储:顺序,链式 树的遍历:按层遍历&#xff0…

Angular封装高德地图组件实现输入框搜索,地图点击选地点

Angular封装高德地图组件实现输入框搜索,地图点击选地点(Angular17版本) 话不多说直接上代码 创建一个独立组件 html代码: <div style"position: relative;"><input #searchInput nz-input placeholder"请输入地址"/><div #mapContaine…

MarianMT进行文本数据增强

B战学习视频&#xff1a;使用MarianMT进行文本数据增强 pip install transformers4.1.1 sentencepiece0.1.94 pip install mosestokenizer1.1.0from transformers import MarianMTModel,MarianTokenizer初始化模型&#xff0c;将英语翻译成罗曼语, target_model_nameHelsink…

力扣爆刷第148天之贪心算法五连刷(区间合并)

力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09; 文章目录 力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09;一、406. 根据身高重建队列二、452. 用最少数量的箭引爆气球三、435. 无重叠区间四、763. 划分字母区间五、56. 合并区间六、738.…

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)

文章目录 Android开机动画压缩包zip&#xff0c;自制开机动画1.Android加载压缩包原理2.自制开机动画 Android开机动画压缩包zip&#xff0c;自制开机动画 1.Android加载压缩包原理 这里有个md文件我们看下 核心部分, 首先要创建一个文件叫做desc.txt&#xff0c;这是规定的…

Facebook开户|Facebook广告设计与测试优化

早上好家人们~今天Zoey给大家伙带来的是Facebook广告设计与测试优化&#xff0c;需要的家人们看过来啦&#xff01; 一、避免复杂用图和过多的文字 根据Facebook的数据显示&#xff0c;用户平均浏览一个贴文的时间在手机上仅花1.7秒、在电脑上则为2.5秒。因此&#xff0c;广告…

Dockershim 与 Containerd:两种容器运行时的故事

在不断发展的容器化世界中&#xff0c;两个关键组件经常被混淆&#xff1a;Dockershim 和 containerd。虽然它们在管理容器方面都发挥着重要作用&#xff0c;但它们的用途却截然不同。本文深入探讨了它们的功能&#xff0c;深入探讨了 Dockershim 和 containerd 之间的区别。 揭…

亚马逊运营黑科技,自养号测评技术打造产品权重

关于亚马逊运营&#xff0c;常规运营投入的成本过于高&#xff0c;而且广告投入效果也微乎其微&#xff0c;这也是为什么大多数卖家选择自养号测评的最主要原因。自养号测评技术&#xff0c;是一种用于提升产品权重和知名度的策略。以下是对该技术的详细解析&#xff1a; 一、…

CSS 常用的三种居中定位布局

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“”。 一、三种常用布局 1.子绝父相 margin 居中 注意&#xff1a;父级相对定位&#xff0c;子级绝对定位&#xff0c;并且子级margin-left&#xff0c;margin-top是负值&#xff0c;为宽度、高度的一半。 /** …

Java 中的 Map 集合:入门篇

在 Java 编程中&#xff0c;Map 是用于存储键值对。它提供了快速的查找和检索功能&#xff0c;是处理大量数据的理想选择。 本文将深入介绍 Java 中的 Map 集合&#xff0c;包括其基本概念、常见实现类、典型用法以及一些常见问题的解决方案。 1. Map 的基本概念 Map 是一种键…

电脑响度均衡是什么?它如何开启?

什么是响度均衡 响度均衡&#xff08;Loudness Equalization&#xff09;是一种音频处理技术&#xff0c;旨在平衡音频信号的响度水平&#xff0c;使得不同音源在播放时具有相似的响度感受。简单来说&#xff0c;它可以让用户在播放不同音轨或音频内容时&#xff0c;不需要频繁…

Echarts柱状图数据太多,自定义长度之后,自适应浏览器缩放

不知道是不是最优解&#xff0c;但是当前解决了我遇到的问题&#xff0c;如有更好的方法&#xff0c;希望看到这篇文章的同学可以不吝指导一番&#xff0c;非常感谢 1、问题描述&#xff1a; 因Ecahrts柱状图数据有时多有时少&#xff0c;所以在数据达到一定程度之后&#xff…

20240606在Toybrick的TB-RK3588开发板的Android12下确认HDMI的驱动

20240606在Toybrick的TB-RK3588开发板的Android12下确认HDMI的驱动 2024/6/6 9:48 【原文是在RK3328的Android7.1下写的。我将它升级成为RK3588的Android12了】 RK平台主要采用 FB 和 DRM 两种显示框架。与此相对应&#xff0c; HDMI 也有两套驱动。 FB&#xff1a; LINUX 3.10…

分表策略,你真的分对了?

垂直分表方案 表的记录并不多&#xff0c;但是字段却很长&#xff0c;表占用空间很大&#xff0c;检索表的时候需要执行大量的IO&#xff0c;严重降低了性能。这时需要把大的字段拆分到另一个表&#xff0c;并且该表与原表是一对一的关系。 为什么垂直拆分之后查询性能就变快…

Django里的Form组件

Form组件提供 自动生成HTML标签和半自动读取关联数据 (“半自动”是指还得需要自己手写输入数据进来)表单验证和错误提示 要想创建并使用该组件&#xff0c;操作步骤如下&#xff1a; 在 views.py 里创建类 # 在 views.py 文件里from django import formsclass AssetForm(fo…

HDFS文件块损坏处理方案

1、问题概述 flume采集文本文件存储到hdfs中hive的ods层目录,并在hive中通过msck repair table刷新元数据,加载文本文件。报错如下: 2、问题分析 文件块BP-531411289-172.31.57.12-1539657748238出现了未知异常,导致namenode不能获取该文件块的信息,该文件块是由flume采…

JeecgBoot/SpringBoot升级Nacos(2.0.4到2.2.3)启动报错

错误如下&#xff1a; 报这种错误基本就很头大了&#xff0c;是框架不兼容的问题&#xff0c;自己找很难找到解决方法。 解决方案是把SpringBoot框架版本调高。 修改前&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId&g…

如何在 Mac 上玩 Windows 游戏:Parallels Desktop 玩转秘籍

引言 作为一名热爱游戏的 Mac 用户&#xff0c;你可能曾为 Mac 系统的有限游戏选择感到困扰。然而&#xff0c;通过 Parallels Desktop 虚拟机软件&#xff0c;你可以在 Mac 上轻松畅玩多款 Windows 游戏&#xff0c;尽情体验游戏的乐趣。 为什么选择 Parallels Desktop&…

刷机维修进阶教程-----魅族18系列 魅族21系列机型修复基带 改写参数等 通用新机型操作 步骤解析

在前面几期博文中解析了一些老款机型修复基带 修复各项参数以及改写参数的步骤解析。通常这些步骤可以用于各种问题导致的基带丢失 串码丢失以及有些参数修复或者一些特殊场合需要改写参数的需求。今天对于一些新机型操作以上需求做一些步骤解析,明白其操作原理。可以通用于一…