
FDE实施纪实上一期 30块钱搭起一套 1760 台电梯运营系统 有个一直悬着一个工程问题没解决数据在秒悟的云上系统在飞牛的盘上每天的数据怎么过去最原始的办法是派人下载、上传。那是让人当数据的搬运工——而且人这个环节正是第三期说的转手必脏里最不可靠的一环。我们的答案是全自动人不用碰。现在搞定了每天凌晨 2 点数据自己从秒悟走到飞牛。这一期把这条链路完整讲一遍。一条数据的完整旅程整条链路四段每天自动跑第一段秒悟侧定时导出。每天北京时间凌晨 2 点秒悟云端的定时任务自动醒来从数据库里把昨天以来变化过的数据查出来按项目、井道、电梯、日志、工单五张表各生成一个 CSV装进一个data_日期文件夹。第二段WebDAV 推送。云函数拿着这些文件通过飞牛 FN Connect 暴露的 WebDAV 地址HTTPS 直传进飞牛 NAS 的指定目录。公网传输加密通道不需要拉专线。第三段飞牛侧落地。文件落在飞牛的 指定 目录下一天一个文件夹整齐排队。第四段EMMCS 自动读取。指挥系统自己也醒着每天到点自动扫描这个目录把新文件夹里的 CSV 增量导入 PostgreSQL导入成功记一笔失败整批回滚并留痕。运营第二天早上打开界面数据已经躺在库里了。真正实现从数据产生到入库人工环节为零。秒悟侧增量导出不靠人记这段最见功夫的是哪些数据该导这个问题。做法是记一本账数据库里有一张db_export_log表只记一个关键字段——last_success_at上次成功导出的时刻。每次导出就查所有在这个时刻之后变化过的记录。这里有三个细节值得说其一增量条件用双保险。查询条件是updated_at 超过时刻或created_at 超过时刻。新增的数据、修改过的字段、状态变更工单关单、项目停用、软删除全都跑不掉。我们约定项目里不做物理删除所以增量查询能覆盖全部变化场景。其二失败不更新账本。导出成功了才更新last_success_at上传失败了账本不动下次还从旧时刻查。这意味着网络抖一次、上传挂一次下一次自动重试数据不会丢、也不会重。自愈是设计出来的不是祈祷出来的。其三空表也导出。没有增量的表也生成一个只含表头的 CSV。下游靠表头识别这张表今天没数据而不是面对一个空文件夹猜是没数据还是没导出。还有两个坑踩过的人都懂cron 是按 UTC 执行的想在北京时间凌晨 2 点跑得配成 UTC 18:00文件夹名要按北京时间生成不然 UTC 日期比本地早 8 小时文件夹名会差一天——上游下游对不上号全链路卡死。WebDAV三个坑都写在状态码里传输通道走的是飞牛 的 WebDAV。这条路上有三个经典坑每一个都有对应的 HTTP 状态码指纹坑一PUT 不能建目录。WebDAV 的 PUT 只能往已存在的目录里传文件目录不存在就返回 403。所以上传前必须先用 MKCOL 方法把当天的日期目录建出来。早期版本没做这一步天天 403还以为是权限问题。坑二中文路径要编码。飞牛的 WebDAV 路径里带一层中文目录admin 共享给我不编码直接拼 URL服务器返回 404——路径明明存在就是找不到。编码之后就通了。坑三共享不等于权限。飞牛里把文件夹共享给某个账号和给账号配成员权限是两套机制。WebDAV 只认成员权限。只做了共享没做成员权限上传照样 403。这个坑最隐蔽因为界面上看一切都像是配好了。至于能登录但根目录空白这类怪现状多半是可见文件夹范围没配飞牛允许你精细控制 WebDAV 能看见哪些文件夹没勾选的根目录就是一片空白。EMMCS 侧自动读取的昨天与今天最后一公里在EMMCS系统这一侧。EMMCS 以应用包形式跑在飞牛上它的自动读取逻辑核心是今天与昨天两个日期红线一只扫今天和昨天。系统每天到点自动触发处理今天的文件夹正常增量外加昨天的文件夹补漏昨天失败了今天自动重导一遍。再早的历史失败不自动碰避免日志被陈年旧账刷屏——真要追漏界面上点一下立即执行一次全扫一遍已成功的日子自动跳过。红线二幂等是底线。每个日期文件夹导入前先查账这天已经成功过跳过。同一天重复触发、重复导入结果不变。可重放是所有自动化的安全绳。红线三失败整批回滚。一个文件夹里 5 个 CSV任何一个解析不了缺列、字段错当天整批回滚记进auto_import_runs表界面最近自动导入日志里直接显示失败原因——文件缺失无法解析 elevator_idxxx。脏数据不会半进半出地污染库。这里也有一个坑值得点名配置目录要填容器内路径不能填宿主机路径。EMMCS 跑在容器里填了宿主机的绝对路径文件会写进容器的 overlay 孤儿层——界面看着导完了下载接口 404数据其实没落到挂载盘上。这类看起来成功了的假故障比报错更危险。全自动之后人干什么链路跑通之后人的角色变了不再是搬运工而是例外处理员——只有连续几天的失败、需要追历史漏账、或者上游表结构变更时才需要人介入。日常状态下这条链路安静地跑在凌晨不出声就是好消息。诚实地补一句边界1、物理删除的数据增量查询捕获不到所以我们干脆约定不做物理删除2、小程序侧若改了表结构契约不变的前提下映射层要跟着调3、导出与扫描的时间点最好错开半小时给文件传完留出缓冲——这些是自动化的保修条款不是缺陷。真实世界不生产干净数据也不成全自动的童话。所谓数据自动化是每一个环节都可重放、可对账、可回滚人只在例外时刻出现。核心观点数据自动化不是连上就完事——秒悟侧靠账本记增量、失败不更新账本实现自愈传输靠 WebDAV 但要迈过 MKCOL、中文编码、成员权限三个坑飞牛侧靠今天昨天调度、幂等跳过、整批回滚兜底最终让人从事务性搬运里退出来只做例外处理。重要的事搞定这个事情不在于代码技术多牛逼在于要熟悉上下游的业务需要和功能点结合起来也能办大事。正是当代FDE要做的。数据自动化搞定了又没花钱。航母肯定是得花钱买的实在不行坦克绑在船上也能干。完美实现降本利旧增效自动。你们公司的数据现在还在靠人导出上传吗有没有不花钱的方案评论区聊聊。FDE实施纪实系列文章第一期 30块钱搭起一套 1760 台电梯运营系统第二期 就是本期文章#数据自动化 #电梯维保 #WebDAV #飞牛NAS #定时任务#增量同步 #EMMCS #FDE实施纪实 #数据管道 #数字化转型