1、立项背景和目标:
在信息碎片化时代,用户面临新闻多端分散、优质内容易被404(链接失效)等痛点。本项目旨在打造一个跨平台(PC网页、iOS、HarmonyOS)的智能新闻聚合系统。核心目标是通过分布式爬虫实时抓取全网热点资讯,并利用无头浏览器技术对高价值新闻生成永久DOM快照和长图存档,确保信息资产的永久可访问性。
2、核心功能模块介绍:
分布式爬虫与清洗引擎: 针对不同新闻源定制抓取策略,利用自然语言处理(NLP)进行正文提取、去重和自动打标签。
网页快照与归档中台: 监听新闻入库事件,异步调度无头浏览器渲染目标页面,生成离线HTML快照和PDF/长图,存储至对象存储(OSS)。
多端统一分发API: 为HarmonyOS、iOS和PC Web提供统一的RESTful接口,支持基于ElasticSearch的亿级数据毫秒级全文检索。
智能推荐与订阅机制: 根据用户浏览画像,实现千人千面的新闻流推荐。
3、业务流程、功能路径描述:
数据生产链路: 调度中心下发任务 -> 爬虫节点抓取HTML -> 清洗服务提取标题/正文/时间 -> 触发快照异步任务 -> 存入MySQL并同步至ES索引。
C端用户访问链路(以鸿蒙端为例): 用户打开HarmonyOS App -> 发起首页Feed流请求 -> 后端网关鉴权 -> 推荐系统计算流数据 -> 返回资讯列表 -> 用户点击新闻 -> 优先加载本地/OSS的网页快照,实现秒开体验。
1、整体架构和设计思路:
项目采用前后端分离与微服务化架构思想。前端采用 Vue3 构建 PC 管理后台与 Web 端,移动端使用 ArkTS 进行鸿蒙原生开发。后端核心业务基于 Spring Boot 构建,数据持久层采用 MySQL 分库分表,利用 Redis 缓存热点新闻与用户会话。全文检索与多条件聚合依赖 ElasticSearch 支撑。分布式爬虫使用 Python Scrapy 框架集群部署,并通过 RabbitMQ/Kafka 与 Java 主服务进行解耦与消息通信。
2、负责模块和结果:
我负责整个后端的架构设计、快照生成引擎以及鸿蒙端API接口的开发。
结果量化: 通过优化爬虫连接池与异步IO,使单节点日均新闻抓取量稳定在 20万+ 条,成功率达 98.5%。在快照生成模块,引入了多线程无头浏览器对象池(Browser Pool),将单张网页快照的生成时间从平均 4.5秒 压缩至 1.2秒,系统整体 QPS 提升了 300%。
3、遇到的难点、坑,和解决方案:
难点与坑: 在高并发抓取并生成快照时,Puppeteer (无头浏览器) 频繁发生内存泄漏(Memory Leak),导致服务器 OOM 宕机;同时部分动态新闻网站(SPA单页应用)存在复杂的反爬与异步加载机制,导致快照截取为空白。
解决方案: 1) 重构快照引擎: 放弃每次请求新建浏览器实例的做法,自主开发了一套基于池化技术的浏览器实例管理中间件,限制最大存活实例数,并设置定时销毁与健康度检查机制,彻底解决了 OOM 问题。
2) 动态渲染应对: 在快照截取脚本中注入自定义 JavaScript 探针,通过监听网络请求的 networkidle0 状态和特定的 DOM 节点渲染完成事件,结合动态代理 IP 池,成功攻克了复杂动态网页的完整快照抓取难题。