基于应用理解的协议栈优化

简介: 不同类型应用的产品体验优化

作者:余兵


移动互联网时代,不同的应用追求的产品体验差异性很大。

 

应用商店和图片等下载类型业务追求速度、越快越好,短视频关注起播、拖拽响应速度和观看过程卡不卡,直播追求画质清晰、高码率和直播过程流畅;而游戏则是追求低延时,网络稳定、不掉线。

 

如何保障不同类型应用的差异化产品体验是移动互联网时代的一个巨大的难题。

 

01 传统协议栈技术与不足

 

协议栈是底层通信技术,处在OSI模型的第四层,协议栈优化技术旨通过克服协议缺陷和改良协议机制,提升内容分发效率,改善产品体验。

 

传统的协议栈优化思路是以破万法,追求速度的极致,从速度视角去解所有应用的产品体验问题,这对于下载类似的业务适用,但对于直播、点播和游戏等业务确是不适用的,会出现产品体验不好的现象。

 

点播和直播关注卡不卡、流畅与否,最核心的技术是保障播放器缓存不空,持续不断的有数据播放,和传输速度快慢并无直接关系;游戏信令关注低延时,对带宽需求量很小,但对丢包和网络抖动及其敏感,对于丢包感知、丢包恢复技术要求极高。

 

显然,速度的解法,并不能满足移动互联网下所有应用产品体验需求,协议栈优化技术需迭代要升级。其中最重要、最核心的技术是协议栈理解应用,理解应用的传输特征、理解应用关键体验指标、理解关键体验指标背后的性能瓶颈,及其造成性能瓶颈的影响因素个各个影响因素贡献的权重比例。

 

除了理解应用外,协议栈优化技术还需要扩展与延伸协议栈对应用传输过程的感知能力,感知结果与应用传输特征匹配,再定制差异化的拥塞控制和丢包恢复算法。

 

02 理解应用的协议栈技术

 

基于应用理解的协议栈,首先要理解不同应用的传输特征、关键体验指标、关键体验指标背后的性能瓶颈,及其造成性能瓶颈的影响因素和个各个影响因素贡献的权重比例;其次是对应用总结、分类,分成不同的业务类别,最后再针对不同的业务分类性的设计不同的算法策略。方案的核心思想是用不同的算法解决不同应用场景的产品体验优化。

 

应用分类和解法

阿里CDN最近四年,一直在协议栈技术智能化道路上探索,基于应用理解的协议栈技术是协议栈智能化的技术基础。针对阿里云CDN平台130T的业务规模做应用分类,分类规则依据两个维度:应用传输特征(不同的应用在业务特征的差异性会反馈到传输行为上)、应用关键体验指标(关注速度、卡顿率、低延时等不同的体验指标),最终将所有应用分成四类业务:信令业务、下载业务、点播业务、直播业务。

 

l 信令业务

信令场景的传输特征是交互式、低延时、信息量少,比如游戏对战类、网站访问类、钉钉、微信等IM通信工具文字和语音通话类业务。关键的应用体验指标是低延时、网络稳定、不抖动、不闪断,所以信令业务的产品体验优化解法是弱拥塞控制,强丢包恢复。最核心的优化要领总结为快传快补快传是指快速的将数据报文发送到网络中,快补则是在拥塞检测、丢包恢复技术上及时、实时,只有如此才能达到低延时的应用体验需求。

 

协议栈技术本质上是一种攻防技术,贪心的拥塞控制是进攻,负责免疫的丢包恢复是防御,进攻与防御并存,顺风时进攻,逆风时防御,信令场景优化要领快传快补正是如此。协议栈的优化策略必须攻防兼备,设计进攻策略时,同样需要设计辅助的防御策略,一个优秀的拥塞控制算法,必定配套了一个优秀的丢包恢复算法,只有这样才能将协议栈技术演化到极致。

 

l 下载业务

下载场景特征为数据量大、追求下载速度,需要的带宽量大,期望压着可用带宽跑,充分利用链路可用带宽,典型的应用有应用商店的APP下载,大文件下载、高清图片下周、手机操作系统升级包下载等。下载应用关键的体验指标是下载速度、下载耗时,所以下载业务的优化要领是拥塞控制、细水长流,持续不断的做好带宽估计,持续不断最大化利用链路探测带宽,才能保障下载类业务的产品体验,短视的突破、取巧难将性能做到极致。

 

l 点播业务

点播场景特征为静态的视频文件流(缓存在CDN边缘节点)、不关注下载速度,关注视频播放卡不卡,视频起播和拖拽响应速度,比如行业手淘、快手、抖音、小红书、优酷和蚂蚁支付宝第三tab页等平台上提供的短视频点播业务。关键体验度量指标是卡顿率,卡顿是播放器的行为,保障播放器缓存不空,持续不断的有数据播放是点播场景优化的关键难题。

 

l 直播业务

直播场景特征为实时流、带宽需求量不大但有突发(和视频编码技术有关)、对网络丢包敏感、不关注下载速度,关注播放过程流畅与否,比如行业的手淘、快手、抖音、虎牙、斗鱼等平台上提供的直播业务。直播业务的关键体验是播放流畅、不卡顿,与点播业务的优化要领相似,区别是直播为实时流,阿里CDN的优化思路是弱拥塞控制,强丢包恢复。

 

基于应用理解分类,阿里云CDN设计了一个协议栈算法容器,包含四大主算法,分别覆盖信令业务、下载业务、点播业务和直播业务,每个主算法包含三个子算法,提供了低中高三个不同等级的分级服务,最终满足各种应用的产品体验改善需要。

 

协议栈算法容器

区别于原始Linx内核的算法模式——将不同思想、服务不同场景的算法设计为独立算法,阿里CDN结合应用中心式、统一管控需求,也为了能让算法和应用更加灵活匹配,我们使用了一种新模式,设计了一个算法底座,底座上生长了5个主算法,主算法提供低中高三种不同级别的分级服务,最终形成了算法容器。

 

算法容器的构建逻辑如下:

首先,通用能力抽象、底座化,抽象拥塞控制和丢包恢复技术作为算法容器的底座。拥塞控制和丢包恢复是协议栈最核心的两大技术,近乎95%的协议栈优化工作都集中在此。拥塞控制类别人的心脏,通过带宽估计和带宽使用,控制整个协议栈的启停;丢包恢复则类似人的免疫系统,当网络出现拥塞或出现丢包时负责免疫修复。

 

其次,通用能力灵活、弹性化,不用的场景分类对拥塞控制和丢包恢复依赖有差别。比如直播对于拥塞控制的依赖比较弱,直播为实时流,需要带宽量相对固定,贪心式的拥塞控制算对直播产品体验优化效果弱,但是对于丢包恢复的能力要求很高;下载业务对于拥塞控制的能力要求极高,需要拥塞控制算法尽力而为,丢包恢复技术要求一般;再如信令业务,对带宽的需求趋于无,但是对丢包恢复的能力要求极高。拥塞控制和丢包恢复通能力灵活、弹性后,场景分类算法可以按照自己的需求选择能力等级。

 

再次,场景分类主算法设计,主算法设计包含两部分关键类容:第一是基于应用场景特征的理解决策使用通用能力等级(拥塞控制和丢包恢复能力),第二部分是基于场景传输特征和性能瓶颈,迭代专用策略。

最后,算法服务分级的能力(阿里云CDN设计了低、中、高三档能力,演化为三个子算法),不同应用对于产品体验的要求有差异、对质量的敏感度也有差异,利用这种差异构建服务分级的能力,可以实现产品体验和成本双赢。比如CDN系统内部的日志回传对实时性要求不高,可以给予最低档的优化服务;比如点播、直播、游戏等业务对产品体验要求非常高,可以给予最高的的产品体验优化;又比如CDN内部管控类服务对质量的敏感适中,给予中间档位的传输服务。

 

图片 1.png

阿里CDN算法容器图


能力产品化交付

 

技术能力交付的方式有很多,算法容器遵循了产品化模式交付标准,有如下功能或特性:

域名维度算法配置,支持不同域名配置不同算法:


l  支持域名维度国家、省份、运营商、节点、时间组合维度的算法配置,可以灵活的组合使用算法

l  域名策略web化配置、点鼠标实现域名算法配置

l  域名策略web化管理,提供网页式域名算法管理能力

l  域名算法分钟级生效,配置动作触发下发逻辑,分钟后生效

l  算法策略到内核态,系统标准化API,接入网关改造简单、轻量

 

图片 2.png

 

03 未来展望与规划


移动互联网时代需要的是基于产品体验的协议栈优化技术,基于数据传输的优化技术只是数据报文的搬运工,是缺少灵魂的、行尸走肉的,无法理解应用传输特征和产品体验需求,难以满足存量和爆炸式增长的APP应用需求。

 

基于数据的传输和基于产品体验传输,中间差了一个协议栈智能化技术。正如文章中提到观点,基于应用理解的协议栈优化是协议栈智能化的基础技术,应用理解的协议栈优化技术是我们在智能化道路上迈出的第一步,但不是最后一步,我们仍在路上。

 

我们的目标是让协议栈优化技术理解应用、给协议栈技术植入智能化基因、用智能化的思路设计产品体验的传输技术,最终解决移动互联网下各种应用的产品体验优化问题。

 

注:文中的出现的协议栈关键词,如果没有加限定词,特指TCP协议栈。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
9天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
75 9
|
18天前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
32 1
|
23天前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
|
2天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
3天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
16 6
|
5天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
7天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
29 4
|
11天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
16天前
|
机器学习/深度学习 存储 人工智能
数据结构在实际开发中的广泛应用
【10月更文挑战第20天】数据结构是软件开发的基础,它们贯穿于各种应用场景中,为解决实际问题提供了有力的支持。不同的数据结构具有不同的特点和优势,开发者需要根据具体需求选择合适的数据结构,以实现高效、可靠的程序设计。
40 7
|
25天前
数据结构(栈与列队)
数据结构(栈与列队)
16 1
下一篇
无影云桌面