背景:

直播业务中增加弹幕系统,支持单房间百万用户同时在线。

问题分析:

带宽压力:
假如说每3秒促达用户一次,那么每次内容至少需要有15条才能做到视觉无卡顿。15条弹幕+http包头的大小将超过3k,那么每秒的数据大小约为8Gbps,而运维同学通知我们所有服务的可用带宽仅为10Gbps。
解决:
带宽优化:<1>启用Http压缩
<2>Response结构简化
<3>内容排列顺序优化:根据gzip的压缩的压缩原理可以知道,重复度越高,压缩比越高,因此可以将字符串和数字内容放在一起摆放
<4>频率控制
带宽控制:通过添加请求间隔参数(下次请求时间),保证客户端的请求频率服务端可控。以应对突发的流量增长问题,提供有损的服务。
稀疏控制:在弹幕稀疏和空洞的时间段,通过控制下次请求时间,避免客户端的无效请求。

弱网导致的弹幕卡顿、丢失
解决:<1>Long Polling via AJAX
客户端打开一个到服务器端的 AJAX 请求,然后等待响应,服务器端需要一些特定的功能来允许请求被挂起,只要一有事件发生,服务器端就会在挂起的请求中送回响应。如果打开Http的Keepalived开关,还可以节约握手的时间。
Long Polling via AJAX优点: 减少轮询次数,低延迟,浏览器兼容性较好。缺点: 服务器需要保持大量连接。
<2>WebSockets
长轮询虽然省去了大量无效请求,减少了服务器压力和一定的网络带宽的占用,但是还是需要保持大量的连接。那么人们就在考虑了,有没有这样一个完美的方案,即能双向通信,又可以节约请求的 header 网络开销,并且有更强的扩展性,最好还可以支持二进制帧,压缩等特性呢?于是人们就发明了这样一个目前看似“完美”的解决方案 —— WebSocket。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。
WebSockets优点: 较少的控制开销,在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于 HTTP 请求每次都要携带完整的头部,此项开销显著减少了。更强的实时性,由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。长连接,保持连接状态。

性能与可靠性:
解决: 引用本地缓存:本地缓存基于本地环境的内存,访问速度非常快,对于一些变更频率低、实时性要求低的数据,可以放在本地缓存中,提升访问速度
使用本地缓存能够减少和Redis类的远程缓存间的数据交互,减少网络I/O开销,降低这一过程中在网络通信上的耗时

设计一个70W在线人数的弹幕系统相关推荐

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

    原文地址: 如何设计一个 70w 在线人数的弹幕系统 ?如何设计一个 70w 在线人数的弹幕系统 ? 无论设计什么系统,身为一个软件架构师要考虑的总归还是资源利用率问题,如何利用最少的资源做出性能最好 ...

  2. 如何设计一个高可用的运营系统

    转载自   如何设计一个高可用的运营系统 这是一篇来自粉丝的投稿,作者[林湾村龙猫]近一年在做关于运营活动方面的设计.本文是他的关于运营活动的总结,Hollis做了一点点修改. 概述 一个产品业务的发 ...

  3. 如何设计一个比较通用的爬虫系统

    如何设计一个比较通用的爬虫系统 文章目录 如何设计一个比较通用的爬虫系统 背景介绍 页面差异 结果集不同 要发送哪些结果给用户 怎么发送这些数据给用户 项目依赖介绍 表结构 代码类间关系 操作流程 背 ...

  4. 设计一个脉冲发生器,已知系统时钟为50MHz,生成脉冲宽度为1ms,脉冲间隔可调,最大间隔为1s

    设计一个脉冲发生器,已知系统时钟为50MHz,生成脉冲宽度为1ms,脉冲间隔可调,最大间隔为1s Design a pulse generator. The system clock is known ...

  5. 4.3 设计一个完善的响应式系统

    4.3 设计一个完善的响应式系统 关键词 响应系统的工作流程: 当读取操作发生时,将副作用函数收集到"桶"中. 当设置操作发生时,从"桶"中取出副作用函数并执行 ...

  6. 游戏中的技能如何而来? 为ARPG设计一个好用的BUFF系统

    转自:游戏中的技能如何而来? 为ARPG设计一个好用的BUFF系统 - GameRes游资网 游戏中有宏大的场景地图,丰富的游戏剧情,逼真的人物角色.但要让角色(职业)炫酷起来,还是要靠各个职业的技能 ...

  7. 设计一个亿级高并发系统架构 - 12306火车票核心场景DDD领域建模

    " 架设一个亿级高并发系统,是多数程序员.架构师的工作目标. 许多的技术从业人员甚至有时会降薪去寻找这样的机会.但并不是所有人都有机会主导,甚至参与这样一个系统.今天我们用12306火车票购 ...

  8. 教你设计一个接收机和发射机FDD系统

    卫星通信.雷达和信号情报(SIGINT)领域的许多航空航天和防务电子系统早就要求使用一部分或全部X和Ku频段.随着这些应用转向更加便携的平台,如无人机(UAV)和手持式无线电等,开发在X和Ku波段工作 ...

  9. 系统设计——如何设计一个高性能的短链接系统?

    短链系统设计看起来很简单,但如何设计一个高性能短链系统呢,这也是面试中非常常见的一道设计题. 首先,为什么要用短链? 短链跳转的基本原理是什么? 短链生成的几种方法你知道吗? 高性能短链的架构如何设计 ...

最新文章

  1. ZooKeeper集群安装
  2. 用纯 CSS 创作一个小球反弹的动画
  3. js中的几种跨域方法
  4. php 定时缓存,php如何定时删除缓存??
  5. EasyNetQ介绍
  6. Java实现结构体,让字节流封送简单起来
  7. C#开发笔记之03-为什么选择IsNotXXX方法而不是IsXXX方法?
  8. 学php记不住函数,为什么都是记不住PHP 的函数名
  9. Delta-wave
  10. Drawing with GoogLeNet
  11. OwinStartupAttribute
  12. 在linux中cd god,Linux基础/Linux基础和命令.md · kelekele/God-Of-BigData - Gitee.com
  13. 信号完整性仿真设计——PCB工程师必修课
  14. 用photoshop给gif批量加水印
  15. 程序员自我修养阅读笔记——Windows PE/COFF
  16. [黑群晖经典教程] 一步一步建立自己的黑群晖
  17. 单侧上行速度测试软件,20210708-确认 低开单边上行,箱体理论几乎是贯穿a股运行周期的,如果平时容易过分看好行情,或者过分看弱行情,不妨就以最中庸的箱体去验证。... - 雪球...
  18. 2020.09.19【普及组】模拟赛C组总结
  19. 微信自研生产级 Paxos 类库 PhxPaxos 实现原理介绍
  20. 【opencv学习笔记】021之霍夫直线变换原理详解

热门文章

  1. iText7 学习笔记3--目录
  2. 前端如何实现后端运行进度_前端动态获取后台处理进度显示在进度条上
  3. 使用 Echarts 实现项目进度甘特图
  4. ajax请求被SpringMVC拦截器拦截后如何进行页面跳转
  5. 苹果关掉200m限制_iOS 13怎么解除移动数据下载限制 ios13解除超过200M限制一览
  6. 京东云分布式链路追踪在金融场景的最佳实践
  7. 交通领域-公路工程数字化(BIM)技术应用(附全文PPT)
  8. 计算机网络学习笔记(二)——物理层、奈奎斯特/香农定理、物理接口、传输介质、交换、电信网络、无线网络
  9. Cesium for UE4 加载离线本地服务器
  10. python列表中的字典怎么遍历,如何遍历字典列表中的嵌套字典?