SaaS的几种架构解析

article/2025/9/22 16:38:45

转载:https://www.xugj520.cn/amp/SaaS_Architecture.html

SAAS成熟度模型分级
LEVEL1 定制开发
软硬件都由SAAS服务商提供,软件的使用者只需要按时间、用户数、空间等逐步支付租赁使用费用即可

LEVEL2 可配置
通过不同的配置满足不同用户的需求,而不需要为每个用户进行特定定制,以降低定制开发的成本。

LEVEL3 高性能的多租户架构
多租户:通过一定的策略来保证不同租户间的数据隔离,确保不同租户即能共享同一个应用的运行实例,又能为用户提供独立的应用体验和数据空间。实现方案有独立数据库、共享数据库独立数据架构、共享数据库共享数据架构。

高性能:满足多租户并发访问的性能挑战。

LEVEL4 可伸缩性的多租户架构
解决租户数量增加因集中式数据库带来的性能瓶颈。

SAAS实现阶段性成熟度推进
定制开发 --> 可配置 --> 多租户 --> 高性能 --> 可伸缩

方式一:逻辑分层可迁移架构(单体式)
采用最终以迁移至分布式SOA或微服务架构为目标的分层形式,相当于本地SOA(逻辑分层模式是基于SOA思想, 物理分层模式还是单体):
在这里插入图片描述
架构特征:
界面层可以与整套应用程序分离也可以不分离;

所有的业务逻辑基本都存在于一套应用程序中,应用服务也存在于同一套应用程序中;

可以使用一个或多个数据源,但多个数据源可以给所有业务逻辑层和应用服务层使用;

表示层可以调用应用服务层,也可以调用业务逻辑层;

服务在应用程序内部相互调用。
架构优点:
所有业务逻辑在同一套应用程序中,所以不用考虑调用链治理、不用过多的考虑网络通讯,也不用考虑分布式一致性事务,所以与之关联的中间件都不是必须的。

架构模式简单,所以对人员技能的要求比较低。

一个或多个数据源,但是由于在同一套程序中,所以事务比较好处理。

中间件比较少,最基础的中间件就是一个ES用于全文检索,一个MQ用于解耦和多播任务。

所有的业务逻辑在同一套应用程序中,便于单元测试和集成测试;

部署简单,一台服务器一个应用程序,使用负载均衡应对高并发;
由于业务逻辑都在同一个应用程序中,服务治理可以集中做;

使用的开发人员较少;

可以实现显示层(即表示层和界面层可合并-传统的MVC,主要针对WEB应用);

传统的SOA不允许暴露业务逻辑,只允许通过服务层暴露服务,这个架构允许暴露部分业务逻辑可以获得一些细粒度的服务,降低开发难度。

架构缺点:
子系统不具备隔离性,一个子系统的崩溃有可能会导致其他子系统的崩溃,只能依靠应用程序中的服务治理手段,或在负载均衡层治理单个接口。 或采用路由分发的形式,每个部署的应用程序包含了完整的代码,但是因为路由分发的原因,该部署只提供了部分接口服务。

系统的水平扩展不够灵活,只有整体的水平应用程序复制的手段,所以不适合超大的应用系统。

不适合需要分库的系统。

前端UI组件化依赖于前端的分别实现,或依赖于共同的H5页面。

所有业务领域层都必须面向对象设计编程。

代码增多容易混乱。

应用程序会很庞大。

成熟度模型的满足:

定制开发:满足度高

可配置:满足度中,通常通过配置+AOP切面编程实现

多租户:满足度低,通常只适合共享数据库共享数据模型模式

高性能:满足度低,调优手段有限,只能通过多实例负载均衡、查询优化、编程优化、缓存配置、路由分发的形式满足。

伸缩性:满足度低,多数都使用同一个数据库,同一种缓存策略,相同的NOSQL。

技术选型建议:
PHP > JAVA > GOLANG

单线程同步编程模型下PHP与JAVA的开发时间成本几乎一致,多线程异步方案JAVA时间成本要高一些,因为都需要DDD领域驱动设计,单线程同步编程模型实现时间不会有多少潮剧。多线程异步模型JAVA要处理更多的锁与内存, 这种架构PHP不适合使用异步多线程编程模型。

人力成本PHP低于JAVA,部署复杂度PHP低于JAVA,可复用可伸缩性JAVA高于PHP,项目可测试程度JAVA高于PHP。

技术方案中可能存在的不确定性:

架构师是否能按设计目标完成建模与分层分配;

开发组成员的素质是否能支撑领域驱动设计和单元测试;
总结说明:
简单易懂,开发快,人力成本低。满足业务需求,且可迁移。但是,调优手段有限,在系统的复杂度上(并发性应该足以支撑)升到一定程度后,需要更换到分布式SOA以及微服务(通常在A B轮融资后)。

方式二:SOA架构(分布式)
在这里插入图片描述
架构特征:
松散耦合,方案一仅提供了逻辑层面的松散耦合,SOA在此基础之上还提供了物理层面的松散耦合。

暴露API,企业外部也可以调用,方案一同样提供该特性,但是方案一的暴露API的方式比较统一死板,SOA可以根据需要对不同服务使用不同的API暴露方案。

可重用的服务和可重组服务(方案一仅在逻辑层面重用和重组,物理层面欠缺);

标准化的服务接口;

精确定义的服务契约;

架构优点:
有根本的独立性和平台中性,每个服务都可以与平台和语言无关,这是方案一不具备的。

重复使用性和服务的独立性,方案一也具备重复使用性,但是其中的服务会于应用框架产生耦合,不具备独立性。

扩展性,方案一也具备可扩展性,但其扩展性会受到平台、语言以及应用框架的限制。

共享的业务服务,方案一同样具备。

可定制业务流程,这通常在企业商务服务中很有用;
6.有版本治理,这是相当于方案一最重要的一个优点,方案一很难实现多个版本的服务共存,除非将版本治理加入命名空间。

架构缺点:

只讨论相对于方案1的缺点

需要更多的中间件,增加开发难度。

架构设计需要更多的精力。

成熟度模型的满足:

定制开发:满足度高

可配置:满足度高,配置、AOP切面编程以及流程控制服务;

多租户:满足度中,共享数据库独立数据模型模式、共享数据库共享数据模型模式。

高性能:满足度中,多实例负载均衡、查询优化、编程优化、多进程、多线程、异步、非阻塞IO的形式满足,

伸缩性:满足度中,多数都使用同一个数据库,同一种缓存策略,相同的NOSQL。但是因为是分布式服务,其伸缩性要比方案1要高。

技术选型建议:

JAVA > PHP > GOLANG

如果需要在可复用、易伸缩、高稳定、低延迟等企业级开发目标上得到满足,那么最好选择JAVA技术路线,此外JAVA SOA架构技术成熟度高。

如果追求开发效率,则使用PHP。PHP SOA架构通常不使用EJB,且服务调用一般使用简单Json RPC, gRpc, hprose等简单的rpc服务,服务注册发现即可以使用客户端注册发现也可以使用中间件,服务治理通常在服务端完成,分布式一致性事务往往采用最简单的MQ队列补偿保证最终一致性,编程模型通常都是多进程、单线程,较为简单,但这些都是以牺牲一定性能换取的简单。

如果追求两者平衡,可以使用混合开发,JAVA仅做关键核心业务应用服务,PHP可开发业务规则和业务流程的组织。

人力成本上JAVA高于PHP, JAVA需要更多的架构,更多的懂中间件的开发者。项目可测试度JAVA依然高于PHP。

技术方案中可能存在的不确定性:

架构师是否能按设计目标完成建模、分层分配与子系统划分;

开发组成员的素质是否能支撑领域驱动设计和单元测试;

开发组成员是否有足够分布式架构编程知识;

开发组成员是否有足够的中间件即其它与分布式有关的知识,EJB/ZOOKKEEPER/Tcc/Saga/Mq等

总结说明:

增加的设计与开发成本可以一定提升SAAS的性能和伸缩性,并将服务从逻辑层面和物理层面全部解耦。

方式三:微服务(分布式)
微服务可以看做一种特殊的SOA架构, 它和SOA相比,它去掉了EJB,并且提供更细的服务粒度。

微服务通常有两种架构形式,第一种客户端直联,第二种是通过API接口网关模式,对于SAAS而言,第一种可以直接放弃了。看一下第二种架构图(网上找的,实在懒得画了):
在这里插入图片描述
架构特征:

服务组件化;

按业务组织团队;

做”产品“的态度;

智能端点与哑管道(服务调用方式,实时,异步中间件)

去中心化治理(组件能针对不同的业务特点选择不同的技术平台)

去中心化管理数据(多个不同的MySql实例,各服务之间进行“无事务”的调用,数据一致性,只要求数据在最后的处理状态是一致的即可。补偿机制)

基础设施自动化(自动化测试、自动化部署)

容错设计(快速检测出故障资源并尽可能地自动回复服务是必须被设计和考虑的)

演进式设计

架构优点:

容器化独立部署、扩展性强;

服务简单,只关注一个业务功能;

服务自冾,可以直接被外部或其他服务调用,不像SOA需要更高层的业务逻辑组织;

每个服务可以由不同的团队开发,并且可以使用不同的平台和语言;

松耦合;

架构缺点:

较高的运维开销;

较高的领域驱动设计和DEVOPS要求;

并行的团队开发可能会产生重复性劳动;

需要解决分布式系统的复杂性;

跨进程之间的事务、大量的异步处理、多个微服务之间的整体测试都需要有一整套的解决方案;

成熟度模型的满足:

定制开发:满足度高

可配置:满足度高,配置、AOP切面编程以及流程控制服务;

多租户:满足度高,共享数据库独立数据模型模式、共享数据库共享数据模型模式、独立数据库模式。

高性能:满足度高,多实例负载均衡、查询优化、编程优化、多进程、多线程、异步、非阻塞IO、容器化的形式满足,

伸缩性:满足度高,数据库拆分,独立部署的服务,热部署。

技术选型建议:
JAVA > GOLANG > PHP

JAVA的技术成熟度最高,可选中间件最多。

GOLANG适合从单体到微服务的迁移,不适合从零开始;

PHP社区的微服务只在摸索之中,教育系统常用, 可选中间件较少;

开发成本GOLANG > JAVA > PHP, GOLANG是因为开源社区不够成熟,从业人员较少。PHP只在能招聘到技术专家的前提下开发成本较低。

总结说明:
微服务可能是最能满足SAAS4个成熟度模型的架构模式,但是它对团队和开发人员的素质要求较高。

当前架构选型二分检索表
简单设计了一个选择初始架构方案的检索表,因为每个架构方案都能满足可配置多租户的需求,只是对高性能和伸缩性的支持不同,所以当然从“不差钱”开始作为第一选项:

1、创业阶段,投入资金有限(<4个高程),接受架构缓慢迁移…2

1、一般土豪,资金不是问题(>=4个人高程),需要更多的为未来考虑…4

2、未来1-2年之内预设的直接用户并不多,不超过50万…A

2、未来1-2年之内预设的直接用户非常多,远高于50万…3

3、未来的业务上升曲线异常陡峭,不会有太多架构迁移时间…B

3、未来的业务不会比现在复杂太多,或上升平缓,阶段性有足够时间迁移…C

4、未来的业务异常复杂,需要高度的性能和伸缩性…D

4、未来的业务并不复杂,伸缩性和性能可满足…E

A.PHP分层可迁移架构(单体, 如果出于培养团队需要可直接上JAVA);

B.PHP微服务架构(分布式);

C.PHP SOA架构(分布式);

D.JAVA微服务架构(分布式);

E.JAVA SOA架构(分布式);

选择的是初始的架构模式,阶段性架构迁移需要根据以后的情况选择,当然,一种技术路线切换到另一种,即使架构模式已经为未来留出足够迁移准备,事实上在人力和时间上依然是一个高成本高投入的过程,这点也是要考虑的。

PHP和JAVA的混合模式一般只适合从PHP平台迁移至JAVA平台的团队,混合开发模式不会减少JAVA需要的分工人员,只是能帮助JAVA减少一些业务逻辑表示的工作量。


http://chatgpt.dhexx.cn/article/2D9BZ8MX.shtml

相关文章

SaaS云HIS系统源码功能介绍

SaaS云HIS首页功能&#xff1a;包括工作计划、预警、主功能菜单、医院机构公告。 一、工作计划 1.值班概况&#xff1a;值班日期、值班时间、值班科室&#xff08;内科、外科等&#xff09; 2.待处理患者&#xff1a;内科人数、外科人数等 病历统计&#xff1a;入院病历、出…

saas系统需要什么样的云服务器,SAAS系统和云服务器的区别

SAAS系统和云服务器的区别 内容精选 换一换 云耀云服务器默认设置的时区,是您制作镜像时选择的时区。如需修改,请参见本节内容,将其更改为所需的本地时间或网络中的其他时区。云耀云服务器登录成功后,如果发现云耀云服务器系统时间与本地时间不一致,建议更改时区,将云耀云…

虚拟化与云平台

虚拟化&#xff1a; 虚拟化技术就是指一台物理机上可以跑多台虚拟机&#xff0c;共享内存、CPU、IO等硬件资源&#xff0c;虚拟机之间在逻辑上是相互隔离的。 共享的物理机称为“宿主机”&#xff0c;虚拟机称为“客户机” 宿主机通过hypervisor将硬件资源虚拟化给客户机共享…

OneNET云平台

OneNET云平台 由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。 OneNET致力于开发者的体验,逐步提升云服务体量,着手用户运营,深化运维管理和云端大数据分…

开源项目saas电商项目

1.线上电商私域电商一体化 数字化零售我们采用数字商城SaaS数字门店SaaS一体化结合赋能 数字门店SaaS&#xff0c;适用连锁门店&#xff0c;如杏花楼、廖记、奈雪的茶 数字商城SaaS&#xff0c;适用线上电商&#xff0c;对标《有赞》&#xff1b;如淘系商家 数字门店SaaS与数…

智能家居云平台设计

智能家居云平台设计 摘 要 智能家居是未来家居的发展方向&#xff0c;其利用先进的网络技术、计算机技术和无线通信技术等将家居中的各种电子电气设备连接起来&#xff0c;统一管理、远程监控和资源共享&#xff0c;实现了高效、便利的生活环境。近些年互联网的迅猛发展&…

云平台概念详解

1. 前言 随着云计算概念的不断落地和推广, 目前云平台已经得到了非常广泛的使用. 云平台帮助用户在: • 应用落地 • 服务落地 • 安全保障 • 性能 等方面获得比传统方式更高效, 更节省, 更稳定, 更方便的优势. 2. 云平台的概念 云平台也称云计算平台. 云计算…

云平台是什么、什么是云、云平台的分类、主流公有云平台有哪些、云的三种服务、PaaS、SaaS、IaaS

云平台的基础概念 1.1 前言 随着云计算概念的不断落地和推广, 目前云平台已经得到了非常广泛的使用. 云平台帮助用户在: 应用落地服务落地安全保障性能 等方面获得比传统方式更高效, 更节省, 更稳定, 更方便的优势. 1.2 云平台的概念 云平台也称云计算平台. 云计算, 顾名…

初代SAAS平台应用层架构设计

近期参与SAAS项目第一代应用设计&#xff0c;为满足整体灵活性&#xff0c;复用性和可定制化&#xff0c;得出如下应用层模型&#xff0c;希望能给大家相互参考学习&#xff0c;设计上有什么缺漏请多指教 核心思想 模块为最小化购买单位 例如商城模块 分销模块等多个模块组合…

SAP 云平台 (Cloud Platform) 架构概述

引言 在我们开始SAP云平台的架构之旅之前&#xff0c;让我们先看看SAP已经发布的一些其他云产品。这些云产品方案可以分为公有云和私有云两种。 SAP公有云解决方案见下图最右侧&#xff0c;比较著名的有SAP SuccessFactors和SAP Cloud for Customer(C4C)等&#xff0c;作为SAP软…

大型JAVA智慧校园云平台SaaS源码

▶ 让技术回归教育 智慧校园完整技术栈&#xff1a; 前后端分离 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语音开发 4、电子班牌固件安卓7.1&#xff1b;使用Java Android原生 5、elmentui &#xff0c;Quartz&#xff0c;jpa&#xff…

Saas免费开源充电桩平台

开源充电桩Saas系统&#xff08;v2.3.1&#xff09; 我的车&#xff0c;到底该选什么功率充电桩&#xff1a; 点我访问 体验地址&#xff0c;star star &#xff1a; 点我访问 日志记录 每天进步一点点&#xff0c;希望每天能更新一些进度。 系统更新日志 2022.10.4 重新整理PP…

多校园SaaS运营智慧校园云平台源码 智慧校园移动小程序源码

智慧校园管理平台源码 智慧校园云平台源码 智慧校园全套源码包含&#xff1a;电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系统、综合素养评价系统、请假管理系统、电子班牌发布系统、校务管理系统、小程序移动端、教师后台管理系统、SaaS运营云平台&#xff08;支持多学…

云平台的分类

要了解云平台之前&#xff0c;首先讲一下云计算 定义&#xff1a;云计算&#xff08;cloud computing&#xff09;是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;通过多部服务器组成的系统进行处…

多租户saas云平台框架

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

SAAS云平台搭建札记: (一)浅论SAAS多租户自助云服务平台的产品、服务和订单

最近在做一个多租户的云SAAS软件自助服务平台&#xff0c;途中遇到很多问题&#xff0c;我会将一些心得、体会逐渐分享出来&#xff0c;和大家一起探讨。这是本系列的第一篇文章。 大家知道&#xff0c;要做一个全自助服务的SAAS云平台是比较复杂的&#xff0c;稍微有些漏洞&am…

SaaS云平台多租户数据库方案,完美兼顾共享、独占模式

构建SaaS云平台多租户架构&#xff0c;首要的问题要解决数据如何存储的问题&#xff0c;业界基本上已经形成共识&#xff0c;无非是以下三种方案&#xff1a; 1、共享数据库&#xff0c;共享表 在表中增加TenantId多租户的数据字段&#xff0c;以区分不同租户的数据。这种做法…

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

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

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

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

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

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