返回 AI 资讯
社区讨论LinuxDo 最新

从 Node.js 到 Go:夸克资源搜索站( pansou.de )的架构重构实践

背景 PanSou盘搜得 是一个夸克网盘资源聚合搜索平台,上线以来月活用户超过200万,索引资源量达800万+条。随着用户规模增长,原有的 Node.js 技术栈逐渐暴露出一些问题,最终决定进行一次彻底的架构重构。 旧架构的痛点 初版架构采用 Next.js + BullMQ + PostgreSQL + Redis 的组合: Next.js 负责前端渲染和 API Routes BullMQ 处理异步任务(资源转存、定时清理) PostgreSQL 存储资源索引和转存记录 Redis 做查询缓存和任务队列 这套…

内容摘要

作者:#LaoMa 板块:#开发调优 背景 PanSou盘搜得 是一个夸克网盘资源聚合搜索平台,上线以来月活用户超过200万,索引资源量达800万+条。随着用户规模增长,原有的 Node.js 技术栈逐渐暴露出一些问题,最终决定进行一次彻底的架构重构。 旧架构的痛点 初版架构采用 Next.js + BullMQ + PostgreSQL + Redis 的组合: Next.js 负责前端渲染和 API Routes BullMQ 处理异步任务(资源转存、定时清理) PostgreSQL 存储资源索引和转存记录 Redis 做查询缓存和任务队列 这套架构在早期运行良好,但随着流量增长,问题逐渐显现: 1. 并发处理能力受限 Node.js 单线程模型在高并发场景下压力明显。搜索请求需要调用上游API、数据库查询、Redis缓存,在流量高峰期P99响应时间经常突破2秒。 2. 资源占用偏高 Next.js 进程内存占用大,加上 BullMQ Worker 进程,整体资源消耗不低。在用户量翻倍后,服务器成本压力开始显现。 3. 维护复杂度上升 API Routes、Service层、Worker任务散落在不同模块,依赖链路长,排查问题需要跨多个层级。 4. 定时任务可靠性不足 BullMQ 虽然成熟,但在资源清理这种长周期任务上偶尔会出现任务堆积,需要人工介入重启。 重构方案 核心思路是前后端彻底分离,业务逻辑下沉到性能更强的 Go 服务。 新架构设计 用户请求 ↓ 宝塔 Nginx(反代) ↓ Docker 内部 Nginx ├─ /api/v1/* → Go API (8080) └─ /* → Next.js (3000) ↓ PostgreSQL + Redis ↓ Go Worker (定时清理) 职责划分: Next.js:纯前端渲染 + SSR SEO落地页,不再承担任何业务逻辑 Go API:搜索、转存、账号管理、管理后台所有接口 Go Worker:过期资源清

资讯来源

LinuxDo

原文链接

打开原文