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

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

作者:余兵


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

 

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

 

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

 

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协议栈。

相关文章
|
2月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
40 1
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
74 5
|
2月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
67 1
|
2月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
46 5
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
54 6
|
2月前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
2月前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
56 4
|
2月前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
55 0