带娃写代码的妈妈,居然用爬虫+区块链搞定了资源追踪?

机器学习厨子
2025-12-16 09:04
阅读 315

上周五晚上十点半,我家娃刚睡着,我蹑手蹑脚地打开 MacBook(对,我又把 Windows 丢在角落吃灰了),准备继续搞那个“神秘项目”。结果微信一响——是组里新来的实习生:“姐,咱们那个资源溯源的需求,是不是得上区块链了?”

我差点一口老血喷出来。

不是因为区块链本身有多吓人,而是……这需求来得太突然。上周 PM 刚拍板说要做一个“内容资源全链路追踪系统”,用来监控我们内容中台里图片、视频、文案这些素材从哪里来、谁改过、有没有被滥用。结果今天就有人问我是不是要上链。

说实话,作为一个边带娃边 coding 的全职妈妈,我对这种“高大上”的词儿已经有点过敏了。毕竟白天要对付娃的“十万个为什么”,晚上还得对付产品经理的“我觉得可以加个功能”,哪还有精力去折腾什么分布式账本?

但转念一想:这不正好是个机会?


起因:资源乱成一锅粥

事情得从去年双11说起。

那会儿我们团队负责一个内容聚合平台,用户上传的图片、短视频、文案素材每天以万级增长。问题来了:有些素材被多次转用,源头不明;有些明明是盗图,却没人能追责;更离谱的是,有一次运营小哥误删了一个热门视频模板,结果整个活动页挂了,运维半夜打电话骂街。

我们内部管这叫“资源黑洞”——进去了就找不着北。

领导拍桌子:“必须建立一套可追溯、不可篡改的资源管理体系。”
PM 补刀:“最好还能展示给客户看,显得我们技术很牛。”

于是,区块链这个词,就这么被推上了台面。


技术选型:别一上来就上链!

很多同学一听到“不可篡改”,第一反应就是:上区块链!
但作为一个在杭州混迹过阿里、网易系公司的老油条,我深知——能不用链就不用链。毕竟链上存数据贵、慢、还难调试。

所以我们先做了个成本评估:

方案 存储成本 查询速度 可审计性 开发复杂度
传统数据库 + 日志 弱(日志可删)
区块链(私有链)
混合方案(链下存数据,链上存哈希)

最终我们选择了第三种:资源元数据存在 MySQL,原始文件放 OSS,关键操作的哈则写入私有区块链。这样既保证了性能,又满足了“不可篡改”的合规要求。


爬虫登场:资源从哪来?

但问题还没完——很多资源根本不是用户上传的,而是从外部网站“借鉴”来的(咳咳,你懂的)。比如运营从某红书扒了个爆款封面图,编辑从 YouTube 截了个片段……这些“野生资源”完全没有来源记录。

这时候,爬虫就得上场了。

我们的思路是:每当系统检测到一个新资源没有明确来源,就自动触发一个轻量级爬虫任务,尝试反向溯源

举个栗子:
假设运营上传了一张图片 abc.jpg,系统发现它没打任何标签。我们就用这张图的 perceptual hash 去全网搜相似图,找到可能的原始 URL。

技术栈选了:

  • Python + Scrapy(轻量、灵活)
  • 图像哈希用 imagehash
  • 相似图检索用自建的 Elasticsearch 索引(提前爬了一批主流内容平台)

但爬虫这东西,坑多得像娃的积木——撒一地,捡都捡不完。

踩坑实录

  1. 反爬太狠:某红书直接 IP 封杀,还好我机智地用了代理池 + 随机 User-Agent。但测试时忘了关,结果本地 IP 被封了三天,连淘宝都打不开……娃问我:“妈妈,为什么你的电脑不能买玩具?” 我:……

  2. 动态加载:现在很多网站用 React/Vue,首屏返回一堆 <div id="app"></div>。Scrapy 默认不执行 JS,抓不到真实内容。最后用上了 scrapy-splash,但部署起来贼麻烦。后来干脆改成 Headless Chrome + Puppeteer,虽然内存吃得多,但稳。

  3. 资源归属模糊:爬到了 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妈妈,不仅带娃带得好,链也上得稳!” 全桌哄笑。我说:“下次需求别半夜提,我就谢天谢地了。”


给同行的几点建议

  1. 别为了用区块链而用区块链:先想清楚业务是否真的需要“不可篡改”。大多数场景,加个数字签名+日志归档就够了。
  2. 爬虫不是银弹:法律风险、数据质量、维护成本都要考虑。我们只对“高价值、高风险”资源启动反向爬取。
  3. 异步是王道:链上操作一定要解耦,别让主流程等它。
  4. 测试环境要像生产:我们在测试链上故意制造节点宕机、网络延迟,提前暴露了很多问题。

写在最后:妈妈程序员的日常

有人说,全职妈妈搞技术容易脱节。但我觉得,带娃反而让我更务实——没时间搞花里胡哨的东西,每一行代码都得解决问题。

上周我还用这套系统帮我娃的幼儿园溯源了一张“疑似侵权”的活动海报,园长惊呆了:“你这妈妈还会区块链?”

我笑笑:“会一点点,主要是怕娃以后被欺负,得留证据啊。”

技术不是炫技,而是解决问题的工具。无论是追查一张图的来源,还是守护孩子的成长,道理都一样。

好了,娃醒了,又要哄睡了。代码先放一放,人生这场 debug,永无止境 😅


注:本文所有技术方案均基于实际项目脱敏。坐标杭州,欢迎同频的技术妈妈们交流~(简历可投,阿里/网易系优先,毕竟离家近能准时接娃!)

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝