尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VeapAI 实战(六)一套代码服务多个租户:多租户隔离与多业务快速构建
摘要本文介绍 VeapAI 的多租户架构实践核心是共享表加 tenant_id 行隔离由系统拦截器统一注入租户过滤条件禁止业务代码手写 tenant_id 条件并通过 Statement 白名单与表白名单双重命中放行全局表读取。文章还梳理了动态数据源、RBAC、定时任务等企业级底座能力以及新租户接入路径和行隔离的扩展边界。 关键词多租户架构、数据隔离、动态数据源 | 首发CSDN | 同步知乎接手的项目多了会发现企业应用最大的成本不是新功能是新项目。客户 A 要一套客户 B 要一套表结构八成一样业务字段差两成。逐个部署、逐个升级运维成本比开发成本还高。VeapAI 的答案是租户化一套代码、一套部署多个租户数据隔离多业务并行交付。## 租户数据长什么样veap_tenant表注释租户信息的关键字段| 字段 | 说明 || --- | --- || pid | 上级主键租户层级 || name / title / code | 名称 / 显示标题 / 租户编码 || duty_user_id / duty_name / duty_phone | 负责人主键 / 姓名 / 电话 || globe_config | 全局配置 || del_state | 删除状态 |![租户与数据源配置]业务表普遍带 tenant_id 列veap.sql 里 wf_*、ai_* 等表都有。隔离靠的不是表分片是拦截器。## 租户过滤拦截器注入禁止手写docs/online-dev/README.md 的租户契约写得很硬- 禁止在任何自定义 SQL 中拼接 tenant_id ... / and tenant_id ... 作为过滤条件- 禁止为查询 / 列表 / 精确查询新增 tenantId 入参并用于 where / join 过滤- 可验证全仓库搜索 and tenant_id #{tenantId}、if testtenantId 在 user-code 中必须为 0。隔离由系统拦截器统一注入业务代码写 SQL 时不关心租户。这样做的反面教材见得多某张表的某个查询忘了拼 tenant_id数据串租户查了半天没人想到是漏写了一个条件。统一注入把漏写这个错误类别整个删掉了。特例走双白名单。部分全局表菜单、角色允许读 tenant_id IS NULL 的全局行但必须同时命中两个白名单- Statement 白名单 tenant.allowNullTenantIdStatementIds只放行权限计算链路的 SELECT- 表白名单 tenant.allowNullTenantIdTables默认 veap_menu / veap_role / veap_role_menu / veap_role_user。![租户隔离与双白名单]## 多业务的其它底座租户解决一套代码多客户这些能力解决一套代码多项目、多形态| 能力 | 说明 || --- | --- || 动态数据源 | MySQL 8.x Druid 动态数据源多数据源配置 || RBAC | 用户 - 角色 - 菜单 - 数据权限 || 定时任务 | Quartz 集群调度veap_job 表 veap_job_log 日志 || 缓存 / 文件 | Redis / MinIO || 限流熔断 | Sentinel || 监控 | Spring Boot Admin、操作日志、SQL 审计 |这几样都是企业项目标配单独写都能写一篇文章VeapAI 是开箱带着。## 一处较真的设计白名单不是一个开关是两个开关同时命中。见过一些系统为了兼容全局表直接放开租户拦截——结果是全局表能读串租户也一起开了。这里的设计把放开拆成两层先限定哪些 SQL 语句允许放宽Statement 白名单再限定哪些表允许表白名单。双重命中才生效出问题的概率从可能串降到几乎不可能。## 新租户接入的路径租户化的交付模式新客户接入 建一条 veap_tenant 记录 可选独立数据源 菜单权限配置代码零改动。多项目并行的成本从每人一个分支降到一个平台多份数据。## 模型说明行隔离的边界模型是共享表 tenant_id 行隔离拦截器统一注入双白名单放行全局行。扩展边界也明确需要分库时配动态数据源按租户路由模型本身不用改。这是先跑起来再按需分的务实路线。## 边界说清楚VeapAI 的租户是共享表 行隔离不是分库分表。超大规模租户数据量建议配合动态数据源把租户分库。另外本篇不写并发数字——没有实测压测数据就不编。## 复现bashcd veap-cloudmvn -B -pl veap-package/veap-monolith -am -DskipTests package建两个租户各跑一遍在线开发生成和流程配置确认数据互相不可见再翻 veap.sql 里 tenant_id 字段的分布对照双白名单配置验证全局表的读取口径。下一篇讲多表关联主子表、树表从业务建模视角怎么选。租户契约原文在 docs/online-dev/README.md 1.2 节双白名单的默认表清单也在里面https://gitee.com/mindock/veap
RELATED

相关推荐

从网络热梗到AIGC内容创作:拆解“龙岛异兽阿乐”的技术实现路径

从网络热梗到AIGC内容创作:拆解“龙岛异兽阿乐”的技术实现路径

1. 先搞清楚“龙岛异兽”和“阿乐”到底是什么 看到“龙岛异兽,来杯奶茶摇一摇 阿乐”这个标题,很多人第一反应可能是某个游戏、动漫或者网络小说里的角色和梗。确实,从字面看,“龙岛异兽”像是一个奇幻世界的设定,“阿…

📅 2026/10/28 7:10:53
Faster-Whisper:基于CTranslate2的语音识别模型优化与部署实战

Faster-Whisper:基于CTranslate2的语音识别模型优化与部署实战

简介:本资源是基于CTranslate2加速实现的高效语音识别工具Faster-Whisper开源项目,面向AI工程师、语音处理开发者及需要低延迟、低内存开销Transformer模型推理能力的技术实践者,解决原生Whisper模型推理慢、显存占用高的实际部署瓶颈。压缩包…

📅 2026/10/7 2:20:21
成本直降90%!Claude Code接入通义千问完整实战:配置+调优+避坑全流程

成本直降90%!Claude Code接入通义千问完整实战:配置+调优+避坑全流程

用Claude Code做工程化开发快半年,团队最大的痛点就是Token成本。几个人天天跑多会话MCP工具,一个月账单很可观;再加上高峰期网络波动、延迟不稳,体验始终打折扣。 之前也试过接入国产大模型,要么API格式不兼容导致MCP…

📅 2026/9/30 1:19:16
MORE NEWS

更多资讯

📰

大模型实操指南:从本地部署到PPT级可控生成

1. 这不是“学大模型”,而是重建你和信息世界的关系“大模型相关内容的研究学习”——看到这个标题,我第一反应是笑。不是嘲笑,是那种在实验室熬了三个通宵、刚调通一个LoRA微调任务后,盯着终端里跳出来的loss曲线突然失语的笑。因…

📰

高效查找第K大元素:排序、堆与快速选择算法对比

1. 问题描述与核心挑战 给定整数数组 nums 和整数 k,我们需要找到数组中第 k 个最大的元素。请注意,这里要求的是排序后的第 k 个最大元素,而不是第 k 个不同的元素。 这个问题看似简单,但隐藏着几个关键挑战: 当数组…

📰

企业设备数字化管理:易点易动系统实践指南

1. 设备管理在企业数字化转型中的核心价值 设备管理作为企业资产管理的重要组成部分,正在经历从传统人工记录向数字化、智能化管理的转变。在制造业、医疗、教育等行业,设备资产往往占据企业总资产的60%以上,其管理效率直接影响企业运营成本和…

📰

企业元宇宙治理框架:技术实现与合规路径

1. 企业元宇宙治理框架的核心逻辑 企业元宇宙作为数字化转型的新阶段,其治理框架需要兼顾技术创新与合规要求。从技术架构角度看,企业元宇宙本质上是一个由数字孪生、区块链、人工智能等技术构成的复杂系统。这个系统需要解决三个核心问题:如…

📰

Qt飞机大战源码解析:QGraphicsView游戏循环与碰撞检测实战

简介:这份资源是面向Qt初学者与游戏开发入门者的「飞机大战」完整项目源码包,围绕Qt框架在经典空战游戏中的实际应用展开,可用于课程设计、自学练手或二次开发参考。压缩包共223个文件,约6.21MB,以105个C头文件与32个c…

📰

老牌CMS XSS反复出现:漏洞排查与安全加固实践

开头先说明:这次分享的主题不是教人怎么打,而是围绕一款老牌开源内容管理系统(下面统一用“老系统”代称)反复被通报的 XSS 问题,聊聊这些漏洞为什么总也修不完、它们和后台被写入文件之间到底是什么关系,以…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬