重剑无锋,大巧不工 SpringBoot --- 实战项目 JoyMedia ( 分析篇 )

JoyMedia - Beta - 预览图
JoyMedia - Beta - 系统结构

在线地址

JoyMedia - Beta 预览版

项目介绍

实现目的

  • 本人经常在写代码或者没事的时候会听一些音乐
  • 以前大部分会选择本地安装客户端
  • 其中最喜欢的认为做的比较好的音乐客户端实属网易云音乐了
  • 无论是从 Mac 版的客户端,还是 IOS 版的客户端,界面都非常优美,简直是极客和码农的必备
  • 最主要是的网易云的歌曲推荐功能,很强大,我一度认为2个人的歌单相似度超过90%,就可以在一起了,这样再也不怕找不到对象了,😆
  • 但也有些问题,网易云有一些版权音乐,是无法听到的,有时候昨天还在听得音乐,今天就听不了了
  • 这就很烦了

自己的想法

  • 最初想把这个版权音乐的 mp3 地址解析出来,这样就可以直接听了
  • 恩,想法很 nice
  • 那么,照着这个想法做吧

项目实现

总体架构

  • 正如上述系统结构所示
  • 我自己有2台云服务器,一台阿里云的,另一台是腾讯云的
  • 这2台服务器,我是这样分配的: 阿里云只提供 WEB 服务,腾讯云为 WEB 访问提供各种服务
  • 当然服务器上我还跑了其他服务

阿里云服务器

  • Nginx 主要负责了 JoyMedia 的 负载均衡,在该台服务器上,我用 部署了2个 spring-boot 项目,以权重的方式配置了负载均衡,这样我在更新项目的时候可以保证另一个服务的可用性
  • 当然 Nginx 还有个反向代理的作用, upstream 配置了其他项目的访问
  • 还有台 Redis 服务了,爬到的数据会存到 Redis 了,以供 WEB 服务迅速读取,当然在有些地方不会读取 Redis ,比如单曲歌曲播放的 mp3地址的获取
  • 在最开始的时候我会先在后台解析出来再存到 Redis 里,但是发现网易云的歌曲 mp3 地址失效太快了,有时会导致播放异常,不如实时解析来的实在
  • 在比如单首歌曲的评论的获取,这个得是实时解析的

腾讯云服务器

  • 提供网易云音乐解析的是一个 Node 服务,这个 Node 服务是如何解析地址的,这个需要单独再写一篇文章,先知道这个 Node 服务是干嘛的就好
  • 然后部署了3个spring-boot服务,分别提供了各自的服务,有定时爬去网易云音乐的推荐歌单,爬取歌单的歌曲列表,爬取歌单评论
  • 由于爬到的音乐信息很快就会失效,这个服务都要定时的爬取
  • 爬取到的数据的落地存储,我是存到的MongoDB中,在这篇文章中:重剑无锋,大巧不工 SpringBoot — 整合使用MongoDB , 我说明了为什么要选择 MongoDB
  • 这3个服务爬到的数据会实时存到 Redis 中,另一方面,会异步存到 MongoDB 中,我想着这些数据或许还能做什么数据分析之类的,😄

初版完成后

等我搭建完这个服务后,发现了问题

  • 有版权控制的音乐根本解析不到 mp3 的实际地址
  • 那么我想听的音乐,听不到还是听不到,突然变得很尴尬

又有了想法

  • 一般情况下,我们在一家音乐网站上找不到自己想要的音乐,就回去其他音乐网站上找
  • 恩,就这么干
  • 网易云找不到的音乐,我就去虾米音乐,去 QQ 音乐找
  • 这2个网站的音乐我都小试了下,都是可以的
  • 于是我现在把这些功能集中在页面的搜索框中,搜索这3个音乐网站的结果,然后实施解析来播放
  • 这是我下步要做的事情

有些地方还有 BUG

  • 有些地方还是有 BUG 的,需要修复

有些地方功能还没写好

  • 比如右上角的用户登录,现在的想法是使用第三方登录,比如 QQ, 微信…,但是是登录网易云音乐呢,还是登录网站呢?
  • 要是登录网易云音乐的话,估计账号安全是个问题,而且登录接口不能频繁调用
  • 要是登录网站的,好像没什么卵用
  • 再比如左下角的歌词界面,虽然能获取到歌词,但是怎么做到歌词随着歌曲的播放实时滚动,这个现在还没有头绪…

还在继续开发中…