发布时间:2026/9/5 6:05:09
汽修维修管理系统SaaS的技术选型复盘:我们最终为什么用这套技术栈 本文是「汽修 SaaS 开发连载」第 6 篇。前几篇讲了业务建模和并发控制这篇回头看地基技术栈怎么选的哪些判断对了哪些现在想改。先列约束再谈选型技术选型最怕上来就比框架评分表。我们先把汽修场景的硬约束摆出来选型是围绕这些约束做的门店网络不可靠。车间里手机信号时有时无收银和开单不能因为断网就停摆。写入集中在营业时段。白天工单、领料高频写入凌晨几乎没流量写入曲线非常陡。团队要养得活。我们是小团队选型必须考虑半年后招人能不能招到、社区资料多不多。客户数据敏感。车牌、手机号、消费记录都在库里SaaS 化之后数据安全没有退路。整体形态模块化单体不是微服务一开始团队里也有直接上微服务的声音理由是后面要做连锁和开放平台。我们最后选了模块化单体modular monolith按领域拆模块模块间只走接口调用┌─────────────────────────────────────────────┐ │ 应用层 │ │ PC 后台 API │ 技师 App API │ 小程序 API │ ├─────────────────────────────────────────────┤ │ order │ inventory │ archive │ member │ ... │ ← 领域模块接口隔离 ├─────────────────────────────────────────────┤ │ 共享基础设施 │ │ 认证鉴权 / 消息队列 / 对象存储 / 定时任务 │ └─────────────────────────────────────────────┘理由写在这里供同样规模的团队参考多租户 SaaS 的复杂度在数据隔离和权限不在服务拆分。第一阶段就把运维拆成十几个服务等于把人力从业务功能挪去搭基础设施客户看不到任何东西。微服务该拆的时候比如后面报表和实时业务分库再拆单体的模块边界拆清楚迁出去是顺手的边界混乱的微服务往回收才是灾难。主力组件和选它的理由层选型关键理由现在的评价后端框架Spring Boot团队熟事务和生态省事对没换的理由数据库MySQLInnoDB事务强一致是进销存的刚需对领料扣减依赖行锁和条件更新缓存Redis会话、权限缓存、号段发号对消息队列RabbitMQ工单事件广播进度推送、凭证生成起步量级足够量再涨可能换暂不折腾对象存储云 OSS维修照片视频量大但访问低频对注意配好生命周期降冷前端 PCVue Element Plus后台表单密集型页面组件全对技师端微信小程序口袋工具免安装车间扫码即用半对见下文部署云主机 Docker Compose单客户版本迭代快P3 连锁阶段大概率要迁 K8s一个当时没想清楚的选型技师端技师端我们最初在原生 App和小程序之间犹豫最后选了小程序图的是免安装、发链接就能用。上线后两个真实反馈好的一面推广成本确实低。让一个五十岁的钣金师傅装 App 很难让他扫个码用小程序教会只要两分钟。问题的一面车间弱网下小程序的体验比预期差页面白屏时技师不知道是没网还是卡了。我们后来做了两层补救工单列表和待办做本地缓存断网可看关键操作报完工、领料失败时有明确提示和自动重试。原生 App 的离线能力更强但配套的推送、更新、多端发布成本对我们来说现阶段不划算。这个决定以后可能推翻先记在这里。数据库里最值钱的一个设计决定选型文章一般不谈这个但它比框架选择重要我们从第一版就把tenant_id 写进了所有业务表哪怕单店版根本用不上。之前做别的项目吃过亏单租户系统改多租户全表加字段加索引历史数据回填前后折腾了一个多月。这次每个建表语句都带 tenant_id查询拦截器自动拼租户条件。代价是几乎为零收益在 P3 连锁阶段兑现。有个细节tenant_id 相关的索引必须放在联合索引最左否则拦截器拼上条件后全表扫描。这条我们是在压测时发现的一个没带 tenant_id 前缀的查询在 30 万行工单表上慢查询告警。复盘两处现在会改的消息队列上得太早。初期事件量小用 Spring 事件 本地表轮询完全够RabbitMQ 的运维成本镜像队列、告警配置前三个月基本是纯负担。报表一开始就独立数据源。这个反而是对的忍住了先共用业务库的诱惑后来写 BI 那篇会展开。选型没有标准答案约束不同答案就不同。如果你也在做类似的多门店 SaaS欢迎评论区聊聊你们的团队规模和栈。下一篇开始进连锁架构系列多租户数据隔离怎么做到门店只看本店总部可穿透。「汽修 SaaS 开发连载」· 06 / 05 领料扣库存的并发问题实战 · 04 单车利润需求让表结构推倒重来

相关新闻

2026/9/5 6:00:09

OpenMAIC实测:文档智能转课堂的技术链路与部署全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 6:00:09

AI写代码越来越复杂?用KISS和YAGNI原则驯服AI生成风格

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 7:00:18

户外电子监控FCC认证:极端环境与多制式联网下的合规评估要点

户外电子监控设备(如周界防范相机、塔架监控摄像机、林业/水利远程监测站、户外广告机联网终端)在美国市场的合规评估,与普通室内摄像头存在结构性差异。这类设备普遍具备工业级工作温度、IP65及以上防护等级、太阳能与电池双源供电、Wi-Fi/4…

2026/9/5 7:00:18

OpenHarmony源码树全解析:RK3568设备树选择与编译实战

干 OpenHarmony 开发的,第一次拉完源码基本都会懵一下:目录怎么这么多?明明我只想跑一块 rk3568 板子,结果拉下来几百个仓库、几十个顶层目录,什么 base、foundation、device、vendor、drivers,看名字大概知…

2026/9/5 7:00:18

OpenHarmony源码树全解剖:从目录结构到RK3568设备树实战

1. 源码树不是迷宫,是你的地图很多刚接触OpenHarmony的朋友,第一眼看到那棵庞大的源码树,心态基本是崩溃的。几十个顶层目录、上千个子模块、一堆看不懂的缩写命名,光是从哪下手就能劝退一半人。我当年第一次拉完OpenHarmony全量代…

2026/9/5 6:55:18

Unity集成AI智能体:从API接入到代码生成实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 2:46:54

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/5 2:46:52

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/5 2:44:34

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/5 0:04:47

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流在大模型流式输出(Streaming)与智能体实时推流的架构中,生产环境中经常出现一种“上下游生产消费速率严重失衡”的极端情况: 生产端极速产出:大模型…

2026/9/5 2:45:13

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/5 2:46:50

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…