小厂上生产管理系统时,「云还是本地部署」常被当成功能之外的一个附带选项。从工程视角看,它其实是两种完全不同的运维模型:责任矩阵、升级路径、备份策略、客户端形态全部不同。本文把两条路的工程差异拆开对比,给出一个可操作的决策流程,末尾附一笔三年成本账的算法。(伪代码均为示意,非真实实现。)
一、运维责任矩阵:谁伺候机器,是一切差异的根
| 责任项 | 本地部署 | 多租户 SaaS |
|---|---|---|
| 硬件/机房 | 客户自管 | 服务商 |
| 系统补丁 | 客户自管 | 服务商 |
| 应用升级 | 客户执行(工程) | 服务商统一推送 |
| 备份 | 客户自建 + 自演练 | 服务商职责 + 客户导出权 |
| 可用性兜底 | 局域网自持 | 依赖公网 + 离线子集 |
| 数据物理位置 | 客户机房 | 服务商(合同约束) |
这张表逐行看过去,左侧每一格都是一份人力承诺。本地部署的全部优势------数据物理在手、不受外部波动影响、可深度定制------都以「有人管机器」为前提;这个前提不成立,优势整体归零。而小厂的常态是没人:三十人的厂养一个专职网管,工资远超系统本身的费用,兼职管机器的又往往停留在「会开关机」的水平。评估之前先数一数表里左列有几个格子能填上具体的人名,填不满的格子就是将来的故障点。
再往深一层,左列格子还有失效模式的问题。填了人名,不代表承诺可靠:备份任务挂在某台机器上,机器重装一次电任务就没了;网管一个人掌握全部运维知识,离职即断档;补丁打了但没验证,业务中断比不打更难看。责任矩阵的评估要同时评估「谁来干」和「这件事坏了谁发现」。
二、升级路径对比:为什么多数本地系统停在三年前
本地形态下,每次升级是一个分布式事务:备份 → 停机窗口 → 安装 → 验证 → 回滚预案。五个环节对大厂是标准动作,对小厂道道是坎:生产不停,停机窗口约不出来;验证需要懂业务又懂系统的人,通常没有;回滚预案做一次的工夫比升级本身还长。于是升级被无限推迟------版本漂移之后,移动端兼容、问题修复全部停摆,系统进入「没人敢动」的稳态。这个稳态表面上还在运行,实际上已经退出维护周期,厂家停止支持只是时间问题。
SaaS 形态把升级收敛为服务商的单点职责,全员第二天打开即新版。代价是升级节奏不受自己控制,某个按钮位置变了、某张表单字段挪了,车间要重新适应。这个代价的对冲手段是「升级日志透明 + 关键流程不突变」:服务商应提前公告变更内容,核心操作路径保持稳定。选型时把这两条当验收项来查,比听任何演示都实在。
三、离线子集:车间场景的工程折中
纯在线 SaaS 在车间网络的现实面前要做让步。机加工车间里金属切削液雾、钢板墙、行车动线,对无线信号全是干扰源,「车间有网」在不少厂只是个愿望。常见的工程方案是「离线子集」:把高频、低冲突的动作(扫码报工)下沉到端侧本地队列,回网后按序补传。
python
# 端侧离线报工队列(示意,非真实实现)
offline_queue.append(report_event) # 断网时事件入本地队列
def on_network_restored():
for e in offline_queue.ordered():
server.sync(e) # 按事件时间序补传
offline_queue.clear()
注意边界:离线子集只覆盖报工这类幂等、可合并的事件;看板、对账等全局一致性视图仍需在线。宣传「全离线运行」的方案可以直接质疑其一致性设计------离线和全局一致在工程上不可兼得,二者都承诺的方案至少有一半是话术。
四、数据主权:把导出当合同标的来谈
云形态下数据物理位置在服务商,工程上的对冲是导出权:按合同约定范围的结构化导出(通用格式、含历史)、图纸按版本打包下载、退出机制写进合同。这三条逐条落实到纸面,谈判时有一条没落纸就换一家,没什么好犹豫的。
验收方式只有一个------当场演示导出,检查导出物能否独立还原出业务全貌:表能不能直接打开、字段是否可读、历史是否完整、图纸版本在不在。演示环节糊弄、以「演示环境不方便」推脱的,信号已经很明确了。
定期导出(月度)同时兼作灾备快照:服务商侧出事故时,客户手里的导出物就是完整的恢复源。十分钟一次的月度动作,买的是最坏情况下业务不断档,这笔投入产出比在整个选型里没有对手。
本地形态的数据主权是物理的,硬盘就在机柜里。但对冲成本换了一种形态------备份制度。而没有演练过恢复的备份,等效性约等于零:恢复流程只有真跑过一遍,才知道备份是资产还是安慰剂。
五、决策流程
三问收敛:① 有没有人管得住一台服务器?(判定标准:补丁、备份、故障、远程访问四件事各有具体的人名,不是「大概齐」)② 是否必须改代码(深度定制)?③ 数据落地是否有硬性要求(合同级)?
两问以上指向云 → SaaS;两问以上指向本地 → 本地部署,且把备份制度当项目第一优先级立项。悬而不决时,先用 SaaS 跑半年主线,把「维护工夫的真实成本」和「数据导出的完整度」都实测一遍,再定终局------这是成本最低的试错路径,半年里收集到的工夫账和导出物,转本地就是现成的维护预算依据和搬家清单。
六、三年成本账怎么算
报价单只呈现第一年,而第一年恰好是两种形态差异最小的一年------隐性科目还没来得及计提。要算就按三年算,把两侧的科目摆全:
| 科目 | 本地部署 | 多租户 SaaS |
|---|---|---|
| 软件费用 | License 一次买断 | 订阅费 × 3(千元级/年,小微厂档位) |
| 硬件投入 | 服务器硬件 | 0 |
| 实施费用 | 实施费 | 实施培训(多数轻量系统趋近于 0) |
| 维护人力 | 0.1~0.5 人年/年,看厂情 | 0 |
| 升级开销 | 升级工时 × 升级次数(往往 0~1 次,这正是问题) | 服务商承担 |
| 备份成本 | 备份介质与演练成本 | 服务商职责 + 月度导出 |
| 故障损失 | 一次故障的期望损失(硬盘/断电/误删,按概率摊) | 服务商兜底 + 手里定期导出物作恢复源 |
本地侧三年成本就是这七项之和,SaaS 侧基本只剩第一行。小微厂的结论通常自己浮出来:本地侧的隐性科目,加起来常常超过订阅费本身,且其中「一次故障的期望损失」这一项,多数厂从没算过。大厂结论相反------专职运维本来就在编,边际成本趋近于零,定制的价值却能摊到几条产品线上。同一笔账,规模不同,答案不同,这也解释了为什么两种形态会长期并存。
七、工具参照
上面这套思路的参照实现,可以看摩杰斯的 PMS5:主要面向小微机加工厂的多租户 SaaS 生产管理系统,电脑 Web / 微信小程序 / 安卓工业 PDA / 车间大屏四端,扫码报工支持离线队列;零定制、注册即用,适合走通用主线、无开发人力的团队。
导出这一项别停在口头:让厂商当面演示一遍,确认导出的范围、格式与历史完整度能否独立还原业务全貌,并把这条写进合同。有强定制诉求的场景,按第一节的责任矩阵自行评估本地路线。
八、收尾
部署形态的选型,落到根上是回答一个问题:这家厂愿不愿意、有没有能力养一个「伺候机器」的角色。 答案为否,选 SaaS,把节省下来的人力还给产品和交付;答案为是,选本地,把备份和升级当成正式工程管理。两边共同的底线只有一条:数据必须随时完整拿走,恢复流程必须演练过。
九、FAQ
Q1:多租户的数据隔离,怎么验证靠不靠谱?
别听架构图,做三个动作:用 A 租户账号遍历一遍所有接口,确认无 B 租户数据的越权读取;构造并发写同一条资源,确认行级锁或版本号生效;查导出功能是否会把他租户的字典数据(如工序模板)带出来。隔离缺陷九成出在查询漏加租户条件的地方,重点盯导出、报表、搜索这三个口子。
Q2:端侧离线队列的容量和冲突怎么设计?
按「断网一天」做容量上限:一次换班的报工事件量 × 安全系数,超限就地提示补网,别无限堆积。冲突侧,报工事件天然幂等(同一工序的开工/完工状态机收敛),按事件时间序回放即可;要防的是补传时服务端状态已被人手工改过------用版本号比对,不一致就转人工确认,不要静默覆盖。
Q3:已有本地系统,想改成 SaaS 形态,从哪起步?
先把「客户自管的部分」拆成清单:机房、备份、升级、账号体系。改造优先级恰好倒过来------账号体系(多租户化)最先,因为它影响数据模型;备份和机房直接甩给云;升级流水线是长期工程,放最后。最常见的失败顺序是反过来:先买云服务器把老系统搬上去,那只是机房搬家,跟 SaaS 化没有关系。
Q4:SaaS 服务商如果停止运营,怎么降低损失?
事前三件事:选经营年限长、有可持续商业模式的服务商(免费或远低于成本的订阅价,这类信号要当风险记录);导出权写进合同并当场验证;月度定期导出形成习惯。事中盯信号:升级停滞、客服响应变慢、核心人员流失。真到那一天,手里的月度导出物就是全部恢复源,配合事先问清的交接条款,断档期可以压到最短。