近几年来,国内直播行业发展迅猛,网络直播平台也成为了一种崭新的社交媒体。直播火热的同时,也给直播平台的技术与架构带来了诸多挑战。作为行业领头人,斗鱼在架构上不断迭代、改造与优化,形成当前能支撑千万级用户同时在线观看的架构平台。在这个过程中,斗鱼的直播系统架构踩过哪些坑,演进出哪些特性呢?本文整理自斗鱼房间中台负责人彭友顺近日在TGO鲲鹏会武汉分会活动《大规模互联网系统架构设计与实现》上的演讲,内容如下。
目前斗鱼直播系统每天有20亿+的请求量,并且在今年3月份,PDD入驻斗鱼的时候还曾达到40万+的瞬时QPS,同时我们的服务增长到了上千实例的规模,在全国不同地区和不同机房进行了部署,提供给上百个内部业务方使用。总结下来,斗鱼直播系统有三个特点——流量大、服务多、架构复杂。针对这些问题,要确保整个系统的高性能和高可用,对于我们的技术开发团队来说也是一个比较大的挑战。
高性能业务架构演进中的挑战与解决方案
三大挑战
早在5年前,我们和其他公司一样处于单体应用时期,主要使用“Nginx+PHP+Memcache+MySQL”,当时遇到最大的一个问题,是如果一个用户进入到直播间访问Memcache的时候,如果刚好Memcache里面缓存数据失效了,那么请求就会穿透到MySQL,会对服务造成很大的压力。
所以从2016年开始,我们将Memcache换成了Redis,将全量的直播间的数据缓存到Redis的内存缓存,解除服务对MySQL的直接依赖,同时还做了一些业务隔离:将业务进行了垂直拆分。保证了那个时期的服务稳定。
但是随着斗鱼体量的日益增长,请求量越来越大,我们没想到Redis也会成为一个新的瓶颈。所以从去年开始斗鱼着手对系统做了一些改造,将PHP换成了Golang,然后在我们Golang里面做了一些内存缓存池和Redis连接池优化,经过这一系列的改造,目前斗鱼的直播系统无论是在性能上还是可用性上都有很显著的一个提升。