带娃写代码的妈妈,居然用爬虫+区块链搞定了资源追踪?
上周五晚上十点半,我家娃刚睡着,我蹑手蹑脚地打开 MacBook(对,我又把 Windows 丢在角落吃灰了),准备继续搞那个“神秘项目”。结果微信一响——是组里新来的实习生:“姐,咱们那个资源溯源的需求,是不是得上区块链了?”
我差点一口老血喷出来。
不是因为区块链本身有多吓人,而是……这需求来得太突然。上周 PM 刚拍板说要做一个“内容资源全链路追踪系统”,用来监控我们内容中台里图片、视频、文案这些素材从哪里来、谁改过、有没有被滥用。结果今天就有人问我是不是要上链。
说实话,作为一个边带娃边 coding 的全职妈妈,我对这种“高大上”的词儿已经有点过敏了。毕竟白天要对付娃的“十万个为什么”,晚上还得对付产品经理的“我觉得可以加个功能”,哪还有精力去折腾什么分布式账本?
但转念一想:这不正好是个机会?
起因:资源乱成一锅粥
事情得从去年双11说起。
那会儿我们团队负责一个内容聚合平台,用户上传的图片、短视频、文案素材每天以万级增长。问题来了:有些素材被多次转用,源头不明;有些明明是盗图,却没人能追责;更离谱的是,有一次运营小哥误删了一个热门视频模板,结果整个活动页挂了,运维半夜打电话骂街。
我们内部管这叫“资源黑洞”——进去了就找不着北。
领导拍桌子:“必须建立一套可追溯、不可篡改的资源管理体系。”
PM 补刀:“最好还能展示给客户看,显得我们技术很牛。”
于是,区块链这个词,就这么被推上了台面。
技术选型:别一上来就上链!
很多同学一听到“不可篡改”,第一反应就是:上区块链!
但作为一个在杭州混迹过阿里、网易系公司的老油条,我深知——能不用链就不用链。毕竟链上存数据贵、慢、还难调试。
所以我们先做了个成本评估:
| 方案 | 存储成本 | 查询速度 | 可审计性 | 开发复杂度 |
|---|---|---|---|---|
| 传统数据库 + 日志 | 低 | 快 | 弱(日志可删) | 低 |
| 区块链(私有链) | 高 | 慢 | 强 | 高 |
| 混合方案(链下存数据,链上存哈希) | 中 | 快 | 强 | 中 |
最终我们选择了第三种:资源元数据存在 MySQL,原始文件放 OSS,关键操作的哈则写入私有区块链。这样既保证了性能,又满足了“不可篡改”的合规要求。
爬虫登场:资源从哪来?
但问题还没完——很多资源根本不是用户上传的,而是从外部网站“借鉴”来的(咳咳,你懂的)。比如运营从某红书扒了个爆款封面图,编辑从 YouTube 截了个片段……这些“野生资源”完全没有来源记录。
这时候,爬虫就得上场了。
我们的思路是:每当系统检测到一个新资源没有明确来源,就自动触发一个轻量级爬虫任务,尝试反向溯源。
举个栗子:
假设运营上传了一张图片 abc.jpg,系统发现它没打任何标签。我们就用这张图的 perceptual hash 去全网搜相似图,找到可能的原始 URL。
技术栈选了:
- Python + Scrapy(轻量、灵活)
- 图像哈希用
imagehash - 相似图检索用自建的 Elasticsearch 索引(提前爬了一批主流内容平台)
但爬虫这东西,坑多得像娃的积木——撒一地,捡都捡不完。
踩坑实录
反爬太狠:某红书直接 IP 封杀,还好我机智地用了代理池 + 随机 User-Agent。但测试时忘了关,结果本地 IP 被封了三天,连淘宝都打不开……娃问我:“妈妈,为什么你的电脑不能买玩具?” 我:……
动态加载:现在很多网站用 React/Vue,首屏返回一堆
<div id="app"></div>。Scrapy 默认不执行 JS,抓不到真实内容。最后用上了scrapy-splash,但部署起来贼麻烦。后来干脆改成 Headless Chrome + Puppeteer,虽然内存吃得多,但稳。资源归属模糊:爬到了 5 个相似 URL,到底哪个是真正的源头?我们加了个规则引擎:优先选择最早发布时间、最高分辨率、带水印的版本。但依然有 15% 的 case 无法确定。这部分就打上“疑似转载”标签,人工复核。
区块链怎么接?别整虚的
很多人以为上链就是调个 API 写数据,其实不然。
我们用的是 Hyperledger Fabric(别笑,我知道现在大家更爱用 Ethereum 或 Solana,但在企业场景,Fabric 的权限控制和通道机制更适合我们)。搭建了一个 4 节点的私有网络,跑在阿里云 ECS 上。
关键设计点:
- 不上链原始数据:只上链
resource_id + operation_type + timestamp + hash_of_metadata - 智能合约(Chaincode)只做验证:比如检查操作者是否有权限、哈希是否合法
- 读写分离:查询走 MySQL,审计才查链
写入流程大概是这样:
// 伪代码:资源操作后触发上链
func OnResourceModified(resourceID string, meta ResourceMeta) {
hash := sha256.Sum256(meta.ToJSON())
tx := &Transaction{
ResourceID: resourceID,
OpType: "UPDATE",
Timestamp: time.Now().Unix(),
MetaHash: hex.EncodeToString(hash[:]),
Operator: getCurrentUser(),
}
// 调用 Fabric SDK 提交交易
fabricClient.SubmitTransaction("resourceCC", "recordOperation", tx)
}
但上线第一天就翻车了。
原因是:链上交易提交太慢!高峰期每秒 200+ 资源操作,Fabric 网络直接卡住,交易排队超时。
我抱着电脑坐在儿童房地板上(娃在旁边搭乐高),盯着日志看了两小时,终于发现问题:同步写链阻塞了主业务流程。
解决方案?异步队列 + 重试机制。
我们加了个 Kafka 队列,资源操作成功后只发消息,由独立 worker 消费并上链。即使链暂时不可用,消息也不会丢。
graph LR
A[用户上传资源] --> B{资源校验通过?}
B -- 是 --> C[存入OSS + 写MySQL]
C --> D[发消息到Kafka]
D --> E[Blockchain Worker]
E --> F[提交到Fabric]
搞定那天凌晨两点,我给自己泡了杯速溶咖啡(星巴克?不存在的,娃喝剩的奶粉我都舍不得扔),看着监控面板上“链上交易成功率 99.8%”,终于松了口气。
效果如何?真香!
系统上线三个月,效果超出预期:
- 盗图投诉下降 70%:因为能快速定位源头,法务直接拿着链上证据发律师函
- 资源复用率提升:编辑现在知道哪些素材是“官方认证”的,敢大胆用了
- 审计时间从 3 天缩到 10 分钟:以前要翻日志、问人、查备份,现在一条命令查链就行
最搞笑的是,上次团建吃饭,PM 举杯说:“感谢XX妈妈,不仅带娃带得好,链也上得稳!” 全桌哄笑。我说:“下次需求别半夜提,我就谢天谢地了。”
给同行的几点建议
- 别为了用区块链而用区块链:先想清楚业务是否真的需要“不可篡改”。大多数场景,加个数字签名+日志归档就够了。
- 爬虫不是银弹:法律风险、数据质量、维护成本都要考虑。我们只对“高价值、高风险”资源启动反向爬取。
- 异步是王道:链上操作一定要解耦,别让主流程等它。
- 测试环境要像生产:我们在测试链上故意制造节点宕机、网络延迟,提前暴露了很多问题。
写在最后:妈妈程序员的日常
有人说,全职妈妈搞技术容易脱节。但我觉得,带娃反而让我更务实——没时间搞花里胡哨的东西,每一行代码都得解决问题。
上周我还用这套系统帮我娃的幼儿园溯源了一张“疑似侵权”的活动海报,园长惊呆了:“你这妈妈还会区块链?”
我笑笑:“会一点点,主要是怕娃以后被欺负,得留证据啊。”
技术不是炫技,而是解决问题的工具。无论是追查一张图的来源,还是守护孩子的成长,道理都一样。
好了,娃醒了,又要哄睡了。代码先放一放,人生这场 debug,永无止境 😅
注:本文所有技术方案均基于实际项目脱敏。坐标杭州,欢迎同频的技术妈妈们交流~(简历可投,阿里/网易系优先,毕竟离家近能准时接娃!)

评论 0