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


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

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

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

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

云音乐评论的业务场景

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

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

业务场景简单总结如下:

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

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

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

  • 多样性

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

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

  • 高并发

    • 复合场景峰值QPS 2W+

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

云音乐评论的基础架构

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

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

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

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

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

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

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

网关层

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

  • 适应微服务发展

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

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

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

  • 建立了全局能力

    • 服务注册与发现

    • 限流与降级

    • 鉴权

    • 异常监控

    • 服务治理

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

数据存储/缓存层

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

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

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


 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值