SaaS架构实现理论(四)可伸缩多租户

2023-11-05


《互联网时代的软件革命-SaaS架构》学习笔记四

1.伸缩性(Scalable)的概念

伸缩性强调的时性能、容量等方面的可扩展。最理想的情况时,随着用户数的增大,系统架构不用做调整,而仅需要增加/增强相应的硬件设备(服务器、数据库服务器)即可。

实现可伸缩的最简单方式就是垂直扩展或向上扩展,即增强硬件设备。这种方式几乎是任何应用架构普遍适用的,但通常面临高成本的问题。
通常强调的应用架构具有可伸缩性,一般是指水平扩展或向外扩展。

2.应用服务器层的水平扩展

实现应用服务器层的负载均衡,是实现应用服务器层水平扩展的最主要手段。具体实现负载均衡的策略有两种:

  • 基于硬件负载均衡设备实现负载均衡,这个方式更好但是贵
  • 基于软件的方式实现负载均衡,例如通过配置Apache Http Server,下面介绍

Apache可以实现负载均衡,根据服务器的压力情况,将每个用户请求分布到不同的应用服务器上。但是,大部分应用的用户请求可能是有状态的(一般使用Session记录用户状态)。这种情况下,如何能够在多台应用服务器之间保持用户状态,将是实现应用服务器层水平扩展的关键。在处理这个问题上,通常策略有三种:

  • Session复制
  • Session Sticky
  • 基于Cache的集中式Session

2.1基于Session复制的水平扩展方式

很多应用服务器都强调支持强大的集群功能,Session复制就是强大的集群功能特征之一。
通过Session复制,大部分应用都可以实现应用服务器集群。通过增加应用服务器集群中的服务器数量,应用就可以达到水平扩展的目的。

以Apache+JBoss为例,配置Load Balance和Session复制。

2.2基于Session Sticky的水平扩展方式

为了避免Session复制带来的性能影响,可以使用Session sticky,这种方式将同一用户请求转发到特定的JBoss服务器上,避免集群中的session复制。

上面方式基础上,在Apache配置worker.properties中的worker.loadbalancer.sticky_session由0调整为1,JBoss不变。

2.3基于Cache的集中式Session实现水平扩展

session复制方式性能差,Session Sticky方式无法保证fail-over。使用集中式Cache来代替Session。
应用服务器层基本实现了完全的水平扩展,应用服务器层的压力基本上可以完全通过增加服务器进行扩展。集中式Session服务器采用MenCached,其本身也具备水平扩展能力。当Session数量大到一台Cache服务器都无法承担的程度时,我们也只需要增加相应的Cache服务器即可。

2.4三种水平扩展方式的比较

在这里插入图片描述

3.数据库的水平扩展

  • 数据库的垂直切分:将不同的功能模块所涉及的表划分到不同的物理数据库中,从而将对这些表的访问压力分担到多个不同的物理数据库中。
  • 数据库的读写分离:同一个数据库在多个物理服务器上具有多份copy,彼此同步。然后将对于数据库的写操作都统一到一个主服务器上,而读操作则分摊到多台从服务器上。通过读写分离,实现数据库访问压力的分担。
  • 数据库的水平切分:将原来存储在一个数据表中的数据,按照一定的规则,切分到多个不同的物理数据库中。每个数据库的数据结构完全相同,但是数据各不相同。最终对于业务的访问,会根据其数据所在的数据库,定位到某一个数据库中查询。

3.1数据库的垂直切分

对于论坛这样的于其他模块没有紧密耦合的功能模块,其涉及的数据库表就首先可以垂直切分。
对于大部分应用而言,除非模块间的关联很少,否则实现垂直切分不容易:

  • 原本可能存在的表链接,需要想办法去除
  • 原本同一个数据库的事务操作,可能会变成跨数据库的事务

3.2数据库的读写分离技术

对于读多写少的互联网应用,会广泛采用读写分离技术。例如MySQL的Replication技术就是被广泛使用的读写分离技术。

3.3数据库的水平切分

SaaS应用的不同租户之间在业务上没有任何关联,租户之间的数据是完全隔离的。只有很少部分的共享数据(整个系统全局性的一些配置信息),但它们通常都是只读的,是不允许任何一个租户更改的。

架构改造:
首先,租户和用户数据必须位于一个集中式的数据中。原因是在用户登录之前,系统是无法预知其属于哪一个租户的。
租户对应到那个物理数据库的映射,通常有两种处理方式(采用Hash算法;将租户对应到哪个物理数据库也做关系表存储在集中式的租户数据库中)

3.4三种数据库的睡哦扩展方案对比

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SaaS架构实现理论(四)可伸缩多租户 的相关文章

随机推荐

  • 【嵌入式百科】004——ASCLL码表

    在计算机中 所有的数据在存储和运算时都要使用二进制数表示 因为计算机用高电平和低电平分别表示1和0 例如 像a b c d这样的52个字母 包括大写 以及0 1等数字还有一些常用的符号 例如 等 在计算机中存储时也要使用二进制数来表示 而具
  • 用pandas的read_csv函数读取csv文件某一列,每间隔5个数读取一个值,写出代码

    使用pandas read csv 读取csv文件中某一列 每间隔5个数读取一个值的代码如下 import pandas as pd 读取csv文件 df pd read csv 文件路径 获取某一列数据 column df 列名 每间隔5
  • 樱花映射手机上用linux,Sakura Frp 成功迁移至 Linux 服务器

    之前 Sakura Frp 主站是搭建在 IIS 10 0 PHP 5 4 45 nts MySQL 5 7 的服务器上的 机器是 i5 6500 PHP 5 4 45 安全性不够高 性能也很差 MySQL 在高并发请求下还是不够快 于是琢
  • PADS Router VX2.7 常规设计规则

    双击PCB空白区域跳出 设计特性 点击层 布线可以选择能否布线 如果关掉则该层无法布线 栅格 也可以使用快快捷键 G 5 GD 5中间需要空格与layout和logic不同 安全间距与layout设置一致 需要根据板厂生产工艺来决定 这些间
  • 上三角、下三角、对称矩阵

    说明 上三角矩阵是矩阵在对角线以下的元素均为0 即Aij 0 i gt j 例如 1 2 3 4 5 0 6 7 8 9 0 0 10 11 12 0 0 0 13 14 0 0 0 0 15 下三角矩阵是矩阵在对角线以上的元素均为0 即A
  • 华为OD机试真题 Java 实现【火车进站】【牛客练习题】

    一 题目描述 给定一个正整数N代表火车数量 0
  • 源端串联端接详解(转载)

    来源 一博自媒体 时间 2016 4 13 类别 微信自媒体 文 袁波 一博科技高速先生团队队员 拓扑和端接序列文章 记得刚接触SI的时候最先遇到的信号完整性问题就是过冲和振铃 产生过冲和振铃的最直接原因就是传输通道阻抗不匹配 抑制过冲和振
  • vs2019无法打开文件“libboost_thread-vc141-mt-gd-1_69.lib”

    最近在用darknet做目标检测相关的东西 然后是在windows环境下进行的 需要用到boost 但是这是我第一次使用boost 就像个小白一样 才了解到boost使用需要先编译 然后使用其它的来调用这个lib库 所以才会出现下面的这种报
  • AR模型是一种常用的信号建模方法,其目的是找到一些线性组合使得当前时刻的信号值能够由过去时刻的信号值预测得到

    AR模型是一种常用的信号建模方法 其目的是找到一些线性组合使得当前时刻的信号值能够由过去时刻的信号值预测得到 在实际应用中 需要对信号的功率谱密度进行估计 本文将介绍基于LS估计和Cadzow谱估计法来实现AR模型的信号功率谱密度估计方法
  • Vue项目中引入Jquery

    文章目录 前言 1 进入项目根目录 执行如下命令 安装jquery依赖 2 在webpack config js中添加如下配置项 3 在main js中引入 加入下面这行代码 全局引入 总结 前言 记录在vue项目中如何引入jquery 1
  • LSTM matlab实现

    前期在学习特征分类的时候确实花了不少功夫 想去了解一下长短时记忆网络的分类效果如何 这里主要分享一下LSTM的一些简介和代码 这个例子展示了如何使用长短时记忆 LSTM 网络对序列数据进行分类 若要训练深度神经网络对序列数据进行分类 您可以
  • Qt之QTextEdit

    关于QTextEdit Qt5对Qt4的做了一些小的改动 看上去很多方法都发生了变化 但万变不离其中 如 槽函数setFontFamily const QFont 变为setFontFamily const QString fontFami
  • Could not retrieve mirrorlist http://poptop.sourceforge.net/yum/stable/mirrorlist-poptop-stable-rhel

    解决说明 rm etc yum repos d pptp repo yum update
  • 手把手教你Hook Android 点击事件

    文章目录 前言 一 什么是Hook 二 Hook的优势 三 Hook前置条件 1 反射 2 代理模式 四 Hook实战 总结 前言 随着技术的不断创新 Android的需求也是越来越多 Hook技术是走向Android高级开发的必经之路 提
  • linux 命令ls /du用法

    copy https www cnblogs com xueqiuqiu p 7635722 html ls的用法 ls l grep wc l或find company type f wc l 查看某文件夹下文件的个数 包括子文件夹里的
  • LeetCode数据库题目汇总二(附答案)

    81 查询结果的质量和占比 查询表 Queries Column Name Type query name varchar result varchar position int rating int 此表没有主键 并可能有重复的行 此表包
  • Java Web 里Servlet的介绍与理解

    文章目录 目录 文章目录 前言 一 Servlet是什么 Servlet介绍 Servlet的工作流程可以用下面的图来表示 二 使用Servlet的步骤 1 创建一个Maven项目 然后在pom xml中导入所需的Jar包 2 编写继承了S
  • 练习题_进程

    1 一个正在运行的进程 当发生某一事件 将其挂在 A A 等待队列 B 运行队列 C 就绪队列 D 任意一个队列 解析 只有在分时系统时间片完时 进程由运行转为就绪状态 一 般来说 有事件发生时 进程会被挂在等待队列 2 下列选项中 导致创
  • MySQL用户管理和权限管理

    MySQL用户管理和权限管理 在项目中 一个数据库有很多人需要使用 不能所有的人都使用相同的权限 如果人比较多 一人一个用户也很难管理 一般来说 会分超级管理员权限 管理员权限 读写权限 只读权限等 这样方便管理 当然 具体怎么管理权限根据
  • SaaS架构实现理论(四)可伸缩多租户

    目录 1 伸缩性 Scalable 的概念 2 应用服务器层的水平扩展 2 1基于Session复制的水平扩展方式 2 2基于Session Sticky的水平扩展方式 2 3基于Cache的集中式Session实现水平扩展 2 4三种水平