Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AMLLHub

新一代AMLL歌词站,与AMLL歌词生态协作

AMLL TTML 歌词站 的重构版本

AMLLHub

架构

用户层 React 19 + Vite + TypeScript

API 层 Go (Gin) —— 歌词获取 / 搜索 / 批量查询 / 同步触发 / 状态查询 / 无歌词记录 / 在线搜索

Worker 层 Rust (Tokio) —— RabbitMQ 消费者 / 自动同步 / 索引更新

基础设施 PostgreSQL Redis MinIO RabbitMQ MeiliSearch

服务拆分

服务 技术栈 职责
API Go + Gin + GORM HTTP 接口:歌词获取(含 Range)、搜索、批量查询、同步触发、状态查询、无歌词记录
Worker Rust + Tokio + SeaORM 后台同步:监听 RabbitMQ 队列,从 GitHub 拉取 TTML 索引,下载文件,入库并更新搜索索引;无歌词解析:网易云 API 分类(纯音乐/云盘/无歌词)

数据流

  1. 同步触发:API 收到同步请求后,向 RabbitMQ 发送消息
  2. 任务消费:Worker 消费消息,获取 GitHub 最新 commit,对比本地状态
  3. 差异计算:解析 raw-lyrics-index.jsonl,计算新增/更新/删除的文件列表
  4. 并发下载:使用 semaphore 控制并发数,从 GitHub 下载 TTML 文件并上传到 MinIO
  5. 数据入库:解析 TTML 内容(提取歌词文本、字数、行数、拼音),写入 PostgreSQL
  6. 搜索索引:将歌曲元数据和拼音信息批量写入 MeiliSearch
  7. 歌词获取:API 根据平台 ID 查询 Redis 缓存或 PostgreSQL,返回 MinIO 中的 TTML 文件流
  8. 无歌词记录:歌词不存在时,API 异步记录到 PostgreSQL(Redis 去重),新记录通过 RabbitMQ 发送给 Worker 解析分类(纯音乐/云盘音乐/无歌词);歌词补全时自动从排行榜删除;每周一清空无歌词记录,白名单永久保留

基础设施

组件 用途
PostgreSQL 关系型数据:歌曲、艺术家、专辑、平台映射、同步历史与进度
MinIO 对象存储:原始 TTML 文件(按 raw-lyrics/{filename} 路径存储)
Redis 缓存:平台 ID → MinIO 路径映射;分布式锁:防止并发同步;无歌词去重与排行榜缓存
RabbitMQ 消息队列:解耦 API 与 Worker,支持死信队列(DLX/DLQ);独立队列:无歌词解析任务
MeiliSearch 全文搜索:歌曲名、艺术家、专辑、歌词文本,支持拼音搜索

鸣谢

About

新一代AMLL歌词站,与AMLL生态协作

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages