前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >B站开源一种Web服务的网络性能调试工具

B站开源一种Web服务的网络性能调试工具

作者头像
从大数据到人工智能
发布2022-06-20 09:19:40
3020
发布2022-06-20 09:19:40
举报
文章被收录于专栏:大数据-BigData

项目背景

现如今,无论是即时消息,音视频流传输,还是移动应用, 使用HTTP网络协议的服务无处不在。HTTP的性能表现对网络服务的质量和用户的使用体验都有着至关重要的影响。随着技术的进步,包括HTTP的应用的更新、HTTP协议版本的迭代以及拥塞控制算法层面的改进,都不断地推动HTTP性能的提升。对开发者来说,如何有效地调试和评估HTTP网络服务也成为其关心的话题之一。

Record and Replay即记录和重放,是一种辅助调试应用程序和改善性能的有效手段,对于调试HTTP网络服务亦是如此。MIT曾设计提出mahimahi (http://mahimahi.mit.edu/),一套用于网络仿真和分析的用户空间工具。可记录来自基于HTTP的应用程序流量,并在模拟的网络条件下重放流量内容进行准确的测量。mahimahi主要有两大核心功能:

  1. 记录和重放HTTP流量:

提供RecordShell和ReplayShell。RecordShell用于将浏览器发起的真实HTTP请求和响应完整地记录并存储到本地磁盘。ReplayShell将创建一个离线的环境重放记录的内容。

  1. 模拟多种网络条件:

主要通过三种shell:固定传输延迟 (DelayShell)、固定/可变链路速率 (LinkShell)以及随机丢包(LossShell)来模拟不同的链路条件。可在模拟的链路条件下执行应用程序或叠加使用RecordShell重放HTTP流量。

Mahimahi 提供的每一种shell既可以彼此独立并行又能相互嵌套从而提供更大的实验灵活性。

此外,项目作者还在论文(http://mahimahi.mit.edu/mahimahi_atc.pdf)中展示如何使用mahimahi框架测试web浏览器使用不同网络协议的表现差异。文中,作者测试了500个站点,分别使用HTTP/1.1,SPDY和QUIC协议,从页面加载时间和速度的指标来综合评估各个协议的优缺点,从而为网络服务的开发者提供了很好的借鉴思路。

但我们在实际使用该项目进行实验研究时发现它对多种协议的重放功能的支持上还有一些待完善的地方。

项目原理

原项目通过搭建apache服务器对记录的流量进行转发,其对HTTP/1.1和SPDY协议的支持是通过加载apache服务器的协议模块,因apache未支持QUIC协议所以作者在测试QUIC协议时将apache替换成了google chromium项目下的quic toy server。且该项目距今也有一些久远,SPDY协议早已废弃,现网络站点已经大规模使用HTTP/2协议,而QUIC协议也经过很多版本的演进标准化为HTTP/3协议。因此我们在原项目基础上拓展网络协议以支持H2和H3/QUIC协议来方便服务器开发者调测自己的应用程序。

为了实现对多种新协议的支持,经调研,一种比较直观的实现方式是替换apache server为Nginx。Nginx的模块化结构设计使得每种协议可以以独立的模块呈现,单独编译,通过配置文件动态加载。Nginx已天然支持H2模块,H3或QUIC协议目前有多个实现版本,B站视频云团队使用自研QUIC协议栈和Nginx QUIC Module模块,可以结合自研QUIC协议日志分析模块来配合后续分析研究工作。

开源内容

为了实现对B站Web页面的加载和视频播放的重放支持,我们主要补充了下面几个部分:

支持更多HTTP请求方法;使用Nginx作为重放服务器、以动态配置网络协议模块的形式支持更多协议;使用自签名的服务器证书。

下面展示实验效果。以测试用不同网络协议的B站视频为例。我们先使用recordshell记录视频播放全过程,可以看到页面HTTP流量全部使用HTTP/1.1协议记录。

对记录的流量分别使用H2协议和QUIC协议重放:

这样我们可以达到使用不同网络协议重放web服务的基本目的。值得一提的是,使用Record-and-Replay工具的一个好处是重放实验充分地控制变量。一次记录,多次实验,保证实验的结果相对精准。

此外,我们还可以通过修改mahimahi的链路模拟shell,实现根据需求对特定的链路增加时延/丢包/带宽限制等规则来模拟复杂的网络环境。

这样我们重放一个网页的时候可以对其中部分节点的流量加以控制。下图展示仅对视频资源的节点增加100ms时延的前后对比:

为了方便更多的开发者,我们开源了该工具的代码,地址:https://github.com/bilibili/mahimahi,后续项目有更新也会同步跟进。非常欢迎大家交流探讨。

此外,本项目使用到的Nginx QUIC Module会在不久后开源,其依赖的QUIC网络协议库项目quiche已经开源(https://github.com/bilibili/quiche), 对QUIC协议感兴趣的朋友也可以去看看。

团队仍会继续围绕QUIC网络协议做深入的实验研究,希望下次能为大家带来更精彩的内容!


本文为从大数据到人工智能博主「bajiebajie2333」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://cloud.tencent.com/developer/article/2026615

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档