我们传输的大量信息都是少量信息的简单组合(yet another 幂律?)。
任何信息均如此。对于文字信息,有固定的短语,俚语,名言警句,对于多媒体,有范式化前奏,BGM,名人舞姿,常见镜头,体现在数据包中就是一些 0,1 组合成的固定比特片段。
把这些片段甄别出来,为其关联唯一短 ID,部署在内容的中间转发节点上,事情将变得高尚。
转发数据包时,用数据包的任意子串匹配这些片段(诸如 Leetcode “求最长子串”,练熟了还是有用的。),一旦命中,即可将较长子串替换成较短 ID,相当于仅传输字典索引,时间换空间,大大降低传输量,从而节省带宽。
图中那张“共享的 ‘内容 -> ID’ 映射表”可通过离线/在线学习获得,也可人工配置。
说起在线学习,可以维护一个 LRU 链表,保存最 Hot 的 Top N 片段。
最后说优化,还是那句话,所有优化都需要注入新信息,优化匹配算法的信息来自现实世界。
打个比方,紧接着“当我避开你的温柔后”的大概率是“泪开始坠落”。或者可为每个区域,甚至每个用户维护一个字典,现实世界具有相同特征的 entry 传输的数据重复度也偏高。比如说涉及浙江温州的数据传输,专门建立一个皮鞋相关的字典,是高尚的。
这种传输优化可用于朴素的 CDN 动态加速,也可用于朴素的 CDN 静态加速回源,但注意,一定要朴素,不然得不偿失,但最能打的场景还是隧道传输加速了。
前两周我提到过,统计复用率足够高时,端到端传输优化很难闭环,单流结果不再由单流行为决定,大多数端到端算法被认为不靠谱,不如降低发送量,从而提高通过率,最大程度减少重传时延。进一步说,如果大家都这么做,世界又将重新变得高尚。
传统 TCP/IP 网络早被 CDN 盖了一个内容层,鉴于此,本文说的这类朴素的内容层,从不识别内容,只识别“一段具有特征的比特流”,将其编码成更短的比特流,就算赚到,细节可能还包括高效的匹配算法和编码方案。
至于古时候存储介质(竹简,石头)和传输介质(马车)都很贵的时候,书面语总比口语惜字如金,也是这个意思。白话文被写下来的行为在宋朝之后普及,因为宋朝之后大范围普及了纸,或者还有稍许活字印刷术。
超过 20 ms 的传输在平时上网中就很少见,绝大多数内容都是通过 CDN 接入,而 CDN 调度机制基本上不会调度到太远的地方,因此果真要做长传,一定要控制丢包率,如果丢包率不能控制,就选择抗丢包的算法,比如 BBR。降低丢包还有一个方法将是少发数据,发得少丢得少。就是本文。
浙江温州皮鞋湿,下雨进水不会胖。