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

news2025/1/19 17:14:12

目录

  • 1.伸缩性(Scalable)的概念
  • 2.应用服务器层的水平扩展
    • 2.1基于Session复制的水平扩展方式
    • 2.2基于Session Sticky的水平扩展方式
    • 2.3基于Cache的集中式Session实现水平扩展
    • 2.4三种水平扩展方式的比较
  • 3.数据库的水平扩展
    • 3.1数据库的垂直切分
    • 3.2数据库的读写分离技术
    • 3.3数据库的水平切分
    • 3.4三种数据库的睡哦扩展方案对比

《互联网时代的软件革命-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三种数据库的睡哦扩展方案对比

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS基础实验操作100例--实验93插值模型的精度分析

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 空间分析篇--实验93 插值模型的精度分析 目录 一、实验背景 二、实验数据 三、实验步骤 (…

ESP-IDF:使用基本类型,指针,引用,指针的指针,指针的引用作为函数参数的几个例程

1.例程: /下面是使用基本类型,指针,引用,指针的指针,指针的引用作为函数参数的几个例程/ // 值拷贝 int add10(int a) { a 10; return a; } // 指针传参,是一种地址拷贝 void add101(int *a) { // int *…

(11)QWidget的使用(two)

目录 设置窗口图标和标题 设置窗口图标以及获取图标 设置窗口标题以及获取标题 窗口标题的特殊操作 设置窗口的状态 设置窗口的不透明度 设置窗口的状态 使用封装好的函数显示窗口 设置窗口标志 窗口标志简介 设置窗口图标和标题 设置窗口图标以及获取图标 void se…

Java在远程方法调用中运用反射机制

本案例将介绍反射机制在网络编程中的应用,实现如何在客户端通过远程方法调用服务器端的方法。 假定在服务器端有一个 HelloService 接口,该接口具有 getTime() 和 echo() 方法,具体代码如下: import java.util.Date; public int…

【C语言航路】第十一站:字符串、字符和内存函数

目录 一、字符串函数 1.strlen (1)strlen的库函数文档 (2)strlen的模拟实现 (3)strlen的注意事项 2.strcpy (1)strcpy的库函数文档 (2)strcpy的使用以…

如何使用机器学习进行图像识别|数据标注

什么是图像识别?图像识别是一种用于识别图像中的对象并将其分类为特定类别的机制,基于人类识别不同图像集中对象的方式。图像识别如何为人类工作?当我们看到一个物体或图像时,作为人类,我们能够立即准确地知道它是什么…

浅谈STL——适配器

一、适配器(Adapters) 它是一种设计模式,为STL中能够将一个类的接口转化为用户更加想要使用的接口,适配器就扮演者轴承、转换器的功能 就是一个wrapper的模式,将要修饰的接口进行二次包装,展露出可以更容…

紧急事故的流程管理

嵌套式职责分离 在事故处理中,让:每个人清楚自己的职责是非常重要的。有点反直觉的是,明嘶职费反而能够使每个人可以更独立自主地解决问题,因为他们不用怀疑和担心他们的同事都在干什么。 如果一个人目前要处理的事情大多了&…

[TPAMI 2022] 用深度神经网络解决欠定问题——考虑鲁棒性?

Solving Inverse Problems With Deep Neural Networks – Robustness Included?https://ieeexplore.ieee.org/abstract/document/9705105摘要在过去的五年中,深度学习方法已经成为解决各种反问题的最先进方法。在此类方法可以应用于安全关键领域之前,必…

2022年度总结和展望2023年

文章目录 前言 2022年的成就总结 2023年的行动目标 如何完成这些目标? 前言 从2018年更新CSDN第一篇的博文,我就和CSDN产生联系。当时想法很纯粹,就是将积累的知识写成文章,无论去到哪里都能查到,所以前面三年都是…

Python实现预测客户是否会购买房车险源码+数据集,基于伯努利朴素贝叶斯预测客户购买房车险源码,Python预测客户购买房车险

伯努利朴素贝叶斯预测客户购买房车险 根据2000年数据挑战赛保险公司的客户特征数据,预测客户是否会购买房车险。 使用伯努利朴素贝叶斯模型,我获得了更好的预测效果 完整代码下载地址:Python实现预测客户是否会购买房车险源码数据集 数据集…

中国化工发展的新态势

顺势而为的企业才可能有好的未来,在一年之初,回顾总结一下中国化工行业的发展态势,对企业认清形势,确定企业的行业发展方向和发展战略至关重要。 自2022年以来,中国快速增长的化工行业按收入计算一直是世界上最大的&am…

【Java、Redis】通过中心经纬度与半径获取范围内的结果集(类似附近的人)

文章目录需求解决方案什么是Redis GeoHashJava实现InitEquLongLatTask.javaControllerservicexml sql语句引用的pom依赖需求 通过百度地图的覆盖物功能,用户在页面上画圈选定某个区域,前端传输中心点经纬度与半径给后端,后端需要返回位置在圈…

表格存储 Tablestore 十年发展总结

作者:周赵锋 阿里云基础产品团队 ​表格存储Tablestore上线已有十年,随着业务规模变大,稳定性挑战也随之而来,需要不断优化架构来提升可用性。本文将为大家分享表格存储Tablestore在技术层面近年来的功能演进、技术架构演进以及稳…

与哈希函数有关的结构:布隆过滤器、一致性哈希

1、认识哈希函数 (out f(in data)) 输入参数in,其值域范围可以看作是无穷大的。输出函数out,其值域范围可能性很大,但是一定是有穷尽的哈希函数没有任何随机的机制,固定的输入一定是固定的输出输入无穷多但…

计算机基础——无处不网络

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.计算机网络概述 1.计算机网络发展史 二.计算机网络应用领域 三.计算机网…

基于YOLOv6m的接打电话检测识别分析系统

本身在实际项目开发应用中YOLO都是目标检测任务的绝对主力,从v3一直跟着到了v7,做了很多的项目,处理了很多的数据,当然了也积累了一些自己的成果和心得,这里主要是以不常用到的yolov6m系列的模型来开发构建接打电话行为…

python基础篇之函数

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

最简最速搭建grpc分布式服务的Mac系统开发环境

文章目录环境详情基本原理什么是 Protobuf工具安装环境搭建编写服务类的实现启动服务客户端测试环境详情 golang 1.18 macOS Big Sur protobuf 3 基本原理 整个RPC过程就是: 客户端 发送 数据(以字节流的方式)服务端接收,并…

Spring Boot 大型线上商城项目实战教程试学(文末视频版)

视频链接在文末 在学习一门技术的时候,相信很多开发者会在开源网站上寻找对应技术栈的开源项目,通过阅读源码,学习项目作者的开发思路、解决问题的方法,这一过程,对大多人来说没那么容易,要么一开始不知从…