自研脚本 + 对象存储的长期成本

自研脚本 + 对象存储的长期成本 | Ftrans B2B

脚本没有错,它只是没有被设计成要活五年、被十个人接手。

本页目录:一句话结论 | 三点速览 | 脚本是对的选择 | 成本落在哪四个地方 | 完整对照表 | 各自的适用场景 | 对象存储不用换掉 | 常见问题

一句话结论

自研脚本加对象存储在起步阶段几乎总是正确的选择——它快、可控、没有采购流程。它的成本不在写的时候,而在写完之后:每加一家伙伴要改一次代码、安全检查没有位置放、写脚本的人调岗之后无人敢动、出问题时查不到过程。

三点速览

  1. 变更成本随伙伴数量线性增长。 每一家客户的服务器、协议、目录规则、命名规范、时间窗都不一样。第一家是写代码,第十家还是写代码。
  2. 安全检查在脚本里没有自然的位置。 病毒检查、敏感内容检查、审批不是脚本的职责,硬加进去意味着这套脚本要开始承担安全系统的责任。
  3. 人是最大的单点。 一段跑了三年的脚本,写它的人调岗之后,通常不是”没人会改”,而是”没人敢改”——因为没有人确切知道它现在还在为哪几条业务服务。

脚本是对的选择

这一页不打算贬低自研。多数技术负责人自己就是那个写脚本的人,这条路径的每一个决策在当时都是合理的:

  • 需求来得急,采购走不完流程;
  • 逻辑不复杂——定时去某个目录取文件、改个名、传到对象存储、通知一下;
  • 用现成的 SDK 和调度器,一天能跑通;
  • 出了问题自己就能改,不用等厂商。

它的问题不是设计错误,而是它从来没有被设计成要活五年、被十个人接手、承担合规责任。 一个原本三十行的定时任务,五年后可能有八百行、七个分支、三处硬编码的凭据,以及一份写在某个人脑子里的运维知识。

成本落在哪四个地方

每加一家伙伴,改一次代码

对端各不相同,适配成本全部由本方承担。同时对接多家客户时,每一家的服务器、协议、目录规则、命名规范、时间窗都不一样。

在脚本里,这些差异表现为分支、配置常量与特例处理。加一家客户是一次代码改动,跟着就是一次测试与一次上线。做过五次之后,这套脚本里会有一半的代码是在处理”这家不一样”。

平台把这些差异挪到配置里:每家客户建立为一个合作伙伴,其外部账号与密钥由平台统一托管,各家的 FTP/SFTP 或对象存储纳管为该伙伴的伙伴库目录,收发策略按伙伴与方向配置。加一家伙伴是加一份档案与一组策略,不是改一次代码。

→ 合作伙伴档案与收发策略

安全检查没有位置放

外来文件是否查过毒、外发文件是否含敏感内容,在脚本路径里取决于写脚本的人当时有没有想到,以及后来有没有人维护那部分逻辑。

更本质的问题是顺序。出向的内容检查与审批必须在加密之前完成,因为加密之后不再具备明文内容检查能力;入向的加密来件必须先解密再杀毒,因为密文阶段的检测能力有限。这个顺序在脚本里是可以写反的,而且写反了不会报错——它只会安静地失效。

产品把这一顺序固化在流程中:出向依次是受控入库、内容识别、敏感内容检查、人工审批、加密封装;入向依次是受控隔离、外层预检、解密验签、威胁检测。两个方向都设放行闸,未通过的文件停留在隔离区,不进入内部目标,也不发往外部伙伴。

→ 文件出入向安全治理

凭据在配置文件里,也在人手上

脚本要访问外部端点,就必须持有凭据。它们通常落在配置文件、环境变量或某个人的本地文件里,并且随着脚本被复制到新环境而复制。

伙伴的 FTP/SFTP 账号、对象存储访问密钥、加密密钥散在若干处,人员变动后凭据是否失效无人确认——这不是脚本写得好不好的问题,是这条路径本身没有凭据管理的位置。

平台把这类外部凭据统一保管与使用,业务侧提交任务与查看结果,全程不接触凭据;人员变动时不必逐个回收账号,轮换在平台一处完成。

→ 外部账号与密钥集中托管 · 直接把 FTP 账号给业务,风险在哪里

出问题时查不到过程

脚本通常会打日志,但日志的形态是为排障设计的,不是为追责设计的。客户来问”上周三那批图纸你们什么时候发的、谁触发的、我们那边为什么没收到”,能拿出来的往往是一段文本日志,缺少可查询、可导出、可归集的结构。

平台记录访问会话、文件操作、文件传输、系统管理、身份管理、身份认证、安全检测七类日志,支持条件查询、详情查看与导出,保留时长与归档策略可配置。还有一件事脚本很难覆盖:上传完成不等于对方已经收到并处理。 文件包提取会回传提取回执,协议直连的交换由接收方回送响应,经验签与哈希校验通过后才标记为已送达。

→ 交换全程审计与日志追溯

完整对照表

维度 自研脚本 + 对象存储 Ftrans B2B
起步速度 快,一天能跑通 需要一次建档与配置
新增一家伙伴 改代码 → 测试 → 上线 建一份伙伴档案 + 一组收发策略
对端变更(换地址、换协议、换目录规则) 改代码 改配置项
凭据存放 配置文件、环境变量或个人手中 平台托管,业务侧不接触
外发前的内容检查与审批 需要自行实现并维护 交换的固有环节,按伙伴与方向配置
出入向的处理顺序 靠写的人记得 固化在流程中,设放行闸
对端零部署的收发 需要另做一套页面与链接机制 文件包链接与收集链接,对端只需浏览器
交换记录 文本日志,为排障设计 七类日志 + 收发记录,可查询可导出
对方取没取 通常不知道 提取回执 / 协议回执
人员变动 无人敢改 配置在平台上,与人解绑
既有对象存储 继续用 同样继续用——纳管为伙伴库目录
作业编排与调度 脚本自己做 产品不含通用调度引擎,由既有调度平台承担,通过开放接口协同

最后一行是主动划出的边界:产品不包含通用的工作流编排与任务调度引擎。 如果企业已有成熟的调度平台,它继续承担编排,产品通过 OpenAPI、事件订阅与异步回调与其协同。
→ 与既有业务系统协同

各自的适用场景

自研脚本不会因为上了平台就全部下线,也不该全部下线。分界大致是这样的:

场景 建议
内部系统之间的文件搬运,不出企业边界 继续用脚本。这不是企业间交换
一次性的数据迁移、批量导入导出 继续用脚本。为一次性任务上平台不划算
只有一两个对端、规则长期不变、内容不敏感 继续用脚本。成本还没到临界点
作业编排、任务调度、依赖关系与重试策略 继续用既有调度平台。产品不做这件事
对端数量在增长,且每家规则不同 交给平台。变更成本会持续上升
交换内容涉及图纸、源代码、财务或个人信息 交给平台。需要外发前的检查与审批
需要向客户或审计说清每一次交付的过程 交给平台
脚本里硬编码了外部凭据 交给平台。这是最该优先处理的一类
写脚本的人已经调岗或即将离开 交给平台。这类脚本通常撑不过下一次对端变更

一个实用的判断:如果这套脚本挂了,你需要多久才能知道、以及知道之后由谁来修——这两个问题的答案,就是它真实的成本。

对象存储不用换掉

需要说清楚的一点:这一页说的是脚本那部分,不是对象存储那部分。

企业已有的对象存储、FTP 服务器与 NAS 都可以原位保留,纳管为伙伴库目录使用。可纳管的存储类型包括 FTP/FTPS/SFTP、SMB、Amazon S3(全球区域 / 中国区域)、阿里云 OSS、七牛云、深信服存储对象,以及兼容 S3 协议的存储服务。

数据不迁移、位置不变,对端不改配置,只把访问凭据收口到平台。 落地也不要求一次到位——可以先让平台接管一条新增的或风险较高的业务流,原路径保留作为回退,验证稳定后再停止人工操作与旧脚本。

→ 第三方存储资源纳管 · 零迁移纳管既有传输资源
→ 凭据托管的安全设计与评审配合见 外部凭据托管的安全设计与评审配合
→ 行业里的典型交换结构见 集成电路与半导体的内外部文件交换

常见问题

Q:我们自己写脚本对接就够了,为什么要上平台?

A:起步阶段脚本通常是对的选择。值得重新评估的信号有四个:对端数量在增长且每家规则不同、交换内容涉及敏感文件、需要向客户或审计说清交付过程、以及写脚本的人即将离开。出现两条以上时,长期维护成本通常已经超过一次性的建设成本。

Q:上了平台,现有的对象存储和 FTP 服务器要换掉吗?

A:不需要。既有的 FTP/FTPS/SFTP、SMB、S3/OSS 等存储资源可纳管为伙伴库目录,数据不迁移、位置不变,对端不改配置。要替换的只是脚本承担的那部分工作。

Q:我们已经有调度平台,两者会不会冲突?

A:不会,而且这是产品主动划定的边界——产品不包含通用的工作流编排与任务调度引擎。作业编排由企业既有的调度平台承担,产品通过 OpenAPI、事件订阅与异步回调与其协同。

Q:脚本能不能保留一部分?

A:可以,建议这样过渡。先让平台接管一条新增的或风险较高的业务流,原路径与旧脚本保留作为回退,验证稳定后再逐步停止。内部系统之间不出企业边界的搬运,本来就不需要挪。

Q:脚本里硬编码的凭据怎么处理?

A:这类通常应优先处理。做法是把外部企业建立为合作伙伴,其账号与密钥登记到该伙伴档案由平台保管,业务侧提交任务与查看结果、不接触凭据;平台侧跑通之后,再把脚本里与个人手中的旧凭据统一作废或轮换一次。