如何设计一个 70w 在线人数的弹幕系统 ?

简介: 如何设计一个 70w 在线人数的弹幕系统 ?

背景


现在的抖音、快手等一系列能支持直播的软件如何做到的同一时间万人发弹幕的功能的?


问题分析


带宽压力;

弱网导致的弹幕卡顿、丢失;

性能与可靠性。


带宽优化


启用Http压缩

HTTP压缩是指在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩通常采用gzip压缩算法压缩HTML、JavaScript、CSS等文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点服务器的负担。

Response结构简化

不理解如何进行的Response结构简化,待我查阅归来!

内容排列顺序优化

根据gzip的压缩的压缩原理可以知道,重复度越高,压缩比越高,因此可以将字符串和数字内容放在一起摆放

频率控制

带宽控制:通过添加请求间隔参数(下次请求时间),保证客户端的请求频率服务端可控。以应对突发的流量增长问题,提供有损的服务。

稀疏控制:在弹幕稀疏和空洞的时间段,通过控制下次请求时间,避免客户端的无效请求。


弹幕卡顿、丢失分析


Long Polling via AJAX

客户端打开一个到服务器端的 AJAX 请求,然后等待响应,服务器端需要一些特定的功能来允许请求被挂起,只要一有事件发生,服务器端就会在挂起的请求中送回响应。如果打开Http的Keepalived开关,还可以节约握手的时间。

优点: 减少轮询次数,低延迟,浏览器兼容性较好。缺点: 服务器需要保持大量连接


WebSockets

Websockets定义为在servers和clients之间的双向连接。意味着servers和clients可以同时交流并发送数据。Web Sockets的重要一点是真实的并发和性能的优化。 在WebSocket API中,servers和clients只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。


总结


最终该服务在双十二活动中,在Redis出现短暂故障的背景下,高效且稳定的支撑了70w用户在线,成功完成了既定的目标。


目录
相关文章
|
SQL 存储 NoSQL
SQL vs. NoSQL:如何根据大数据需求选择合适数据库
【4月更文挑战第8天】本文对比分析了SQL与NoSQL数据库在大数据项目中的应用。SQL数据库适合结构化数据、强一致性和复杂事务处理,如金融系统,而NoSQL则适用于半结构化和非结构化数据、高并发及大数据场景,如社交网络。选择时应考虑业务需求、技术栈、团队经验和成本效益,以找到最佳解决方案。随着技术发展,NewSQL和Multi-model数据库也提供了更多选择。
737 0
|
自然语言处理 JavaScript API
Vue工具和生态系统: 什么是VuePress?
Vue工具和生态系统: 什么是VuePress?
179 3
|
消息中间件 算法 数据处理
深入Flink系列——watermark使用与源码详解
# 1 Flink时间体系 本节我们主要关注Flink的时间体系,包括Flink的时间语义、watermark机制及watermark的生成与传播原理,主要进行一些flink watermark理论知识的梳理。 ## 1.1 Flink的时间语义 Flink支持三种时间概念:EventTime/ProcessingTime/IngestionTime,即事件时间、处理时间、摄入时间。 ![imag
3269 0
深入Flink系列——watermark使用与源码详解
|
Java Maven
无法解析符号 ‘SpringBootApplication’
无法解析符号 ‘SpringBootApplication’
654 1
|
存储 C语言 C++
C语言实战演练之C语言满屏飘字表白代码
C语言实战演练之C语言满屏飘字表白代码
|
运维 监控 安全
【ELK入门】Elastic中文社区运维监控实战之架构篇
阿里云MVP曾勇撰写的《ELK运维监控入门实战》系列,以Elasticsearch中文社区网站运维监控体系搭建作为案例,讲解了ELK监控系统的相关原理和技术实现,可作为对ELK感兴趣的同学的入门级文章。本篇作为第一篇,介绍了项目背景和技术架构。
6741 0
|
自然语言处理 JavaScript 前端开发
LayUI之动态选项卡Tab&iframe使用
LayUI之动态选项卡Tab&iframe使用
640 0
|
网络协议 数据库 算法
带你读《HikariCP数据库连接池实战》之一:阿里中间件实战,第一个案例
本书不仅对市面上常见的连接池组件进行了全方位比较和分析,还以实战的角度深入介绍了高性能HikariCP连接池的使用、原理与维护。
3524 75
|
消息中间件 存储 Kafka
带你理解并使用flink中的WaterMark机制
提问:你了解事件的乱序吗?乱序是怎么产生的呢?在flink流处理中是以什么事件类型判定乱序的呢? 当一条一条的数据从产生到经过消息队列传输,然后Flink接受后处理,这个流程中数据都是按照数据产生的先后顺序在flink中处理的,这时候就是有序的数据流。
2257 0
带你理解并使用flink中的WaterMark机制
|
传感器 人工智能 监控