截止2019年二季度,网易云音乐用户数已经突破8亿,成为最活跃的音乐社区,位居在线音乐行业第一阵营。
相信大家或多或少都使用过网易云音乐,不知道有没有人跟我一样,在云音乐听歌的时候喜欢打开评论看一看,有时发现评论比歌曲还精彩!
话不多说,今天就带大家对网易云音乐评论技术进行一番探秘,其中很多场景的实现方法可以应用到大部分互联网系统。
该专题分为上下两篇,本文(上篇)主要讨论以下两个主题:
-
了解云音乐评论的业务场景
-
熟悉云音乐评论的基础架构
云音乐评论的业务场景
首先最常见的就是歌曲评论,每一首歌都有单独的评论区;第二就是歌单评论,第三块是网易云音乐新的社交场景——动态,然后还有电台,在电台详情里面也可以看到评论区。
以上只是云音乐里面出现评论的冰山一角,可以说评论在云音乐里面是无处不在,上述出现的场景比如歌曲、歌单、动态、电台等等我们统称为「资源」,云音乐要求评论可以支持所有资源,并且具备快速扩展和接入新资源的能力。
然后我们再来看以下图片,第一个红框我们可以看到评论需要支持计数;
第二个红框可以看到评论的显示方式,默认是推荐的评论,即按照特定的规则将精彩的评论在顶部呈现给大家,还可以按照最热或最新进行排序显示;
第三个红框我们可以看到评论回复模块,即在评论之上可以进行回复,支持二级评论列表。
业务场景简单总结如下:
- 中台化(简单理解即对不同业务提供复用的能力)
-
支撑云音乐所有资源,包括歌单、歌手动态、音乐电台等
-
具备快速扩展和接入能力多样性
-
- 多样性
- 功能多样(精彩热评,个人评论页,评论盖楼等等)
- 规则复杂(按赞数排序,按时间排序,按优先级排序等等)
- 高并发
- 复合场景峰值QPS 2W+
- 随热门资源和热门事件产生高并发
云音乐评论的基础架构
接下来我们来了解一下云音乐的基础架构,从上面的逻辑架构图可以看到,从下往上依次是:
- 数据存储层:采用MySQL数据库,但不是简单的MySQL单点或者主从模式,而是MySQL分布式集群,使用数据库集群有两大好处,一是可以承载更多的数据量,二是可以提供更好的性能,因为有多节点可以同时提供服务,数据库负载能力可以水平扩展。
- 数据缓存层:虽然使用了分布式数据库,但数据库能直接承载的并发请求还是非常有限的,无法直接承载线上那么高的QPS,因此在数据库之上采用Memcached做了一层数据缓存(无业务逻辑,与数据库表一一对应)
- 应用业务层:在数据缓存之上是应用服务,从图中可以看到该层是评论的主要业务逻辑处理层,按模块功能进行不同微服务拆分
- 应用缓存层:除了数据缓存层,云音乐还会在应用业务层之上使用Redis再构建一层缓存,应用缓存层的数据是经过了复杂的业务组装之后聚合而成,是可以直接返回给前端的
- 网关层:网关层可以理解为云音乐后台的统一请求入口,并为云音乐评估提供基础通用的全局能力,具体下文会细说
- 客户端:最上层即客户端层,即用户终端层
网关层
接下来详细说一下云音乐的网关,其最基本的作用就是请求路由。
如上图所示,用户请求在经过Nginx之后正常就可以直接进入后台服务,但云音乐在这里加入一层网关,将Nginx的所有请求都先打到API网关上面,然后API网关采用RPC或服务注册发现的方式调用下层应用,那网关在这里的作用是什么呢,具体有以下几点:
-
适应微服务发展
-
Nginx变更重启时对服务可用性有损,有了网关之后新应用上线无Nginx变更
-
网关与下层应用通过服务注册发现,应用服务可以实现自动化扩缩容
-
网关可以提供灵活分发机制,为同城多活、异地多活提供基础能力
-
-
建立了全局能力
- 服务注册与发现
- 限流与降级
- 鉴权
- 异常监控
- 服务治理
有了网关层,可以避免将流量监控、服务降级、应用限流等基础功能下沉到各个应用服务去实现,各业务团队可以专注业务功能开发,然后统一接入网关,这就是网关全局能力的体现。
数据存储/缓存层
如基础架构图所示,云音乐的特点之一是数据量庞大,而且新增数据量也很庞大。
采用网易杭州研究院出品的分布式关系型数据库提供了两大能力:一是支持海量数据存储,二是支持水平扩展。
云音乐评论数据的另一特点是读远远大于写,在此场景下使用缓存可以保证缓存有较高的命中率,否则请求经常会穿透缓存打到数据库,使得架设缓存的意义不大。
接下来看一下缓存设计:
缓存分多层级,从前到后依次是客户端(iOS/安卓)缓存,这里更多的是为服务降级考虑,防止服务端临时不可用时给客户造成太差的客户体验;
接下来是服务器本地缓存,将少量最热门的数据缓存在服务器本地,可以提供更好性能的同时缓解下层压力,但缺点是容量比较小;
最后是分布式缓存,可以提供集群化部署和弹性扩缩容;可以看到不同层级的缓存的作用不一样,各有优势,在不同场景下发挥不同作用。
当然使用缓存提升性能的同时,也会带来一些问题,提高系统设计和实现复杂度,常见的缓存问题比如缓存雪崩、缓存穿透、数据一致性等,这个在下一篇会细说。
以上就是云音乐评论的业务场景和基础架构,下一篇将围绕云音乐评论的核心功能,对功能如何实现以及为什么要这么实现来进行探秘,欢迎继续关注。