微博短视频千万级高可用、高并发架构如何设计?

 

作者:刘志勇,本文来自新浪微博视频平台资深架构师刘志勇在 LiveVideoStackCon 2018 讲师热身分享,并由 LiveVideoStack 整理而成。

本文从设计及服务可用性方面,详细解析了微博短视频高可用、高并发架构设计中的问题与解决方案。

 

今天与大家分享的是微博短视频业务的高并发架构,具体内容分为如下三个方面:

  • 团队介绍

  • 微博视频业务场景

  • “微博故事”业务场景架构设计

 

团队介绍

 

 

640?wx_fmt=png

我们是隶属于微博研发部视频平台研发部门的技术团队。平台研发是微博的核心部门之一,包括大家熟知的微博视频在内的微博所有核心业务的基础平台架构、用户关系体系等都依赖微博平台研发部门的技术支持。

我们的团队主要负责与视频相关的上层业务也就是视频微博、“微博故事”以及短视频和直播,其中直播包括常规的直播与直播答题等新玩法。

同时我们还负责底层视频平台的架构搭建,包括文件平台、转码平台、配置调度中心与媒体库。

我们致力于用技术帮助微博从容应对每天百万级的视频增量与其背后多项业务的多种定制化需求。

 

微博视频业务场景

 

 

640?wx_fmt=png

我们的业务场景主要是应对热门事件的流量暴涨,例如明星绯闻、爆炸性新闻等势必会让流量在短时间内急剧增长的事件。

 

如何从架构上保证流量暴涨时整体平台的稳定性?如果只是简单地通过调整服务器规模解决,流量较小时过多的服务器冗余带来成本的浪费,流量暴涨时过少的服务器又令平台服务处于崩溃的边缘。

 

比较特别的是,我们面临的问题与诸如“双十一”这种在某一确定时间段内流量的可预见式高并发有着本质的不同,我们面临的流量暴涨是不可预见的。因此通过哪些技术手段来妥善解决以上问题,将是接下探讨的重点。

640?wx_fmt=png

以上是基于微博的过去已经公开数据量级,非近期内部数据。微博视频是一个多业务接入的综合平台,你可以在微博上看见现在市面上的各种玩法。

这就导致我们即将面临的并不是某个垂直业务领域的命题,而是一个构建在庞大体量下的综合性命题,这就导致现有的通用技术框架无法妥善解决我们所面临的难题。

因为一些开源方案无法顺利通过技术压测,所以我们只能在开源方案的基础上进行自研与优化才能得到符合微博应用场景需求的技术解决方案。

640?wx_fmt=png

微博的短视频业务被称为“微博故事”,上图展示的是“微博故事”的展现形态。这是一个布置在微博首页一级入口上的模块,主要展示的是用户关注的人所上传的 15 秒内的短视频。

 

我们希望强调其“即时互动”的属性,视频只有 24 小时的有效展示时间。不同用户的视频按照时间轴在上方排序,多个视频可依次观看、评论、点赞等。

 

“微博故事”业务场景架构设计

 

微服务架构

 

 

640?wx_fmt=png

上图展示的是这项业务的微服务架构:在接口层我们混布了 Web API 与内部的 RPC 请求。

在这里我们并未集成具有实际意义的门面层,而接下来的服务层集成了许多微服务,每个微服务集中在一个垂直功能上并可对外提供接口,这里的门面层主要作用是聚合一些微服务并对外提供综合性接口。

除此之外还有一些依赖服务例如用户关注、也需要依赖于其他部门的 RPC 服务;最后的存储层则是集成了 Cache 与 db 的标准方案。

 

 

技术挑战

 

 

640?wx_fmt=png

有人曾问到:微博短视频业务的高并发有多高?假设我关注了 500 名好友,如果有好友发布一个视频就会在“微博故事”头像列表上显示一个彩圈用以提示我去观看。

 

如果我想知道自己所有关注的 500 个人所发的视频内容,假设首页每秒刷新十万次,那么需要每秒钟五千万的 QPS。

 

除此之外我们还需要确定视频是否过期、视频发送顺序等,实际的资源层读取量将远远高于五千万。

 

方案比较

 

 

640?wx_fmt=png

在构建解决方案时我们思考:可以借鉴微博之前的 Feed 解决方案,我们不会进行无意义的重复性工作与思考。

 

即使短视频与 Feed 都具有首页刷新与关注人发布消息聚合的特点,但以用户列表为形式,强调进度续播与即时互动的短视频和以内容列表为形式,强调无阅读状态与永久保存的微博具有本质的区别。

 

面对一般的 Feed 应用场景可以使用以下两种模型:

  • Feed 推模型

  • Feed 拉模型

 

①Feed 推模型

640?wx_fmt=png

Feed 推模型是指将用户上传发布的内容推送至每一位粉丝,这种方案具有很大的弊端。由于用户尚未达成一定规模,早期的微博以 Feed 推模型为主导。

 

而现在一个大 V 用户的粉丝数量普遍都是千万级别,如果依旧使用 Feed 推模型则意味着千万量级的内容推送,在难以保证千万份推送一致性的情况下,势必会为服务器带来巨大压力。

 

微博的业务强调的就是强时效性下的内容一致性,我们需要确保热点事件推送的瞬时与一致。

 

除了从技术层面很难确保千万级别内容推送的时效性与一致性,由于用户上线状态的不统一,为离线的用户推送强时效性的内容无疑是对服务器等资源的巨大浪费,为了避免以上麻烦我们必须改变思路。

 

②Feed 拉模型

640?wx_fmt=png

640?wx_fmt=png

Feed 拉模型:拉取关注的人并实时查询状态及内容。综合微博的庞大用户体量、数据写入开销与确保一致性三方面,我们决定选择 Feed 拉模型。

640?wx_fmt=png

如何通过 Feed 拉模型应对如此规模庞大的 QPS?首先我们采用了分布式缓存架构,在缓存层集成了数据分片并将缓存通过哈希算法合理分片,之后再把缓存去切片化并进行存取。

 

分布式缓存架构

 

 

640?wx_fmt=png

其次我们使用了独有的多级缓存方案也就是 L1、 Master 、Slave 三层缓存方案。

L1 是一个热度极高容量极小的缓存,我们称其为“极热缓存”,其特点是便于横向扩展。

假设 L1 只有 200MB 缓存,我们使用 LRU 算法通过热度分析把访问最热的数据存储在 L1 中;之后的 Master 与 Slave 的缓存空间则是 4GB、6GB,比 L1 大很多倍。

因为微博的流量比较集中于热点事件中某几位明星或某个新闻,小容量的 L1 可进行快速扩容;在发生热门事件时利用云的弹性自动扩容从而分担热点事件短时间激增的流量压力。

由于自动扩容时 L1 仅占用每台缓存中很小的空间,扩容的速度就会非常快,通过这种手动或自动的瞬间弹性扩容来确保服务器稳定承受热点事件背后的数据激增量。

第二层的 Master 与 Slave 具有比 L1 大好多倍的缓存空间,主要用于防止数据冷穿。

虽然 L1 主要承担的是热点数据,但却无法确保一些短时间内不热但在某个时间段热度突然高涨所带来的流量短时间爆发时服务器的稳定性。

 

HA 多机房部署

 

640?wx_fmt=png

而 Master 与 Slave 作为 L1 的逻辑分组可有效防止数据过冷,在这里我们采用的是 HA 多机房部署。

 

例如图中的的两台 IDC,我们称左边为 IDC-A,右边为 IDC-B。缓存层的 Master 与 Slave 是主从同步的关系,双机房的缓存互相主从同步。

 

这里的“互相主从同步”是指 IDC-A 的 MC 与 IDC-B 的 MC 之间进行双向同步互为主从。

 

因为在进行双机房部署时需要均衡两个机房的流量负载,在缓存层需要使用 LRU 算法进行热度分析。

 

如果我们将流量分为两份并传输至两个机房,通过每个机房的 IRU 算法得到的热度信息有一定失真。

 

如果我们在缓存层做相互同步后每个机房的 MC 都是一个全量的热度算法,那么两个机房的 L1 基本可实现同步计算得出的热度信息一定是准确的,只有保证热度信息的准确无误才能从容应对流量激增与整个系统的高可用性。

 

在这里需要强调的是,实际上我们在选型上使用的是 MC 而未使用 Redis。

 

MC 对于纯简单数据 Key,Value 的抗量远大于 Redis;MC 采用预分配内存的形式放置 Key,Value,也就是把内存分成若干组相同数据区域,实际上就是若干个数组。

 

这种特殊结构使其在数据定位数组寻址与读写上的速度非常快;这种结构的缺点是:一旦缓存的数据出现变动就会出现即使内存留有空余但数据依旧无法存储的现象。

 

由于这种问题的存在,MC 不适用于存储变动大、Value 跨度大、业务多变的数据。

 

而 Redis 作为单线程方案,一致性更好,但在超大规模简单 Key,Value 读取上速度比 MC 是要差很多的

 

640?wx_fmt=png

除了上述方案之外,我们还采用了弹性扩缩容。实际应用中,基于成本的考量我们无法部署大量的服务器,于是我们采用了自研的 DCP 弹性扩缩容平台。

首先,我们的自有机房有一些共享机器资源可在特殊情况下动态弹性扩充以应对增加的流量压力。

当然,这部分机器的性能是有限的,当数据量超过一定阈值后我们就会接入阿里云并利用我们与阿里云的混合云 DCP 方式构建一层弹性软平台用于自动扩容承担流量压力。

除了弹性扩容我们同时也采用了定时扩容的逻辑,在每天晚高峰时段进行扩缩容从而确保整体服务的稳定性。之所以这么做,主要是为了在保证用户体验的前提下尽可能节约成本。

 

640?wx_fmt=png

需要强调的是,扩容对速度的要求十分严格。只有扩容的速度越快,流量峰值来临时可承受的数据量越大,才能确保整体服务的高可用,因而我们也在努力优化扩容的速度。

 

我们的 DCP 平台上也有晚高峰固定时段扩缩容与突发流量临时扩缩容,通过如流量监控等的自动化容量评估来判断服务器荷载,并通过自动化任务调度妥善解决突发流量对服务器的影响。

 

微服务熔断机制

 

 

640?wx_fmt=png

当然,为了保证服务器整体的健康与稳定,我们也在其中集成了微服务熔断机制,其原理类似于家用电表中的保险丝,可在过载的情况下迅速自动熔断。

系统会定期进行自我评估并确定每个服务的最大荷载,假设将熔断值定为 3000QPS,那么当 QPS 超过 3000、超时或异常时服务即会迅速熔断并关闭,从而确保其他资源的安全稳定。

通过这种框架级、细粒度的自动降级机制,系统失败隔离能力可被有效提高,避免了雪崩式的链式宕机事件的发生。在熔断的同时,自动扩容也会同步运行。

熔断之后系统会不断更新服务流量荷载,一旦扩容完成或者服务还能继续承受流量即可重新恢复工作,这种熔断机制同样也是为服务器扩容争取时间。

 

640?wx_fmt=png

 

福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

 

640?wx_fmt=jpeg

 

推荐阅读:

  • 面试官:你简历中写用过docker,能说说容器和镜像的区别吗?

  • C++、Python、Rust、Scala构建编译器的差异性究竟有多大?

  • 想换行做 5G 的开发者到底该咋办?

  • 如何在标准的机器学习流程上玩出新花样?

  • 独家 | Vitalik Buterin:以太坊2.0之跨分片交易

  • 华为“舵手”任正非

  • 滴滴章文嵩:不仅软件开源,还向学界开放数据

     


    真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三点估算pmp_【每日一练】PMP项目管理专业资格认证考试练习题(十)

听说99%的同学都来这里充电吖【习题】1.客户提出的一项需求,将变更项目范围。如果变更控制委员会批准需求,执行变更的成本将影响项目的预算。如果这项需求获得批准,项目经理应该考虑从下列哪一项储备中申请资金?A. 管理储备 …

我使用阿里云做直播,有什么手段保护直播安全?

摘要: 准备工作 开通阿里云直播服务:阿里云直播服务接收直播流,并提供直播播放地址,完成一场直播需要先开通阿里云直播服务,在 直播官网详情页 中单击 立即开通 ,开通阿里云直播服务。 如您已经能够使用阿里…

Activiti6 use spring-boot-starter-web meet requestMappingHandlerMapping error

解决方案: SpringBootApplication(exclude SecurityAutoConfiguration.class)参考链接:https://hub.alfresco.com/t5/alfresco-process-services/activiti6-use-spring-boot-starter-web-meet/m-p/125303

高级算法专家储开颜:无端不视频 阿里视频云三大端上技术能力

摘要: 阿里云拥有领先的云计算能力和丰富完善的基础设施,我们可以看到云上面的视频能力越来越强,我们可以在云端构建导播台、进行视频剪辑和个性化处理、极速转码、安全高效进行内容分发等等。而在储开颜看来,端也是很重要的一块。…

分布式精华问答 | 秒懂分布式与集群的区别

布式的处理方式越来越受到业界的青睐——计算机系统正在经历一场前所未有的从集中式向分布式架构的变革。今天,我们就来看看关于分布式的精华问答吧!1Q:什么是分布式系统?A:要理解分布式系统,主要需要明白一…

一张图看懂阿里云网络产品[二] 专有网络VPC

摘要: 一张图看懂网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 一张图看懂阿里云网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 系列文章持续更新中&…

终于!华为在欧盟注册新商标“Harmony”;亚马逊AWS宣布张文翊“新官上任”;甲骨文失去竞购100亿美元国防部云计算合同资格...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 谷歌打算推出名为“鞋带”&a…

一张图看懂阿里云网络产品【十】全球加速

摘要: 全球加速(Global Acceleration)是一款网络加速产品。依托阿里巴巴全球骨干网络,帮助您实现全球范围内的就近接入,减少延迟、抖动、丢包等网络问题对服务质量的影响,提升服务在全球范围的访问体验。

mysql 查看root_Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)

首先启动命令行1.在命令行运行:taskkill /f /im mysqld-nt.exe下面的操作是操作mysql中bin目录下的一些程序,如果没有配置环境变量的话,需要切换到mysql的bin 目录下执行如下语句。不然无效2.继续在命令行运行:mysqld-nt --skip-g…

2018年云栖社区值得订阅的11个精选技术期刊!

导语:近日,云栖社区全新推出垂直技术内容订阅平台,平台将以电子版周刊、月刊、每日导读等形式,为您呈现各垂直技术领域优质内容集锦。您只需通过一次简单订阅操作,即可定期接收到感兴趣的技术内容集锦。以下为你盘点20…

群聊金山云与英特尔的“AI as a Service”,你都get到了什么?

戳蓝字“CSDN云计算”关注我们哦!作者:刘晶晶针对用户需要优化传统云主机框架却无从下手的现实情况,金山云携手英特尔打造出了AI as a Service这种全新解决方案,据说能将软硬件优势很大程度发挥出来,如此“神仙级解决方…

一张图看懂阿里云智能媒体管理产品

摘要: 近日,阿里云发布了智能媒体管理(Intelligent Media Managemen)服务, 通过离线处理能力关联授权的云存储,提供便捷的海量多媒体数据一键分析,并通过该分析过程构建价值元数据,更…

场景化封装,一站式使用,普惠AI集成 ——阿里云发布智能媒体管理产品

摘要: 导语 近日,阿里云发布了智能媒体管理(Intelligent Media Management)服务, 通过离线处理能力关联授权的云存储,提供便捷的海量多媒体数据一键分析,并通过该分析过程构建价值元数据&#x…

mysql5.7.1.16出现[Err] 1146 - Table 'performance_schema.session_status' doesn't exist的解决办法

1.打开cmd,进入mysql的安装目录下的bin目录下。 执行mysql_upgrade -u root -p --force命令然后输入password,问题解决。

横跨2017-2018,云效Work Like Alibaba系列直播第五期盛大开启

摘要: 横跨2017-2018年直播,晚上20:00在云栖社区直播间和阿里巴巴技术专家一起,探讨像阿里巴巴一样高效跨企业项目协作,像阿里巴巴一样保障软件研发质量。 阿里巴巴内部是如何高效协同工作的?有哪些创新技术可以帮助企…

2019年技术盘点容器篇(四):来自京东云的技术问答 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦!作者:刘晶晶据相关调研机构出具的报告数据显示,目前应用容器市场规模将从2016年的 7.62亿美元增⻓到2020年的27亿美元。显而易见,引入容器所展现的巨大灵活性有效推动了其采用速率,使企…

第2篇:Flowable启动

接上一篇: 第1篇:Flowable简介 https://blog.csdn.net/weixin_40816738/article/details/102875266 文章目录Flowable启动一、Flowable部署包分析1.1. tomcat版本1.2. WAR版本二、Flowable部署包启动2.1. tomcat版本2.2. war版本2.2.1 启动flowable-idm2…

“视网膜”重装来袭 AI技术为视频业务场景赋能

摘要: 阿里云解决方案总经理刘澍泉在主题为《云转型之路》的演讲中讲到,人工智能已经进入到产业化的阶段,我们可以看到,人工智能和更多垂直化行业、和细节产业的结合。人工智能和视频云的技术结晶——“视网膜”视频云智能视频解决…

读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令

查询数据完整的查询指令:select select选项 字段列表 from 数据源 where 条件 group by 分组 having 条件 order by 排序 limit 限制select选项系统该如何对待查询得到的结果:1、all 默认的,表示保存所有的记录;2、distinct:去重…

Docker精华问答 | Docker镜像和Docker容器的关系?

毫无疑问,Docker成了近些年来最火热,甚至最具颠覆性的技术之一。国际上,所有泛云计算相关的公司,几乎都在某种程度上宣布支持并集成Docker。在2014年6月的DockerCon中,很多公司都分享了他们自己如何和Docker集成的故事…