您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

为了让你在网易云听一首歌,后端工程师都做了什么?

时间:2020-08-20 12:46:48  来源:  作者:

网易云音乐这3年经历了用户量的爆炸式增长,作为一款口碑爆棚的音乐社区App,在业务快速发展的背景下,后端的架构又经历了怎样的发展历程呢?

 

本文回顾了一个大型互联网应用的后端发展历程,其中涉及到的一些技术内部基本有自研的替代品,出于通用性考虑替换成了相应的开源产品。

 

本文的读者对象假设已经具备一定计算机基础,如果你希望了解一个亿级用户互联网应用的服务端会涉及到哪些技术,那么请继续读下去吧~

 

从听一首歌说起

故事从你打开网易云音乐的APP,点开一个歌单听歌开始。那么为了满足你听歌的简单愿望,我们的服务端攻城狮们都做了些啥呢?

为了让你在网易云听一首歌,后端工程师都做了什么?

 

你点开歌单,发起了一个HTTP请求,为了响应你的请求,我们搭建了一台服务器运行服务端程序,我们选择免费开源的linux+Tomcat

为了让你在网易云听一首歌,后端工程师都做了什么?

>> 企鹅和猫啥时候成搭档了

为了编写服务端程序,需要一种编程语言和服务端编程框架,我们选择了业界流行的JAVA+Spring/SpringBoot

为了让你在网易云听一首歌,后端工程师都做了什么?

>> 喝着咖啡就把代码写了,码农的春天来了

 

我撑不住了

服务器有了,代码也写好了,现在我们可以开始服务不同用户的各种请求了。有一天你发现突然歌单打不开了,歌也听不了了,看上去服务器挂了。我们的工程师紧急联系PE发现服务器的load很高,CPU、内存、网卡都吃紧,看上去是我们的热心用户太多,服务器容量已经撑不住了。

经过这件事之后,大家一致觉得只有一台机器太不靠谱了,晚上都没法踏实睡觉。单台服务器无法支撑日益增长的业务请求,CPU、内存、网卡都到了瓶颈,而且一旦挂了就形成单点故障,影响服务的可用率,这时我们又添了几台机器搭建成集群,通过分布式集群来实现业务的平滑扩展。

为了让你在网易云听一首歌,后端工程师都做了什么?

>> 脑补的分布式集群

太费资源了吧

服务器越来越多,如果一个物理机只运行一个服务端进程,资源无法得到充分利用,这时我们引入虚拟化技术(KVM,Docker)在一台物理机上运行多台虚拟机,每个虚拟机共享底层的物理机资源(CPU、内存、网卡、硬盘),将物理资源进行虚拟化按需分配,这就是云计算

为了让你在网易云听一首歌,后端工程师都做了什么?

 

业务稳步增长,机器越来越多,我们发现每天中午和晚上是用户活跃的高峰期,机器的load会随着升高,其他时间段则是低谷,机器则比较空闲。不同的请求量对服务器的资源配置提出了不同的要求,如果高峰期可以自动扩容,低峰期自动缩容,就可以实现资源的最大化利用,避免浪费,这时我们需要生产级别的容器编排系统(K8S)。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

负载均衡

用户操作客户端时实际上是向指定的域名(music.163.com)发起HTTP调用,这个时候需要去DNS服务器查询域名对应的服务器IP,为了对外暴露统一的IP,实现后端服务器的负载均衡,我们在客户端和后端服务器间加入了一层反向代理(Nginx),如此一来所有的服务端API都通过Nginx来转发,服务的扩容可以只用修改Nginx增加内网机器IP就行。

为了让你在网易云听一首歌,后端工程师都做了什么?

>>Nginx相当于一个统一的出口代理

业务快速发展,接口爆炸式增长,每次上线都配置Nginx不仅繁琐,而且容易带来稳定性隐患,此时迫切需要一个API网关来统一收拢所有的API注册和露出。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

 

数据存哪儿?

用户开始使用我们的服务之后,存储用户的各种数据需要数据库,除了关系型数据库(MySQL),还有各种NoSQL数据库(Hbase,MongoDB)。随着数据容量的不断增长,单机数据库已经无法满足需求,这时自带分库分表的分布式数据库就开始派上用场了。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

写数据库的增删改查代码比较繁琐,需要一个ORM框架(Mybatis)来实现对象和关系型数据库之间的映射,这样读取数据的时候,每一行数据都可以映射成内存中的一个对象,存储数据的时候每个对象又可以映射成数据库的一行数据。

用户量增加后,大量日常的文件存储(如用户头像、朋友圈图片)需要一个统一的文件存储中心,这时我们用上了分布式对象存储平台

 

性能不行?缓存来凑

开放数字专辑售卖功能之后,我们发现用户的购买热情非常高,为了应对高并发大流量,减轻数据库的压力,我们引入分布式缓存(Memcache,redis)来抗一部分流量,避免数据库宕机。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

解耦神器,非你莫属

为了避免业务的上游和下游强耦合,实现调用异步化,或者应对突发流量,实现业务的削峰填谷,我们用到了消息队列(Kafka,RabitMQ,RocketMQ),将上游业务消息缓存到队列中,由下游业务异步消费。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

分解巨无霸

业务快速发展,团队也在扩张,原有的巨无霸单点应用部署已经越来越制约业务的快速迭代和多人协同开发。为了避免单点,实现业务模块的去耦合和故障隔离,我们开始了服务化拆分进程。

我们将原本部署在一个进程中的代码拆分到多个进程放到不同的集群中运行。服务化拆分之后相互之间调用不再是一个进程内调用,而是需要跨进程网络调用,这时需要注册中心RPC框架来实现服务的注册、发现及跨进程调用。引入RPC框架之后,为了方便监控和在线调整线程池参数,又开发了RPC管控平台实现动态管控。

 

排查问题

随着服务拆分的深入,用户的一个请求可能会经过几个甚至几十个服务,如何定位问题出现在哪个服务,以及查看各个服务的链路耗时,这时需要一个链路跟踪系统。服务拆分之后,根据重要程度对服务进行定级(P级),为了保障核心应用的稳定性和可用性,引入了限流熔断降级框架,可以实现应用网关层的全局限流和单机限流和降级。

线上服务越来越多,机器越来越多,日志分散,可检索性差,为了统一的日志查询,方便及时定位问题,需要一套日志平台(ELK)。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

团队开发

业务越来越复杂,团队开始爆炸增长,需求迭代相互交织,开发、回归、预发、线上环境管理越来越复杂,此时迫切需要一个持续集成平台管理环境和机器的自动分配、任务排期和发布计划。

为了实现前后端同步开发,接口的定义要优先于接口的开发,这时我们开发了一个接口管理平台来达到事前约束的目的。前后端开发可以愉快地协同开发了。测试同学也可以利用平台管理测试用例,接口覆盖率得到了极大的提升。

 

看好你的报警

线上接口越来越多,各种异常满天飞,有些需要关注,有些可以忽略,这时我们需要一个异常报警平台,根据服务将报警通过各种渠道通知到负责人。

随着业务模型越来越复杂,老旧的架构开始腐化,链路也变得越来越脆弱,线上事故频发,9999的可用率无法得到保证,这时我们需要进行架构梳理和全链路压测,针对性地进行故障注入,全链路压测平台故障注入平台应运而生。

 

终极之路

随着用户量的数量级升级,单个机房的集群部署稳定性风险越来越高,可能光纤被挖断或者机房断电之后,服务就全部挂了,带来的损失不可估量。这时,同城双机房异地多活单元化就提上了议事日程。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

终于,服务的稳定性得到了极大提升,你可以放心地听歌了。好了,不多说了,我又来了一沓新需求。

下面是一张时间轴,展示了后端基础设施发展的整个历程,囊括了企业基础设施、基础运维设施、研发提效设施、中间件基础设施、测试基础设施、大数据基础设施等六大基础设施。

为了让你在网易云听一首歌,后端工程师都做了什么?

 

后记:

本文中涉及到的绝大部分技术方案都已经在内部落地,有一些还在进展中,不过相信很快就可以应用到生产环境。学无止境,勉励自己在后端技术之路能越走越远,成为一个懂业务的技术专家。

 

来源:网易工程师-王胜


整理总结不易,如果觉得这篇文章有意思的话,欢迎转发、收藏,给我一些鼓励~

有想看的内容或者建议,敬请留言!

最近利用空余时间整理了一些精选Java架构学习视频和大厂项目底层知识点,需要的同学欢迎私信我发给你~一起学习进步!有任何问题也欢迎交流~

Java日记本,每日存档超实用的技术干货学习笔记,每天陪你前进一点点~



Tags:网易云   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
中国音乐市场近年来的历史,是一部版权争夺史。随着版权价值显现,“独家授权”成了音乐平台开疆拓土的关键。仅仅数年,水涨船高的版权费令市场格局重组,玩家越来越少,资源向少数头...【详细内容】
2021-10-18  Tags: 网易云  点击:(36)  评论:(0)  加入收藏
网易云中新增了很多功能和模式,但是有很多是我们正常听歌使用不到的功能,还会造成打开时的卡顿,所以很多用户想要关闭这些多余的功能,其中很多用户想要关闭网易云音乐的云村推荐...【详细内容】
2021-09-08  Tags: 网易云  点击:(281)  评论:(0)  加入收藏
天眼查App显示,8月24日,杭州网易云音乐科技有限公司申请公布“音乐社交实现方法、装置、存储介质及电子设备”发明专利,公布号CN113296669A,申请日期为2021年6月。专利摘要显示,...【详细内容】
2021-08-24  Tags: 网易云  点击:(92)  评论:(0)  加入收藏
一个平常的工作日晚上,筱佳和往常一样打开抖音,打算好好放松一下心情。过了几分钟,由于所看视频的背景音乐都是那几首热门“神曲”,越刷越烦的筱佳很快就关掉了APP。流量大的去...【详细内容】
2020-12-25  Tags: 网易云  点击:(160)  评论:(0)  加入收藏
前言:最近点赞了一些文章,觉得有些东西是我还没有接触过的,于是打算复刻一次,但是用我的思路,加上一些新的想法,最后我也是成功实现了这些功能。 就和标题一样,这次打算解析一下 网...【详细内容】
2020-09-23  Tags: 网易云  点击:(59)  评论:(0)  加入收藏
环境准备:1.火狐浏览器:78.0.2 (64 位)2. python语言:3.83.pycharm编辑器:PyCharm 2020.1.2 x641.打开网易云音乐搜索“可不可以”这首歌 2浏览器按下“F12”,鼠标选中到“网...【详细内容】
2020-09-23  Tags: 网易云  点击:(127)  评论:(0)  加入收藏
MyRocks是完全兼容MySQL的一个关系型数据库系统,由Facebook于2016年下半年开源,网易杭研数据库内核团队在2018年初引入,在网易云音乐某些业务场景落地使用,取得了较好的效果,在这...【详细内容】
2020-09-11  Tags: 网易云  点击:(118)  评论:(0)  加入收藏
网易云音乐这3年经历了用户量的爆炸式增长,作为一款口碑爆棚的音乐社区APP,在业务快速发展的背景下,后端的架构又经历了怎样的发展历程呢? 本文回顾了一个大型互联网应用的后端...【详细内容】
2020-08-20  Tags: 网易云  点击:(111)  评论:(0)  加入收藏
本文将教大家用Python中基于模型的协同过滤构建推荐系统,这种推荐系统经常被用于音乐、视频网站等。推荐系统广泛应用于音乐、电影、书籍、新闻、研究文章、餐馆等产品的推荐...【详细内容】
2020-08-07  Tags: 网易云  点击:(93)  评论:(0)  加入收藏
实时音视频通话作为高效便捷的沟通手段在许多场景下得到应用。随着5G商用元年的真正到来,实时音视频通话将会得到更加蓬勃的发展。本次LiveVideoStackCon 2020线上峰会我们邀...【详细内容】
2020-07-10  Tags: 网易云  点击:(75)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条