PaaS平台SaaS应用开发有哪些要点?安全和多租户设计怎么做?

文章导读
PaaS 平台与 SaaS 应用开发的核心要点在于多租户架构设计、资源隔离与安全性保障。开发时需选择适合的隔离模式(如独立数据库、共享数据库独立 Schema 或完全共享),确保租户间数据逻辑或物理隔离。安全方面需实施严格的身份认证与权限控制(如 RBAC/ABAC),并通过租户 ID 过滤防止数据泄露。同时,系统应具备高可扩展性,支持水平扩展与动态资源分配,以降低运维成本并实现快速迭代。多租户设
📋 目录
  1. 深入理解 SaaS 多租户架构:核心模式与开发关键要点
  2. 多租户架构系统架构:SaaS 管理与 PaaS 平台的不同关键点
  3. 【解决方案】多租户技术架构设计入门
  4. 多租户 Saas 系统架构的设计思路
  5. 云时代的多租户架构系统设计
  6. FAQ
A A

PaaS 平台与 SaaS 应用开发的核心要点在于多租户架构设计、资源隔离与安全性保障。开发时需选择适合的隔离模式(如独立数据库、共享数据库独立 Schema 或完全共享),确保租户间数据逻辑或物理隔离。安全方面需实施严格的身份认证与权限控制(如 RBAC/ABAC),并通过租户 ID 过滤防止数据泄露。同时,系统应具备高可扩展性,支持水平扩展与动态资源分配,以降低运维成本并实现快速迭代。多租户设计需兼顾资源利用率与隔离性,通过统一代码库服务多客户,实现高效管理与个性化配置。

深入理解 SaaS 多租户架构:核心模式与开发关键要点

一、什么是 SaaS 多租户?租户可以理解为使用 SaaS 系统的独立客户群体,小到一个团队,大到一家企业。多租户系统的核心目标是:一套代码、一套部署,服务多个租户,同时满足:数据隔离:租户 A 无法访问租户 B 的数据; 配置隔离:租户可自定义个性化配置 (如字段、流程); 资源共享:最大化服务器、数据库等硬件资源利用率。与之相对的是单租户架构 (一套应用服务一个租户),两者的核心差异如下表所示:

特性单租户架构多租户架构
部署方式租户独享实例多租户共享实例
资源利用率低 (易资源闲置)高 (资源池化共享)
运维成本高 (需维护多个实例)低 (仅维护一套实例)
数据隔离性天然隔离 (独立数据库)需设计隔离策略
个性化能力强 (可定制代码)需通过配置实现
二、多租户架构的三种核心模式 多租户架构的核心分歧在于数据库层面的隔离策略,不同策略对应不同的隔离性、成本与扩展性,主流分为以下三种模式。1. 共享数据库 + 共享 Schema(完全共享模式) 核心逻辑:所有租户共享同一个数据库实例,且共享同一个 Schema(数据库的命名空间),通过租户 ID 字段区分不同租户的数据。实现方式:在所有业务表中添加 tenant_id 字段,查询时强制携带 tenant_id 过滤条件。优势:资源利用率最高、运维成本最低、扩容简单; 劣势:隔离性最差,一个租户的 SQL 性能问题可能影响其他租户;存在数据泄露风险; 适用场景:租户数量多、数据量小、对隔离性要求低的场景 (如小型 SaaS 工具、轻量级协作应用)。2. 共享数据库 + 独立 Schema(中等隔离模式) 核心逻辑:所有租户共享同一个数据库实例,但每个租户拥有独立的 Schema(如 tenant_001、tenant_002),Schema 内的表结构完全一致。实现方式:租户注册时自动创建专属 Schema;应用层根据租户上下文切换 Schema。优势:隔离性优于完全共享模式,租户间数据物理隔离;资源利用率较高;(2026 年 1 月 21 日的资料)

多租户架构系统架构:SaaS 管理与 PaaS 平台的不同关键点

今天谈下云平台下的多租户架构,不论是在公有云还是私有云平台,是设计一个面向最终组织或用户的 SaaS 应用还是面向业务系统的 PaaS 平台,多租户都是前期架构设计的一个关键内容,因此有必要对里面的一些核心要点进一步说明。多租户架构概述 首先还是看下百度百科对多租户的一些关键说明如下:多租户技术可以实现多个租户之间共享系统实例,同时又可以实现租户的系统实例的个性化定制。通过使用多租户技术可以保证系统共性的部分被共享,个性的部分被单独隔离。通过在多个租户之间的资源复用,运营管理维护资源,有效节省开发应用的成本。而且,在租户之间共享应用程序的单个实例,可以实现当应用程序升级时,所有租户都可以同时升级。同时,因为多个租户共享一份系统的核心代码,因此当系统升级时,只需要升级相同的核心代码即可。这段描述可能理解起来比较啰嗦,我们还是从简单的场景来进行说明。比如我们开发一个 SaaS 云服务的 CRM 系统。这个系统部署在公有云端可以开放给多个企业客户使用。那么我们就遇到了一个关键问题。即是否当新入驻一个新的企业客户的时候,我们都需要重新在部署一套应用给这个客户使用?如果是这样,那么当新客户入驻的时候,将带来具体的人工投入和资源投入成本。因此实际的情况是我们希望新增加客户的时候,仍然还是已有的那套应用系统。但是对于最终的入驻客户来说,我们又希望客户完全感知不到这点,就像是单独给他们部署了一套系统一样。虽然很多客户使用同一套应用,但是能够很好地做到资源和数据的隔离。而这正好就是多租户架构的一个关键点。(资料日期为 2021 年 10 月 15 日)

【解决方案】多租户技术架构设计入门

一、多租户的概念 多租户本质上是一种软件的技术架构,它最核心的特征是多个租户可以共享一个系统实例,并且租户间是可以实现数据和行为的隔离,这可以说是多租户技术架构里最重要的两点了。多租户架构是 SaaS 模式中的重要且常见的架构,通过共享和复用资源降低成本,提高效率和可扩展性。其中最需要关注就是:数据/行为的隔离、身份/角色的认证与授权、底层硬件资源管理、高性能与高可用、定制化和可扩展、数据一致性、系统安全性等。这里就不过多赘述了,下面会将概念详细铺开。如果要找一个生活中容易理解的场景做比喻,那么多租户的概念其实就和租房子的概念类似,只不过在各自的专业领域所涉及到的术语和具体实现会不一样。二、隔离模式 一般来说多租户常见的有 3 种隔离模式:独立数据库、共享数据但独立数据架构、共享数据库且共享数据架构。2.1 独立数据库模式 独立数据库模式示例 2.1.1 特征 一个租户一个数据库,隔离级别最高,对系统底层所涉及到的计算、存储、网络等资源的隔离。和传统软件模式 (SaaS) 的区别:独立数据库模式有标准的租户身份识别、租户入驻流程、计费体系、运营流程等。除此之外,本质上其提供的服务还是端到端的 SaaS 模式,某种意义上可以看作每一个租户都各自拥有一套端到端的基础设施。2.1.2 优点 满足强隔离需求:一些租户为了保证系统和数据的安全性,可能会提出非常严格的隔离要求,期望软件产品能够部署在一套完全独立的环境中,不和其它租户的实例、数据放在一起; 计费逻辑简单:在这种竖井模式下,计费模型相对是比较简单的; 降低故障影响:因为每个租户的系统都部署在独立的环境中,如果一个环境出现故障,并不会影响其他租户的软件服务。2.1.3 缺点 规模化问题:由于租户是各自独立的环境,每入驻一个租户就需要准备、创建、运营一套 SaaS 环境,如果只有少量租户还可以管理,一旦租户的数量多起来,管理和运营这些环境将会是非常大的挑战; 成本问题:每个租户都需要单独的部署环境,那么花费在每个租户上的成本就会非常高,会大幅度降低 SaaS 软件服务的盈利能力; 敏捷迭代问题:一般来说 SaaS 模式的优势是可以很快响应市场变化,可以迅速迭代产品功能,但是在这种竖井模式下更管理、运维这些租户的 SaaS 环境会变得非常复杂且低效; 基础设施的监控:同样地,在这种非中心化的模式下,对每个租户的基础设施的运维与监控也是非常复杂且繁琐的。(发布时间是 2024 年 4 月 29 日)

多租户 Saas 系统架构的设计思路

总结一下 Saas 系统架构一些特点:Saas 系统分级:SaaS 系统架构成熟度模型的 5 个级别——从“混乱”到“乌托邦”。第 0 级 (混乱):每次新增一个客户,都会新增软件的一个实例。第 1 级 (受控的混乱):所有客户都运行在软件的同一个版本上,而且任何的定制化都通过修改配置来实现。第 2 级 (多租户 [multi-tenant]、高层建筑 [Highrise]):所有的客户都已经可以在软件的同一个版本上运行了,而且他们都在同一个“实例”上运行。第 3 级 (多租户,扩建 [Build-Out]):此时你已经拥有了多租户、单一版本的软件模型。不过你还是可以通过硬件扩展 (scale-out) 的方式来进行扩充。第 4 级 (乌托邦):如同第 3 级,除非你可以找出有效的方式,以在不同的“实例”上运行不同版本的软件。应用程序必须支持多租户:多租户可以分为几个不同的类别 (如列表下方的图所示): 1.1,云中的简单虚拟化,其中只对硬件进行共享。1.2,共享应用程序,对每个租户使用不同的数据库。1.3,共享应用程序和数据库 (效率最高,真正的多租户)。1.分层设计 Saas 系统分层大概是:Saas 系统分层 Saas 系统分层:租户识别>应用层>数据访问层>缓存层>数据库 业务代码都是写在应用层。租户识别可以用 spring 拦截器实现,然后使用 ThreadLocal 传递给后端 数据库和缓存层对应用层应该是透明的。程序员在写代码的时候,只关心业务逻辑,不应该担心多租户的问题。2.数据隔离要透明 saas 系统说起来很简单,任何系统似乎加个 tenant_id(租户 id) 就变成 saas 系统了。比如原来的用户登录是:改成 对于复杂业务的 saas 系统,这样做法非常危险,而且开发效率很低。你想想如果那个程序员写 sql 时候忘了加"and tenant_id =1",结果不堪设想。比较好做法是在数据库访问层对 SQL 进行改写。在连接池根据 TenatnContext 改写 Sql。这样做好处是,一来程序猿最多把系统搞 down 了,也不至于信息串了互相泄露。二来将来做分表分库也很方便,上层应用不用修改。3. 租户识别方案 比较好做法是通过 url 识别租户。系统是给租户生成一个随机的三级域名,比如 abc.crm.baidu.com. 如果客户想使用自己的域名,可以在 cname 到我们生成的三级域名,并在管理系统里面做绑定。(2019 年 9 月 18 日)

PaaS平台SaaS应用开发有哪些要点?安全和多租户设计怎么做?

云时代的多租户架构系统设计

比如我们开发一个 SaaS 化的 CRM 系统,部署在云端,可以开放给多个企业客户使用。传统的交付方式,每当有一个新客户入驻时,都需要为他单独部署一套实例,提供新客户使用。这样做,成本和资源投入都比较大。因此,我们希望,当一个新客户入驻时,仍然可以使用原有的那套系统,同时新客户又感知不到这点,就像为他们单独部署了一套系统一样。就是说,所有入驻的客户共享一套应用,但又能很好地做到资源和数据的隔离。多组织架构,重点考虑的是数据层面的隔离,比如财务安全管控要求。但对于多租户架构来说,还需要考虑资源层面的隔离,比如云平台中的计费和计量管理。租户为的是资源管理和计费定量使用,用户更多是为了业务功能和授权使用。一些 C 端应用,用户和租户是对等的,比如一个在线邮箱系统,一个人就是一个租户。但如果你的 SaaS 面向的是企业用户,那么这个时候,租户对应的是组织,也就是企业,入驻之后要给企业分配管理员账号,可以管理、录入其他用户账号。也就是租户是第一层即组织,下面的用户是第二层。组织可以看做一个租户集的概念。不只是 SaaS 应用,PaaS 应用本身也有租户概念。比如企业内部的公共业务流程平台,是一个 PaaS 平台,这个平台就需要设计成多租户,因为每个组织都需要自己的一个流程。类似的其他 PaaS 平台,如 DB 平台、KV 平台、MQ 平台都需要引入租户概念。(消息于 2024 年 7 月 12 日发布)

FAQ

多租户架构有哪些核心隔离模式?

一般来说多租户常见的有 3 种隔离模式:独立数据库、共享数据但独立数据架构、共享数据库且共享数据架构。

PaaS平台SaaS应用开发有哪些要点?安全和多租户设计怎么做?

如何在开发中实现租户识别?

比较好做法是通过 url 识别租户。系统是给租户生成一个随机的三级域名,比如 abc.crm.baidu.com. 如果客户想使用自己的域名,可以在 cname 到我们生成的三级域名,并在管理系统里面做绑定。

多租户架构对 SaaS 升级有什么好处?

在租户之间共享应用程序的单个实例,可以实现当应用程序升级时,所有租户都可以同时升级。同时,因为多个租户共享一份系统的核心代码,因此当系统升级时,只需要升级相同的核心代码即可。