千万级用户直播APP——服务端结构设计和思考
以下内容根据演讲PPT及现场分享整理。
直播行业是今年最为火爆的行业,作为新兴的产品形态,直播产品最大的特点是:快。推流速度足够快,主播通过移动端快速推流,用户能快速看到直播场景,延迟需要足够低,而且移动端类型十分复杂、种类繁多,这是一个很大的挑战;首帧加载速度要足够快,用户打开直播页面时,能立即观看画面;支付也需要足够快,用户给主播送礼物时,保证直播时的互动效果;录制、转码、存储都需要足够快。
那么一直播是如何在短短半年内应对这些如此之快的要求呢?下面从业务结构、缓存、互动、调度四个方面为你揭开秘密。
业务结构——集群+模块化
一个优秀的互联网项目架构至少应该做到两点:第一点模块化拆分;第二点资源分层。将一个复杂的系统拆分成N个小系统,之后再对小系统进行功能优化。如上图所示,一直播平台架构的最前端是安全防护接入层,用于系统的安全防护;此后是URL路由,将流量从入口通过负载均衡按照用户请求URL下发到不同的模块上,再导流到后端不同的集群上,从源头上进行分流;URL路由之后是接口层,将后端的服务、功能模块的接口进行整合,之再后提供给前端用户。
下面具体看一下每个模块的功能与结构。
路由调度
目前,一直播平台中采用二级域名+分层目录路由的方式进行URL分层,如member层、评论层、直播层等一级目录直接下发到不同集群上;二级目录做成对外的接口,如API、OpenAPI、Web层,再将其划分到内部接口、外接口或H5、PC上;第三层目录是真正处理的业务逻辑。
这样分层处理之后,后期的分集群优化就变得十分简单。
模块化拆分
前端进行URL分层之后,后端需要按照业务功能进行模块拆分,将复杂的功能拆解,例如将用户系统拆解成一个独立的用户服务,再将用户服务拆分成用户注册、用户中心、关注关系等。模块化拆解之后,单模块资源共享,无交叉影响;同时,还可以将核心业务与非核心业务分开,核心业务放在核心资源池内,在突发流量到来时,可以优先保证核心业务的可用性,非核心业务进行降级或者关闭处理;此外,消息队列异步持久化,如图中所示的用户、缓存的后端持久化都是相互独立的,保证消息响应速度。
资源分层治理
接下来看一下资源分层治理,整个系统按照功能模块拆分后,各种资源分层之后,后期的资源治理就变得十分简单。在接入层,搜集全部日志资源,对所有的请求做分析,便于后期监控、数据分析等处理;在接口层,用户请求进来之后,下发到不同的接口集群上,接口集群对后端的服务进行组合封装。接口层承载了大量的压力,在预知大的活动发生前,可以在该层人工或系统自动扩容一批机器,例如在赵本山直播前,在该层将机器的数目增加一倍。服务层是真正的业务处理层,它包含了业务处理、缓存、数据持久化。服务层下侧是缓存和持久化层,之所以将二者分开,是因为缓存在互联网架构中的重要性不言而喻,在突发流量到来时,缓存至少可以承载系统80%-90%的压力。
数据库
一直播架构中按照模块、功能划分数据库,不同的数据库再分配到不同的物理机上,并非整个项目共用数据库。由于绝大数应用读远远大于写,因此,在该场景下可以对数据库进行读写分离,如Master-Slave、MySQL等方式;同时对数据库进行水平、垂直拆分。
缓存——多级缓存之演变
基本的缓存模型如上图所示,服务层直接调用后端的缓存集群,但在一直播架构中增加了本地缓存。当某一大明星的直播开始时,在极短的时间内大量的粉丝会同时涌进一个直播间,此时主播的热度是非常高的,如果将全部请求都导入后端集群,势必给后端集群带来非常大的压力。当大量数据在短期内变化不是特别大时,可以在前端的业务层上本地缓存(可以采用Memcached、Reids等方式),通过在本地缓存3-5秒就可以承受80%-90%系统压力,瞬间化解后端缓存集群的压力。
在缓存中,还有一点需要注意的是:重点数据单独布署。如果对所有的集群全部按照第二种方式搭建,成本势必很高。由于大量的主播访问量并不是很高,如果进行主从部署时也会导致资源的大量浪费,因此对于大明星、网红等重点主播的Key可采取单独部署的方式,以节约资本。
互动——百万在线聊天室搭建
谈到移动直播,互动必然是绕不开的话题。移动直播聊天室和传统的聊天室不同,他主要具有以下几个特点:
用户集中在热点直播间
热点直播消息量巨大
消息实时性强
用户进出直播间随机性大
刘烨和本山大叔的直播,单个直播间有百万级别的用户实时在线聊天、送礼互动。
那么支撑如此庞大用户的聊天室架构是如何设计的呢?如上图所示,一直播的聊天室架构主要分为接入层、路由层,其中接入层又分为连接保持层和业务逻辑处理层。通过在接入层保持用户的连接;路由层进行消息中转;业务层对接入层传入的消息进行处理。该架构需要保障可用性、扩展性和低延迟,首先接入层需要扩展,因为接入层需要挂在全平台在线的用户,所有消息的下发都是通过接入层处理;在路由层,消息量反而减小。
-END-
欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。
本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。
长按下方的二维码可以快速关注我们
如想加群讨论学习,请点击右下角的“加群学习”菜单入群。
千万级用户直播APP——服务端结构设计和思考相关推荐
- 网易实践|千万级在线直播弹幕方案
导读:8月22日,TFBOYS「日光旅行」七周年演唱会落下帷幕,顶级流量的在线直播,海量弹幕.礼物刷爆屏幕,网易云信为这场直播活动提供直播弹幕技术方案.本文将围绕千万级在线场景阐述直播弹幕的设计方案. ...
- 如何保障一场千万级大型直播?
导读:TFBOYS"日光旅行"七周年演唱会近日成功举办,最高同时在线人数达78.6万,口碑票房双丰收.网易云信的大型直播解决方案全程支撑了网易云音乐的这场活动,本篇文章将和大家分享 ...
- 千万级用户产品更名为“亿图脑图 MindMaster”背后:脑图软件市场高速增长
东尼·博赞发明思维导图导图时,大概没想到思维导图会变得如此受欢迎.数据显示,全球范围内,约有6亿人使用思维导图这一工具,其用户涵盖众多领域,包括企业家.政府.公司.学术机构等. 而作为一款功能全面的专 ...
- 千万级用户的Android客户端是如何养成的
声明:本文来自「七牛云主办的架构师实践日--亿级移动应用架构最佳实践」的演讲内容整理.PPT.速记和现场演讲视频等参见"七牛架构师实践日"官网. 嘉宾:阿刘,in技术专家. 责编: ...
- 【测试专场沙龙报名】千万级日活App的质量保证
美团技术沙龙由美团技术团队和美团科协主办,每期沙龙邀请美团及其他互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域. 活动时间:2018年9月15日 下午 13:30 - 17:30 活动 ...
- 汽车之家移动主App服务端架构变迁
声明:本文为<程序员>原创文章,未经允许不得转载,更多精彩文章请订阅2016年程序员:http://dingyue.programmer.com.cn/ 导语:汽车之家移动主App服务端架 ...
- 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
在移动开发中,对开发者来说不同的人具有不同的能力.就像读一本书一样,一千个读者,有一千个哈姆雷特.但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理.Andro ...
- 如何估算代码量_千万级用户的大型网站,应该如何设计其高并发架构?(彩蛋)...
目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用分布式缓存抗下读请求 (7)基于数据库主从架构做读写分离 (8)总结 本文 ...
- 如何部署搭建app服务端运行环境(java)?
简介: app服务端和web的服务端的配置是一样的.所以要搭建APP根据web服务端配置即可. 前言:app服务端和web的服务端的配置是一样的.所以要搭建APP根据web服务端配置即可. 1.购买服 ...
- 如何打造一个抗住千万级流量短信服务(续)
前言 在之前写过一篇博文<短信服务设计>当时讲述了设计的思路,有很多读者朋友反馈说想了解具体的设计思路:今天又重新回顾下当时的具体实现细节发现当时实现的还是有一些巧妙的地方,值得大家参考, ...
最新文章
- 面试了一个 46 岁的程序员,我思绪万千!
- android file.createnewfile ioexception
- linux下的临时文件在哪,linux – 如何找出创建临时文件的内容
- 阿里资深技术专家崮德:如何成就更好的自己
- 面向服务的分析与设计原理
- 【 Grey Hack 】加强版nmap
- 济源一中2021高考成绩查询入口,济源一中2019高考成绩喜报、一本二本上线人数情况...
- 分享一个免杀的netcat.exe
- 在 RAID 磁盘上面架构 LVM 系统
- 下载百度网盘资源不限速的两种方法
- CE实现植物大战僵尸后台运行
- 开发中PG,PL,SE,PM都是什么意思
- 淘宝商品详情APi接口(原数据APP、h5)
- 华为运维客户端SeoClient接收返回码错误
- Facade模式框架源码
- 蜗牛爬墙墙高10米C语言,蜗牛爬墙——打破小朋友的数学思维模式
- 《Unity着色器和屏幕特效开发秘笈》—— 第3章 利用镜面反射让游戏闪耀起来...
- XML Publisher介绍
- IDEA创建Maven项目
- 沙特CB认证如何申请,流程怎样
热门文章
- Android实现“是否退出”对话框和“带图标的列表”对话框
- Hosts Setup Utility – 在线更新 hosts
- js a/a中this的使用
- 微软2011 GCR MVP Open Day 之旅!
- We7开通问答系统:进一步开发社区的力量
- 本人译著《Professional Xcode 3》现已翻译完毕
- poj 2828 Buy Tickets 线段树!!!
- Rad Controls_Q2_2006 注册机
- JavaScript30秒, 从入门到放弃之Array(七)
- 南京IT企业环境之最深心得体会