​截止2019年二季度,网易云音乐用户数已经突破8亿,成为最活跃的音乐社区,位居在线音乐行业第一阵营。相信大家或多或少都使用过网易云音乐,不知道有没有人跟我一样,在云音乐听歌的时候喜欢打开评论看一看,有时发现评论比歌曲还精彩!

话不多说,今天就带大家对网易云音乐评论技术进行一番探秘,其中很多场景的实现方法可以应用到大部分互联网系统。该专题分为上下两篇,本文(上篇)主要讨论以下两个主题:

  • 了解云音乐评论的业务场景

  • 熟悉云音乐评论的基础架构

云音乐评论的业务场景

首先最常见的就是歌曲评论,每一首歌都有单独的评论区;第二就是歌单评论,第三块是网易云音乐新的社交场景——动态,然后还有电台,在电台详情里面也可以看到评论区,以上只是云音乐里面出现评论的冰山一角,可以说评论在云音乐里面是无处不在,上述出现的场景比如歌曲、歌单、动态、电台等等我们统称为「资源」,云音乐要求评论可以支持所有资源,并且具备快速扩展和接入新资源的能力。

然后我们再来看以下图片,第一个红框我们可以看到评论需要支持计数,第二个红框可以看到评论的显示方式,默认是推荐的评论,即按照特定的规则将精彩的评论在顶部呈现给大家,还可以按照最热或最新进行排序显示;第三个红框我们可以看到评论回复模块,即在评论之上可以进行回复,支持二级评论列表。

业务场景简单总结如下:

  • 中台化(简单理解即对不同业务提供复用的能力)

    • 支撑云音乐所有资源,包括歌单、歌手动态、音乐电台等

    • 具备快速扩展和接入能力多样性

  • 多样性

    • 功能多样(精彩热评,个人评论页,评论盖楼等等)

    • 规则复杂(按赞数排序,按时间排序,按优先级排序等等)

  • 高并发

    • 复合场景峰值QPS 2W+

    • 随热门资源和热门事件产生高并发

云音乐评论的基础架构

接下来我们来了解一下云音乐的基础架构,从上面的逻辑架构图可以看到,从下往上依次是:

  • 数据存储层:采用MySQL数据库,但不是简单的MySQL单点或者主从模式,而是MySQL分布式集群,使用数据库集群有两大好处,一是可以承载更多的数据量,二是可以提供更好的性能,因为有多节点可以同时提供服务,数据库负载能力可以水平扩展。

  • 数据缓存层:虽然使用了分布式数据库,但数据库能直接承载的并发请求还是非常有限的,无法直接承载线上那么高的QPS,因此在数据库之上采用Memcached做了一层数据缓存(无业务逻辑,与数据库表一一对应)

  • 应用业务层:在数据缓存之上是应用服务,从图中可以看到该层是评论的主要业务逻辑处理层,按模块功能进行不同微服务拆分

  • 应用缓存层:除了数据缓存层,云音乐还会在应用业务层之上使用Redis再构建一层缓存,应用缓存层的数据是经过了复杂的业务组装之后聚合而成,是可以直接返回给前端的

  • 网关层:网关层可以理解为云音乐后台的统一请求入口,并为云音乐评估提供基础通用的全局能力,具体下文会细说

  • 客户端:最上层即客户端层,即用户终端层

网关层

接下来详细说一下云音乐的网关,其最基本的作用就是请求路由,如上图所示,用户请求在经过Nginx之后正常就可以直接进入后台服务,但云音乐在这里加入一层网关,将Nginx的所有请求都先打到API网关上面,然后API网关采用RPC或服务注册发现的方式调用下层应用,那网关在这里的作用是什么呢,具体有以下几点:

  • 适应微服务发展

    • Nginx变更重启时对服务可用性有损,有了网关之后新应用上线无Nginx变更

    • 网关与下层应用通过服务注册发现,应用服务可以实现自动化扩缩容

    • 网关可以提供灵活分发机制,为同城多活、异地多活提供基础能力

  • 建立了全局能力

    • 服务注册与发现

    • 限流与降级

    • 鉴权

    • 异常监控

    • 服务治理

有了网关层,可以避免将流量监控、服务降级、应用限流等基础功能下沉到各个应用服务去实现,各业务团队可以专注业务功能开发,然后统一接入网关,这就是网关全局能力的体现。

数据存储/缓存层

如基础架构图所示,云音乐的特点之一是数据量庞大,而且新增数据量也很庞大,采用网易杭州研究院出品的分布式关系型数据库提供了两大能力:一是支持海量数据存储,二是支持水平扩展。云音乐评论数据的另一特点是读远远大于写,在此场景下使用缓存可以保证缓存有较高的命中率,否则请求经常会穿透缓存打到数据库,使得架设缓存的意义不大。

接下来看一下缓存设计,缓存分多层级,从前到后依次是客户端(iOS/安卓)缓存,这里更多的是为服务降级考虑,防止服务端临时不可用时给客户造成太差的客户体验;接下来是服务器本地缓存,将少量最热门的数据缓存在服务器本地,可以提供更好性能的同时缓解下层压力,但缺点是容量比较小;最后是分布式缓存,可以提供集群化部署和弹性扩缩容;可以看到不同层级的缓存的作用不一样,各有优势,在不同场景下发挥不同作用。当然使用缓存提升性能的同时,也会带来一些问题,提高系统设计和实现复杂度,常见的缓存问题比如缓存雪崩、缓存穿透、数据一致性等,这个在下一篇会细说。

以上就是云音乐评论的业务场景和基础架构,下一篇将围绕云音乐评论的核心功能,对功能如何实现以及为什么要这么实现来进行探秘,欢迎继续关注。


注:该文章思想内容参考网易云课堂微专业课程

网易云音乐工程师,亲自揭晓评论实现技术!| 技术头条相关推荐

  1. 爬取网易云音乐两万条评论储存在MySQL服务器上

    爬取网易云音乐两万条评论储存在MySQL服务器上 最近在公司实习,无聊时看看别人的博客,发现平时学习写写博客是一个很好的学习方法,报平时一些自己写的代码保存下来,遇到的错误踩到的坑也拿出来分享也可也帮 ...

  2. 网易云音乐工程师,亲自揭晓评论实现技术(二)| 技术头条

    欢迎大家回到网易云音乐评论技术探秘之旅,上一篇我们介绍了云音乐评论的业务场景和基础架构,这一篇将围绕云音乐评论的核心功能:评论发表.评论获取和评论点赞进行剖析探秘. 评论发表 首先我们先看上图,这是我 ...

  3. 网易云音乐工程师,亲自揭晓消息队列改造之路! | 技术头条

    作者 | 林德智 责编 | 胡巍巍 十年文案老司机,不如网易评论区. 网易云音乐自2013年上线后,业务保持了高速增长.本文整理自网易云音乐消息队列负责人林德智在近期 Apache Flink& ...

  4. 网易云音乐“王牌冤家”用户评论:评论爬虫及情感分析(SnowNLP)

    李荣浩上周发的<耳朵>专辑,你萌听了吗?小编真的超级喜欢"王牌冤家"这首歌,在新说唱听了李老师的那几句就一直念念不忘,这一周可是一直单曲循环中.恰好前两天看了SnowN ...

  5. Python爬取网易云音乐1万条评论

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:刘早起 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  6. Python爬取网易云音乐1万条评论,感受到疫情下的真情

    一.前言 昨天打开网易云音乐被这条视频刷屏了⬇️ 致敬所有疫情前线的工作人员!​music.163.com 1600万+的播放量,1.3万+的评论 那么今天我们用python看看这些评论里留下了哪些感 ...

  7. Python爬取网易云音乐1万条评论,感受到疫情下的真情!

    一.前言 昨天打开网易云音乐被这条视频刷屏了⬇️ 1600万+的播放量,1.3万+的评论 ​ 那么今天我们用python看看这些评论里留下了哪些感人的故事, 二.数据抓取 首先,我们用电脑打开网易云音 ...

  8. 网易云音乐与腾讯闹掰;今日头条下架万条短视频;美团打车或将被吊证| CSDN 极客头条

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 「CSDN 极客头条」是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报 ...

  9. 【抓包】网易云音乐WEB端歌曲评论接口分析

    不想看分析的,可以直接跳到最下面看总结,我给出了整个Api接口. 文章目录 抓包流程+分析 总结 抓包流程+分析 随便找首歌,然后打开chrome的开发助手,看看调用了哪些请求. 先猜测是用异步的方式 ...

最新文章

  1. php对象+this,PHP $this:当前对象
  2. http从发出请求到接收响应的旅行
  3. 三剑客之sed常用操作
  4. Hosting in .NET Core
  5. 即将举行的网络研讨会:调试生产中Java的5种最佳实践
  6. OD 快捷键使用大全。非常详细( 游戏逆向分析必看 )+ OD 断点 使用大全
  7. 学生学籍管理系统python_使用Python实现 学生学籍管理系统
  8. Android桌面悬浮窗仿QQ手机管家加速效果
  9. Web SCADA 电力接线图工控组态编辑器 1
  10. JavaScript的for of语法遍历数组元素
  11. 夺命雷公狗---node.js---7fs模块初步
  12. 用 JMeter 测试 MySQL 数据库
  13. filter和sessionListener实现session超时退出功能,过滤掉轮询请求
  14. ASCII三种进制对照表、二进制、字节
  15. 小菜学前端day02(学习笔记)
  16. wpsa4排版_wps排版(wps如何一键排版)
  17. excel如何晒出重复数据_excel 如何在大量数据中快速筛选出重复数据
  18. “网络相亲”三大纪律八项注意
  19. 工行山东省分行加强客户信息安全保护
  20. canvas画奥运五环 2019/10/29

热门文章

  1. 西门子S7-1200PLC远程调试方法
  2. 西安电子科技大学计算机类考研数据速览
  3. 按键精灵读取github page 网页,实现脚本远程控制功能
  4. BZOJ 1778 [Usaco2010 Hol] Dotp 驱逐猪猡
  5. 发布网站ASP.NET(ASPX)
  6. google vr学习资料整理
  7. 在线excel、excel协同平台、网络excel类产品很多,为啥大公司却只选云表?
  8. 台式机插上耳机没有声音
  9. 成功解决:RuntimeError: implement_array_function method already has a docstring
  10. css实现旋转的小箭头