mybatis 多租户saas_彻底理解微商城多租户Saas架构设计
原文链接:https://blog.csdn.net/haponchang/article/details/104246317,感谢作者提供这么好的总结!
1.具体的SaaS架构必须
1.先仔细选择最适合应用程序需求的租户模型,
2.需要根据租户模型来选定最终的架构,即应用程序设计和管理、每个租户的数据如何映射到存储等等。
避免因租户模型的切换而付出昂贵的代价。
租户模型 --》 应用程序设计 + 数据设计方案
2.影响租户模型的相关因素包括:
2.1可扩展性(Scalability)
- 租户的数量级
- 每个租户的存储级别
- 整体存储
- 工作负载
2.2租户隔离性(Tenant isolation)
- 数据隔离和性能(是否一个租户的负载会影响到其他租户)
2.3单租户成本(Per-tenant cost)
- 数据库成本
2.4 开发复杂度(Development complexity)
- 数据结构的变化
- 查询语句的变化
2.5运维复杂度(Operational complexity)
- 性能监控
- 数据结构schema管理
- 租户数据恢复
- 灾备
2.4可定制化程度(Customizability)
根据租户的需求自定义架构的容易程度 这个租户的讨论集中在数据层。但考虑一下应用层。应用程序层被视为一个整体实体。如果将应用程序划分为许多小型组件,您的租户模型选择可能会发生变化。对于租户和存储技术或使用的平台,您可以对其他组件进行不同的处理。
3 常见的架构模式有以下几种:
3.1独立服务+独立数据库
这个模型中,应用层和数据层都是隔离的。
应用程序的每个实例都是独立实例。
租户拥有自己独立的数据库,每个应用程序实例只需要一个数据库。
对租户的管理独立于系统之外,对于每一个租户,整个应用程序需要重复安装一次。供应商都可以为租户管理软件。每个应用程序实例都配置为连接到其相应的数据库。
优点:为不同的租户提供独立的应用实例和数据库,有助于简化数据模型和业务模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复系统或数据均比较简单,系统间也不会相互影响。
问题:数据库层面,每个租户数据库都作为独立数据库进行部署。该模型提供了最大的数据库隔离。但隔离需要为每个数据库分配足够的资源来处理其高峰负载。这里重要的是, 弹性池不能用于部署在不同资源组或不同订阅中的数据库。这种限制使得这种独立的单租户应用程序模型成为从整体数据库成本角度来看最昂贵的解决方案;应用层面,每个租户若存在个性化定制,则需要对项目进行横向扩展,扩展时务必需要保证与主干版本的兼容性问题。运维层面,应用和数据库的安装数量会随租户的数量线性递增,随之带来维护成本和购置成本的增加。
3.2一套服务+独立数据库
这个模型中,应用层是共享的,数据层都是隔离的。
应用程序仅部署一套,所有租户实例共享。
租户仍拥有自己独立的数据库,应用程序需对接多个租户的数据库。
对租户的管理由配置中心(Config Server)管理,配置中心提供了配置,监视和管理共享所需的功能,供应商使用这些工具为租户管理软件。对于每一个租户,整个应用程序仅需要安装一次,应用程序实际请求结合配置中心请求相应的数据库。
优点:为不同的租户提供独立数据库,有助于简化数据模型扩展设计,满足不同租户的独特需求;如果出现故障,数据恢复均比较简单,也可以自动将单个租户恢复到较早的时间点。因为恢复只需要恢复存储租户的一个单租户数据库。这种恢复对其他租户没有影响,这证实了管理运营处于每个租户的细粒度级别。应用层面的维护成本和购置成本有所减少。
问题:数据库层面,同模型一;应用层面,每个租户若存在个性化定制,则需要对项目进行横向扩展,扩展时务必需要保证与主干版本的兼容性问题。运维层面,数据库的运维问题同模式一,应用层面的运维在版本控制的问题上难度有所增加。
3.3 一套服务+一套数据库(不同schema)
这个模型中,应用层是共享的,数据库共享,但数据是隔离的。
应用程序和数据库仅部署一套,所有租户共享。
多个或所有租户共享Database,也就是说共同使用一个数据库,但是每个租户一个Schema(也可叫做一个user),使用表进行数据隔离数据库。底层库比如是:DB2、ORACLE等,一个数据库下可以有多个SCHEMA。
应用程序需对接多个租户的数据库。
对租户的管理由配置中心(Config Server)管理,同模式二。
优点:为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多的租户数量。
问题:数据库层面,如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据;应用层面,配置中心需要对租户信息进行完整且合理的分配和维护。
3.4 一套服务+一套数据库(相同schema)
模型与模型三的差别在于共享数据库,共享 Schema,共享数据表。也就是说共同使用一个数据库一个表使用字段进行数据隔离。如表中增加TenantID多租户的数据字段。这是共享程度最高、隔离级别最低的模式。
简单来讲,即每插入一条数据时都需要有一个客户的标识。这样才能在同一张表中区分出不同客户的数据,这也是我们系统目前用到的(tenant_id)。
优点:方案的维护和购置成本低,允许每个数据库支持的租户数量最多。
问题:隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量;数据备份和恢复最困难,需要逐表逐条备份和还原。
3.5网关+前台+中台+数据存储
模式五与之前的模式的最大区别是,在原有的web Service进行细化拆分,优化成 网关+前台+中台+数据存储的模式。
网关用于接收租户的请求,并发送给前台。
前台的数量与租户一致,每一个租户对应一个前台服务,方便针对租户进行个性化定制。
中台负责提供处理所有的业务请求,中台不关心租户是谁,将重心关注在业务的处理上。配置中心用于配置租户的接口权限、流程定制等相关配置信息。结合业务逻辑返回给前台特定租户的相关信息。
数据库模式参考模式四。
优点:有利于定制不同租户的个性化需求。例如:交互界面不同、工作流不同等等。服务只需要根据用户需求在前台做相应的横向扩展即可; 不同租户间服务相互独立,互不影响。
问题:模块划分需要做好划分,重点注重业务之间的低耦合;调用链路变长,需要做一定的优化处理;模块纵向拆分后,后期研发和运维难度均会有所增加;
好文收集不易,请转发或在看,谢谢!
mybatis 多租户saas_彻底理解微商城多租户Saas架构设计相关推荐
- 彻底理解微商城多租户Saas架构设计
彻底理解微商城多租户Saas架构设计 原文链接:https://blog.csdn.net/haponchang/article/details/104246317,感谢作者提供这么好的总结! 1.具 ...
- 微商城之业务逻辑架构设计,B2B2C模式流程设计-OctShop免费开源商城系统
[B2B2C模式类似淘宝京东]:商家后台发布商品时,勾选:支持[快递物流发货],同时也可以勾选[货到付款],设置好运费模板,以及其他商品属性后,此商品就可以开启[B2B2C模式].流程:买家下单 -& ...
- 什么是多租户saas架构设计
本文来说下什么是多租户saas架构设计 文章目录 概述 多租户架构 多租户,多组织,用户区别 多租户和多组织 租户和用户 SaaS应用和PaaS平台的多租户 多租户架构设计和资源隔离 共享资源时候的资 ...
- 一步步解密微商城系统开发流程
作为现代商业的重要组成部分,电子商务系统的建设对于企业的发展至关重要.然而,对于一些小型企业来说,建设一个完整的电子商务系统可能会耗费大量的时间和金钱.微商城系统的出现有效地解决了这个问题,因为它可以 ...
- 从业务开发中学习和理解架构设计
作者:张东爱(当爱) 阿里自主出行研发团队 一.前言 在软件开发领域经常会接触到架构这个词汇,在我最初的印象中,架构是一个很高级的词汇.它似乎代表了复杂的工程结构.高层次的抽象设计.最新的开发语言特 ...
- java版商城之买家端首页Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 直播带货商城 电子商务 多商家入驻商城
一个好的SpringCloud+SpringBoot b2b2c 电子商务平台涉及哪些技术.运营方案?以下是我结合公司的产品做的总结,希望可以帮助到大家! 搜索体验小程序:海哇 1. 涉及平台 平台管 ...
- 美妆商家该如何依靠开发微商城建立品牌效应?
国内美妆行业在过去两年都呈现稳步上升的良好的发展趋势,美妆市场潜力依旧,同时品牌.产品也是如雨后春笋.扩大品牌.产品流量是美妆类产品较为重要发展方向.在互联网营销时代,近几年基础电商领域发展已经较为饱 ...
- 基于go语言结合微信小程序开发的微商城系统
最近我录制的一门<Golang微信小程序微商城系统原型>,这门免费课程特别适合在校大学生或者刚毕业的大学生,go语言初学者以及想要从事微商城开发项目入门的小伙伴们来学习.在课程当中我不仅仅 ...
- 微信公众号微商城如何开展社交电商之路?
起初,微信只是聊天工具,随着不断的更新迭代,衍生出公众号这样一个媒介平台,无论是媒体还是官方企业都可以利用它作为发声渠道. 新闻平台将最新的资讯和新闻推送,随着公众号平台流量越来越大,企业们也不再专注 ...
最新文章
- XIV(5)-- Data Recovery Protection (XDRP)
- 计算机组成原理(哈工大刘宏伟)
- linux rm 命令删除文件恢复_Linux之恢复误删除文件
- 华为S5024p交换机配端口镜像
- 复杂的c语言,C语言:复杂数据类型
- 获取springmvc中所有的Controller
- Nginx(6)-配置基于域名的虚拟主机
- ubuntu 18 安装xgboost GPU版本
- Mysql 存储过程实现订单流水号
- mysql驱动包放在ecplise哪里_eclipse导入mysql jdbc驱动包的具体步骤及注意事项
- C# 注入工具方式[Inject]
- linux磁盘扩容不影响原数据,linux 升级磁盘后扩容数据盘大小
- android p 小米6,小米6 想升级 Android P,系统软件工程师发话:可适配
- 文献调研(一):基于集成学习和能耗模式分类的办公楼小时能耗预测
- cvpr 注意力机制_计算机视觉中的注意力机制
- 英语3500词(18/20)health主题(2022.4.28)
- 【国产化系列】龙芯平台指令集简介及现有处理器的支持特性
- Redis实现手机验证码功能
- PCB铜箔厚度单位盎司(OZ)的具体信息
- 面试题45. 把数组排成最小的数