MiniCatch 是一个专为个人自动追剧场景设计的 Web 应用。它不仅解决了“手动刷新资源站查看剧集更新、下载资源时忘记最近观看进度”等追剧常见痛点,更在架构上经历了多次迭代优化,最终实现了高效、弹性、低资源占用的自动追剧体验。

1. 真实痛点驱动的架构演进

在 MiniCatch 之前,个人追剧主要依赖手动刷新资源站页面,既浪费时间又容易遗漏更新。早期尝试用简单脚本定时抓取,但很快遇到以下问题:

  • 反爬虫与 Cloudflare 防护:资源站采用了 Cloudflare 和多重反爬机制,传统 HTTP 脚本很难获取内容。
  • 资源消耗大:为应对反爬虫,必须用 Chrome Headless 等浏览器模拟,单机长期运行 Chrome 占用大量内存和 CPU。
  • 进度管理混乱:剧集多、更新慢,用户很容易忘记自己看到哪一集,缺乏统一的进度记录和管理。
  • 剧集生命周期复杂:有些剧集一年才更新一次,频繁检测既浪费资源又无意义,需要灵活的追踪控制。

早期方案

最初采用 Clojure 单体爬虫,定时拉起 Chrome 后台执行,虽然能抓取数据,但程序常驻内存需求极大,资源利用率低。后续将爬虫与 Web 服务拆分,爬虫脚本通过 API 与 Web 服务交互,并将爬虫迁移到阿里云函数计算(FC)等弹性环境,提升了弹性,但 JVM 的 Web 服务依然偏重,维护和部署成本高。

架构优化

最终,MiniCatch 采用 Go 语言重构,整体架构进一步优化:

  • 服务端与爬虫彻底解耦:Web 服务端微服务部署,负责剧集管理、进度记录和通知推送;爬虫作为独立任务,支持在云函数等弹性环境中定时运行,按需拉起 Chrome,极大降低主服务资源占用。
  • 标准化任务与回调接口:所有爬虫任务通过标准接口定义,支持多种实现方式,便于扩展和维护。
  • 现代 Web UI:提供直观的前端界面,支持剧集添加、进度修改、追踪暂停/恢复等操作,提升用户体验。
  • 轻量级数据库:采用 SQLite 持久化所有数据,无需额外数据库服务,部署和迁移极为方便。

2. 当前架构的核心优点

低资源占用与高弹性

  • Go 语言实现,内存占用极低,适合长期运行(内存占用 <6MB,启动速度 <30ms)。
  • 爬虫任务云端弹性调度,Chrome 只在需要时启动,极大节省服务器资源(云函数调用开销 ~0.5元/年/30分钟定时调用)。
  • 主服务与爬虫解耦,单点故障风险低,维护简单(爬虫可以位于任意不可信、不稳定环境中,无需担心宕机风险)。

反爬虫适应性强

  • 支持基于 Chrome Headless 的浏览器模拟爬取,绕过 Cloudflare 等反爬机制。
  • 爬虫可在阿里云函数等平台定时运行,按需扩容,成本可控。

自动化与易用性

  • 定时自动检测剧集更新,发现新集数自动入库并推送通知,无需人工干预。
  • 进度自动记录,UI 可随时查看和修改,彻底解决“忘记看到第几集”的问题。
  • 支持对任意剧集暂停/恢复追踪,灵活应对不同剧集的更新周期。

现代化体验

  • 前后端分离,UI 现代简洁,操作直观。
  • Slack Webhook 通知,消息推送及时,支持扩展到其他平台。

易于部署与维护

  • 单一二进制文件部署,无需复杂依赖。
  • SQLite 持久化,数据迁移和备份简单。
  • 配置灵活,适应本地、容器、云端等多种运行环境。

3. 总结

MiniCatch 的架构优化,源于对个人追剧场景的深刻理解和多次实践。它用最小的资源消耗,实现了自动检测、进度管理、弹性爬虫和即时通知等核心功能。无论是部署在本地还是云端,MiniCatch 都能为个人用户带来极致的自动追剧体验。

有类似需求?联系微信 CorkineMa免费获取建议和报价折扣。