设计一个70w在线人数弹幕系统所需技术

简介: 设计一个70w在线人数弹幕系统所需技术


带宽压力

http请求压缩

一个http数据包请求由4个部分组成:请求行、请求头标、空行、请求数据。

请求行分为了三个部分。请求方法,请求url与http版本。

请求头行,由关键字值对组成,使用:分隔

空行

请求数据,请求正文中可以包含客户提交的查询字符串信息。

使用http gzip进行将请求中内容进行压缩将传输的内容,解决传输过程中的带宽压力,原理就是把原来的请求头内容压缩,类似于平时使用压缩包,也可以进行请求头结构优化

频率控制

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

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

这种可以通过sentinel的链路控制进行配置

弹幕卡顿,丢失问题

Long Polling via AJAX

客户端向服务器发送Ajax请求,服务器接到请求后保持住连接,直到有新消息才返回响应信息,客户端处理完响应信息后再向服务器发送新的请求。这样做的好处是可以省去很多无用的请求。但是需要服务端保持大量的连接。

WebSockets通信

WebSocket。服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

TCP长连接与短连接

短连接环境下,数据交互完毕后,主动释放连接。

长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

在上文中,由于东南亚的弱网环境,tcp长连接也会因为网络问题断开,所以无论是Long Polling via AJAX还是WebSockets通信都不符合我们的业务需要。

服务拆分

发送弹幕与查询弹幕完全不在同一个量级,通过将业务进行拆分,将发送弹幕逻辑与查询弹幕逻辑拆分。可以让两个服务不互相影响,保证服务的可用性。

引入本地缓存

引入本地缓存的好处是,用户不必等待数据返回,而是读取内存中缓存的数据,大幅度降低调用时延

相关文章
|
机器学习/深度学习 存储 测试技术
【YOLOv8改进】iRMB: 倒置残差移动块 (论文笔记+引入代码)
该专栏聚焦YOLO目标检测的创新改进与实战案例,提出了一种融合CNN和Transformer优点的轻量级模型——倒置残差移动块(iRMB)。iRMB旨在平衡参数、运算效率与性能,适用于资源有限的移动端。通过集成多头自注意力和卷积,iRMB在ImageNet-1K等基准上超越SOTA,同时在iPhone14上展现出比EdgeNeXt快2.8-4.0倍的速度。此外,iRMB设计简洁,适用于各种计算机视觉任务,展示出良好的泛化能力。代码示例展示了iRMB模块的实现细节。更多详细信息和配置可在相关链接中找到。
|
人工智能 测试技术 开发者
大模型自动生成并运行代码的体验与优化
随着近两年大模型的不断发展,它们在各个领域展示出了惊人的能力,可以说是在各个领域到了“开花结果”的阶段。比如最近技术圈比较火的阿里云的通义千问已经可以自己写代码、跑代码了,作为开发者,我觉得这种能力不仅提高了开发效率,还推动了编程实践向更高层次的转变和发展。但是,在使用大模型自动生成代码时,我们也会面临一些挑战,其中之一是代码可能会曲解开发者的需求。那么本文就来分享一下个个人的体验以及如何优化这种情况。
1570 2
大模型自动生成并运行代码的体验与优化
|
图形学 开发者
Unity中的透明效果之开启深度写入半透明效果
在Unity中实现开启深度写入的半透明效果,通过分离渲染过程为两个阶段:深度写入和颜色混合。首先,在深度写入阶段仅写入深度信息而不渲染颜色;其次,在颜色混合阶段进行正常的半透明颜色混合,确保后续物体能正确渲染且避免被错误裁剪。该方法解决了常规半透明渲染中关闭深度写入导致的问题。提供自定义Shader代码及材质设置步骤,方便开发者实现这一特殊渲染需求。
|
存储 Ubuntu 机器人
机械臂手眼标定详解
这篇文章是关于机械臂手眼标定的详细教程,包括了使用ROS1 Noetic和Realsense D415相机在Ubuntu 20.04环境下进行标定的步骤和配置方法。
2626 0
机械臂手眼标定详解
|
机器学习/深度学习 存储 边缘计算
深度学习之稀疏训练
基于深度学习的稀疏训练(Sparse Training)是一种在训练过程中直接构建和优化稀疏模型的技术,旨在减少深度神经网络中的冗余计算和存储需求,提高训练效率和推理速度,同时保持模型性能。
1218 1
|
人工智能 自然语言处理 负载均衡
探索 api.maynor1024.live:一站式 AI 服务平台
探索 api.maynor1024.live:一站式 AI 服务平台
489 1
|
缓存 安全
max file descriptors [65535] for elasticsearch process is too low,【已解决】
max file descriptors [65535] for elasticsearch process is too low,【已解决】
488 1
|
机器学习/深度学习 人工智能 安全
人工智能在网络安全中的入侵检测与防御
人工智能在网络安全中的入侵检测与防御
|
SQL JSON 前端开发
【源码免费下载】SpringBoot整合Spring+SpringMVC+MyBatisPlus案例:图书管理系统
【源码免费下载】SpringBoot整合Spring+SpringMVC+MyBatisPlus案例:图书管理系统
289 0
|
存储 NoSQL Redis
RedisTemplate常用方法总结
RedisTemplate常用方法总结
879 1

热门文章

最新文章