SaaS 架构基础理论(一)

news2024/11/27 21:05:38

SaaS架构基础理论

  • 1、背景
  • 2、SaaS商业模式
    • 2.1、什么是SaaS
    • 2.2、SaaS软件的优势:
    • 2.3、SaaS劣势:
  • 3.SaaS应用架构
    • 3.1、SaaS成熟度模型
    • 3.2、SaaS成熟模型分级
      • 3.2.1、Level1 定制开发
      • 3.2.2、Level2 可配置
      • 3.2.3、Level3 高性能的多租户架构
      • 3.2.4、Level4 可伸缩的多租户架构
    • 3.3、如何选择合适的SaaS架构

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

1、背景

云计算提供的强大软硬件环境和基础服务,将逐渐成为支撑SaaS应用的基础设施。各个云计算平台所包含的大量具有自身特色的公共服务,将为SaaS应用的开发提供了丰富的资源。而统一整合各个云计算平台的公共服务,也成为了SaaS服务集成平台SIP的发展目标。未来的SaaS应用将架构在又SIP整合的多个云计算平台上

2、SaaS商业模式

2.1、什么是SaaS

ASP是Application Service Provider“应用服务提供商”,这种模式将用于需要的软件统一部署在应用提供商的软硬件环境中,软件运行所需的人力、物力资源都有提供商维持,而用户只需要在自己办公室使用这些软件即可。------重点在于提供有软硬件环境这样的服务,且网络带宽和软件技术上有限制,ASP用户体验不好,用户无法接受自己软件和数据交由第三方托管。

SaaS是Software as Service“软件即服务”,用户对软件的需求实际上是对应用服务的需求,而用户使用软件实际是在消费应用服务。软件的用户是服务的需求者和消费者,而软件的提供商是服务的提供者和生产者。----对于软件来说,离开软件提供商的支持和维护,很难真正用起来。

ASPSaaS
不同点看问题角度站在软件开发商角度看问题,希望以一种新的新式向用户提供软件站在用户角度看问题,考虑用户需要什么,搞清楚提供软件的本质是未来提供服务
不同点关注目标开发商只是为了解决用户硬件环境的持续维护问题,应用服务的统一托管关注软件本身,是否能为用户提供有效的服务
相同点SaaS和ASP之间形似而神不似

2.2、SaaS软件的优势:

在这里插入图片描述

2.3、SaaS劣势:

  • 对互联网的依赖,已经不是问题
  • 数据安全性:传统软件用户数据存放在自己的电脑商或企业自己的服务器中,用户自己维护数据的安全性;-SaaS软件的数据库一般配备有双机热备分系统,实时备份用户数据。
  • 数据保密性:传统软件数据由用户自己保管;SaaS软件商自身信用建设。

3.SaaS应用架构

3.1、SaaS成熟度模型

SaaS相对传统软件,将原本由软件使用者所承担的软硬件、网络、系统维护的费用,转成支付给SaaS服务提供商的租用费用;

对SaaS服务提供商,依然需要承担相应的软硬件、网络、系统维护等费用。除了降低软件使用者的第一次一次性投入成本呢,将一次性的投入转变为时间、需求的逐步投入。

在这里插入图片描述

比较项传统软件200个客户的综合成本SaaS软件200个客户的综合成本
软件开发成本取决与客户需求的异同,以及软件可配置性的强弱1个软件开发成本
服务器成本200台服务器10台服务器
网络设备成本200套5-10套
IT维护人员成本200人2-3人

3.2、SaaS成熟模型分级

SaaS软件要降低企业综合使用成本最主要的手段是发挥SaaS的规模效应

规模效应是商业模式和应用架构,一般采用多个租户共享一个运行实例的架构(Multi-Tenant,多租户架构),高性能,可配置,伸缩性。

可配置高性能可伸缩
Level1×××
Level2××
Level3×
Level4

Level1:设备托管
Level2:设备共享、可配置化
Level3:多租户、数据隔离、高性能
Level4:多租户、可配置、可伸缩

3.2.1、Level1 定制开发

软件服务提供商为每一个客户定制一套软件,并为其部署。独立数据库实例和应用服务器实例,数据库中的数据结构和应用的代码可跟进客户需求做定制化修改。

多次开发

3.2.2、Level2 可配置

开发通用型产品,为满足不同客户的不同需求,通用性产品具有配置性,客户通过简单的配置满足自己的个性化需求。为每个客户独立部署一个运行实例,每个运行实例运行同一份代码,通过配置的不同需求满足客户的个性化需求。

一次开发多次部署

3.2.3、Level3 高性能的多租户架构

多租户实例的应用架构可以有效降低SaaS应用的硬件即运行维护成本,最大化的发挥SaaS规模效应。

一次开发一次部署

实现Multi-Tenant架构的关键是通过一定的策略保证不同租户间的数据隔离,确保不同租户既能共享一个应用的运行实例,又能为用户提供独立的应用体验和数据空间。

独立数据库、共享数据库独立数据结构、共享数据结构。

实现方式:

  • 在传统企业应用的数据模型基础商,增加一个Tenant表,用于描述租户信息。
  • 在大部分与租户有关的业务数据表中添加TENANT_ID 字段。
  • 数据模型改造完成后,还需要改造登录逻辑,在会话记录用户属性的TENANT_ID。
  • 在业务数据查询过滤时,都加上TENANT_ID =?过滤条件。

3.2.4、Level4 可伸缩的多租户架构

随着租户数量的逐渐增加,集中式的数据库性能就将成为整个SaaS应用的性能瓶颈,如果不进一步考虑数据库的分区设计,就只能依赖更强大的硬件设备来向上扩展。单一设备极限,导致SaaS架构无法满足低成本运营需求。
水平扩展在用户数大量增加的情况下,无需修改应用架构,仅简单增加硬件设备的数量,就可以支撑应用规模增长。

一次开发无限扩展

从Multi-Tenant SingleInstance系统扩展为Multi-Tenant MultiInstance。用户首先通过接入Tenant Load Balance层,再被分配到不同的Instance上,通过多个Instance来分担用户访问,实现水平扩展。

数据库实现方式:
Tenant Load Balance层会存放用户、租户、对应的Instance的映射关系,用户登录后即可通过映射关系,将用户重定向到相应的Instance。

在这里插入图片描述

3.3、如何选择合适的SaaS架构

考虑因素包括:

  • 你的产品所面向的客户群的特征与需求;
    客户是否原因接受共享应用的模型、个性化需求是否强烈
  • 你的产品的租户数量级别;
    成熟度高的SaaS产品开发成本(开发维护成本)更高,租户数量决定选择的成熟程度。
    租户小于10个,多租户架构带来的收益并不大;大于50之后,多租户架构是SaaS的必然选择。
    租户数量在10000以下时,可伸缩性无需考虑;租户在50000~100000甚至更高时需要重点考虑伸缩性
  • 你的团队的开发能力与你们愿意付出的开发/改造成本

下一篇就多租户-高性能多租户-可配置多租户-可伸缩多租户具体实现解释
在这里插入图片描述

侵权请联系删除

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

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

相关文章

【Docker】Docker安装与入门

Docker入门与基础命令 Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制&#xf…

Zookeeper几种应用

分布式锁 master-worker模式 涉及三种角色: 1. master,用于检测新的task、worker的添加,将新的task分配给worker处理 2. worker,将自己注册到系统,被master发现后,监控task 3. client,客户…

ARM pwn 入门 (3)

由于网上的ARM pwn题很少很难找,因此这里拿ROP Emporium的8道题做练习,这个网站有包含x86-64、x86-32、MIPS、ARM共4种架构的elf文件可以做。 1. ret2win 注意:在执行需要动态链接库加载的ARM elf文件时,如果直接使用qemu-arm x…

(免费分享)基于javaweb,ssm旅游景点预定系统

源码获取:关注文末gongzhonghao,输入003领取下载链接 IDEA开发工具,数据库:mysql,Tomcat8 采用:springmvcspringmybatis框架 (1)用户信息管理模块 用户信息管理模块分为后台管理员信息的维护…

zlMediaKit 3 socket模块--怎么封装socket,怎么connect listen/bind write read

socket.cpp socket.h socket SockInfo类&#xff0c;有四个获取四元组信息的虚函数一个获取自身标识符的虚函数 shared_from_this 原理关于boost中enable_shared_from_this类的原理分析 - 阿玛尼迪迪 - 博客园 (cnblogs.com) shared_ptr<Tp> shared_from_this() { re…

RabbitMQ学习(一)

目录&#xff1a; &#xff08;1&#xff09;什么是消息队列 &#xff08;2&#xff09;为什么要使用消息队列 &#xff08;3&#xff09;RabbitMQ特点 &#xff08;4&#xff09;RabbitMQ的安装 &#xff08;5&#xff09;RabbitMQ常用命令 &#xff08;6&#xff09;Ra…

【HTML】标签简单融合运用

&#x1f60a;博主页面&#xff1a;鱿年年 &#x1f449;博主推荐专栏&#xff1a;《WEB前端》&#x1f448; ​&#x1f493;博主格言&#xff1a;追风赶月莫停留&#xff0c;平芜尽处是春山❤️ 一、目录文件夹 1.在vscode建立一个新的目录文件夹如15-综合案例 2.将imag…

图的存储结构

图的存储结构 1.邻接矩阵表示法 设图G (V, E)是具有n个顶点的图&#xff0c;顶点顺序依次为{v1,v2,v3.......} 设a[N][N]为 n 阶方阵 G 的邻接矩阵具有此种性质&#xff1a; 若a[i][j]1&#xff0c;则存在边(vi, vj)或者弧<vi, vj> (即两点之间存在边或弧)若a[i][j]0…

day01 计算机基础和环境搭建

day01 计算机基础和环境搭建 课程目标&#xff1a;让大家了解计算机基础知识并完成python的环境搭建 课程概要&#xff1a; 计算机基础 编程的本质 python的介绍 python环境的搭建 1.计算机基础 1.1 基本概念 计算机的组成 计算机的组计算机是由多个硬件组合而成&#…

快2023了你不会还没学uni-app吧?(uniapp开发快速上手,uniapp项目创建,基础目录介绍)

uniapp新人上手指南前言开发工具快速尝鲜—创建uni-app项目项目基础目录介绍最后前言 uni-app 是一个使用 Vue.js (opens new window)开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到14个平台&#xff0c;听起来是不是非常厉害&#xff0c;如果你后…

【论文阅读】Semi-supervised Sequence Learning半监督序列学习

【论文阅读】Semi-supervised Sequence Learning半监督学习 前言 半监督学习(Semi-Supervised Learning&#xff0c;SSL) 是模式识别和机器学习领域研究的重点问题&#xff0c;是监督学习与无监督学习相结合的一种学习方法。半监督学习使用大量的未标记数据&#xff0c;以及同…

别让 Linux 成为拿offer的阻碍

文章目录前言目录结构VI/VIM 编辑器是什么一般模式编辑模式&#xff08;插入模式&#xff09;命令模式模式间转换常用基础命令&#xff08;重要&#xff09;帮助命令man 获得帮助信息help 获得 shell 内置命令的帮助信息type 查看某命令是内置命令还是外部命令常用快捷键文件目…

Java 之 ElasticSearch8.x.x 【一篇文章精通系列】【ES的基本操作,ES安装,ES head + Kibana】

Java 之 ElasticSearch8.x.x 【一篇文章精通系列】【上&#xff1a;ES的基本操作&#xff0c;ES安装&#xff0c;ES head Kibana】一、ElasticSearch的安装1、解压安装ES2、熟悉目录3、启动ES4、安装可视化界面&#xff08;elasticsearch head&#xff09;5、了解ELK6、安装Ki…

【路径插值与抽稀篇】(3)路径插值与抽稀篇

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、路径曲线插值、拟合和逼近的区别1、拟合2、插值3、逼近二、路径点线性插值方法&#xff08;1&#xff09;纯跟踪&#xff…

EDA程序设计--计时器设计

实训题目&#xff1a;计时器的设计 1 系统设计 1.1设计要求 1.1.1 设计任务 设计并制作一台计时器。 1.1.2 性能指标要求 ① 用EDA实训仪的I/O设备和PLD芯片实现计时器的设计。 ② 计时器能够显示时、分和秒。 ③ 用EDA实训仪上的8只八段数码管显示时、分和秒&#xff08;如00…

mysql 常用查询优化策略详解

前言 在程序上线运行一段时间后&#xff0c;一旦数据量上去了&#xff0c;或多或少会感觉到系统出现延迟、卡顿等现象&#xff0c;出现这种问题&#xff0c;就需要程序员或架构师进行系统调优工作了&#xff0c;其中&#xff0c;大量的实践经验表明&#xff0c;调优的手段尽管…

Linux学习——目录操作和库使用

目录 一、打开目录 二、读取目录 三、关闭目录 四、修改文件权限 五、获取文件属性 六、库的概念&#xff1a; 1、静态库 缺点&#xff1a; 优点&#xff1a; 创建静态库步骤&#xff1a; 链接静态库&#xff1a; 2、动态库 动态库的生成步骤&#xff1a; 练习题&a…

论文阅读之Enhancing Transformer with Sememe Knowledge(2020)

文章目录论文阅读Transformmer-SETransformer-SP实验结果总结参考论文阅读 文章建议结合两种简单的方法将义原知识整合&#xff1a; 1&#xff09;基于语言学假设&#xff0c;我们将聚合义原嵌入添加到每个词嵌入中以增强其语义表示&#xff1b; 2&#xff09;我们使用义原预测…

OpenCV实战项目 -- 口罩识别

每次我忘记戴口罩去食堂吃饭的时候&#xff0c;门口都会有志愿者学生提醒你&#xff1a;“你好&#xff0c;麻烦戴下口罩。” 进门后里面那块大屏幕还会发出声音&#xff1a;“请佩戴口罩”。 上次博客仿照宿舍楼下那块大屏幕写了个人脸考勤&#xff0c;所以这次我打算弄一个口…

std::logic_error 错误的解决

今天测试一个程序&#xff0c;突然出现一个 std::logic_error 错误&#xff0c;详细如下&#xff1a; 这个应该是 std::string 相关的一个错误&#xff0c;具体的错误信息还得用 GDB 跟踪一下了。 看第 8 栈帧已经是系统库里的东西了&#xff0c;第 9 帧是我本地的代码&#x…