流水不争先,争的是滔滔不绝

腾讯技术分享:腾讯是如何大幅降低带宽和网络流量的(图片压缩篇)

微信QQ 云聊IM 1023℃

前言

每年年初腾讯公司都要制定 SNG 成本优化年度目标,过去三年已经用技术手段为公司节省了超过 10 亿的现金流。产品的架构和容量也越来越健康,继续成本优化变得十分艰难。

但我们在迷茫中仍然定下了再优化 3 亿元的目标。很幸运,2017 年我们实现了这个目标,并再次获得公司级奖励,这是非常不容易的。因为“成本与质量”是个平衡木,而 2017 年 SNG 产品面临着激烈的内外竞争,要降低产品质量是根本不可能的。所以本次文章跟大家分享如何在保障质量(指的是图片质量、音视频质量)前提下所做的带宽和网络流量压缩,进而达到运营成本的优化。

腾讯SNG社交网络事业群介绍:

腾讯SNG社交网络事业群(Social Network Group,简称SNG)是腾讯七大事业群之一,成立于2012年5月,以QQ和QQ空间为基础平台打造全方位的互联网综合服务。在腾讯大体系中,SNG是很重要的基础平台,也是腾讯产品线中用户量最多的事业群。

移动端高流量时代来临

在非WiFi环境下玩手机,你会在意“流量”吗?

我在身边的同事和朋友圈儿做了同样的调查,得到的答案差不多,大家对手机流量不怎么在意,不喜欢转菊花和卡顿。我自己用的是腾讯大王卡,腾讯系的免流量,其他流量全国1元 800 M / 日,我身边有个开发妹子用的阿里宝卡,1 元 / G 全国日租流量,我领导用的全球通套餐,他自己也不记得多少钱一个月,反正流量用不完,他说他不缺流量缺的是时间,但我总发现他会偷偷看小视频,一看就停不下来。

今年 3 月,政府报告提出“取消流量漫游费,流量资费年内要下降 30% ” 。2020 年 5G 就要问世,网速是 4G 的 5-15 倍。全国人民流量时代即将来临,上网时长会增加,将承载更多富媒体应用快速增长,像 QQ 相册、朋友圈、微博、Facebook 是以图片为载体的时代,将会有更多快手、抖音、直播基于原创短视频的传播,对比文字图片更具有直观性,视频让人更感同身受,但具有“高带宽性”。

现在普通手机拍摄的图片在没有压缩的情况下大约 2M,一段 3 分钟的小视频大约 20M,直接存储或传输的,不仅浪费用户带宽,容易造成菊花和卡顿,如何在不影响质量的前提下把图片和视频压缩到最小,手机耗电发热更少、网络传输更快,就是提升了用户体验。

总之,就像本文将在分享的一样:用技术手段为用户提供低成本高质量的产品体验才是未来移动端产品的思路。

以QQ 相册图片压缩为例

我们来看看QQ 相册图片压缩的例子。QQ 相册业务发展较为平稳,总图片数有上万亿张,每日新增上传图片几百万张,每日下载图片几百亿张,外网带宽日峰值上百G,成本压力一直存在。

我们进行了各种维度的技化的实践,包括使用新的图片格式、最新的技术以及一些技巧等。

使用WebP格式进行图片压缩

用户上传的图片一般有三种主流格式:JPEG、PNG 和 GIF 动图,15 年 QQ 相册用Google 的 WebP 格式用户上传的原图进行后台压缩,在保障同等质量下的 WebP 图片比原图体积小 30%。

使用分辨率自适应

用户终端机型分辨率存在大小不一,但一些产品是以最大分辨率下发的,但中低端机型并不需要高分辨率的图片,优化为按需返回适当分辨率图,可节约 20% 的流量。15 年做的这 2 个优化都是在保障图片清晰度不变的前提下,为用户和企业节约了流量和存储空间。

GIF 动图压缩

16 年底相册推出新功能,用户在发表说说时可以选择自己的照片合成 GIF 动图,新功能导致流量增长非常迅猛,对应的外网带宽成本上增 70%。流量分析发现仅有 5% 下载次数的 GIF 格式图片占用了 20% 带宽,剩下大部分是经过 WebP 格式压缩过图片。

GIF 动图相当于一组图片的集合,可以把它看做一个小视频,但 GIF 格式是一种位图文件格式,是利用颜色表索引来表示每个像素颜色,然后标记重复出现的数据,编码过程对图片颜色数据没有损失,是一种无损压缩方式,相比视频压缩算法压缩率比较低,用户自己编辑的 GIF 大小普遍在 2-4M,是普通图片几十倍,占用户和企业的下载流量和存储都很大,当时用的开源 WebP 不支持 GIF 动图压缩所以考虑其他图片压缩格式。

新技术选型 TPG 图片压缩

腾讯 SNG 音视频实验室基于(AVS2 国家标准内核)开发了 TPG 图片压缩格式。采用了视频编码模式,利用帧间参考,大幅减少冗余值,提升压缩率。特别是在动图上具有高压缩率和低编解码耗时的明显优势,经在 QQ 相册验证 TPG 可在同等质量下可将 GIF 大小降低 90%,将 WebP 再降低 21%,比 JPEG 节约 43% 左右。并做了编解码性能的优化,耗时等都优于 WebP。为此 17 年全面推广相册 TPG 格式化。

右图是压缩了11 倍的 TPG 动图,人眼主观观察质量很难看出区别:

相册接入 TPG 图片压缩-前后台解决的困难

全客户端统一后台配置:

相册图片展示场景复杂,接入方案要适用于移动、PC、H5内核等所有客户端版本,根据用户客户端能力优先返还 TPG > WebP > JPG,右图是后台搭建的全客户端统一后台配置。

分级压缩、OC 点分片缓存:

因为 GIF 比较大,压缩耗时较长,针对不同大小的GIF分级压缩,小于 2M 的实时压缩,设置 2s超时,2-8M 设置 4s为超时,大于 8M 的异步压缩并更新缓存。同时为了保证 OC 点不会因为 GIF 过大而容易被淘汰,做了分片缓存策略。

兼容性:

对于分享出去的 GIF 我们给出原 URL,优先保障用户体验。

灰度发布:

作为首个大体量全面接入 TPG 的业务,为了保障平滑过渡,首先对新上传的图片保障异步压缩后存储在源站,被访问后会存储在中间源和 OC 点,大概一个月等 TPG 热数据占 70% 后,对旧的图片需要人工触发或者基于访问触发实时压缩。

廉价转码资源

TPG 是利用 AVS2 编码标准 通过非常复杂的计算来提高图片压缩比,实际无论是图片、音频还是视频压缩比的提升都是增加计算复杂度,等于是用计算资源来换带宽和存储,所以带宽优化需要大量廉价转码资源,如果专门采购转码服务器,需要大量的现金流。所以我们用 FPGA 转码卡与离线平台软硬结合来提供廉价计算资源。

离线平台:

离线平台主要通过部署 Docker 的对 CPU 空闲时段进行资源调度。资源来源有母机超卖池、公司和部门资源池、以及线上低负载设备。同时为了不影响原有的线上业务和资源池的分配,会通过监控任务的负载状态来逐步扩缩容,现已实现了小时级调度能力和灵活的分配策略。

FPGA卡:

FPGA 作为一种高性能、低功耗的可编程芯片,可以根据客户定制来做针对性的算法设计。所以在处理海量数据的时候,FPGA 相比于 CPU 和 GPU,优势在于 FPGA计算效率更高,以相册TPG转码为例,FPGA 卡性能是普通图片处理服务器的10倍,编码延时减少 80%,大幅减少用户等待,采用结合 FPGA 转码卡与 Docker 离线软硬结合,能有效降低转码成本,现已节约了几千台服务器。

成果:

项目在上半年完成,现在 TPG 请求量占 80% 以上,节约了 40% 的带宽,存储量减少,节约几千万/年,质量上反而由于文件变小,解码效率提升,用户等待时长减少了 22%。

全类型多场景的图片压缩解决方案

TPG 编码压缩虽然在压缩率上更优,但需要客户端和 PC 具备解码 SDK 才能正常使用,现在推广阶段,现网仍存在很多原图(JPEG、PNG、GIF)请求量。

Guetzli 是 Google 2017 年最新推出的图片压缩格式,比同等质量的 JPEG 节约 30%大小,此算法并没有改变 JPEG 编码格式,只是对数据进行优化缩减,因此编码出来的图片适用于目前已有的解码器。但它的计算开销非常大,耗时不可接受。GPU 相比传统 CPU 具备高并发的图片类计算能力,Guetzli & GPU可大幅减少压缩时间到可接受范围。现在已有一些场景(漫画)在用这种方式。

HEIF 是 H.265 标准的建议格式,比 JPEG 小 40%,苹果 iPhone7 升级 IOS 11 以上拍摄直接生成的是HEIF格式,同等质量文件大小和TPG差不多。腾讯的图片平台支持这种格式的存储和请求返回,只需客户端请求上做改造即可。相册、微云都已使用,如果两个 iPhone7(IOS11)用户互发本机拍摄的图片(HEIF 格式),则无需转码可比原 JPEG 图节约 40% 以上的流量和存储,在其他不支持的客户端下载时需转码为其他格式。所以针对部分苹果用户体验更好,要成为主流还有待普及。

经过三年的积累腾讯搭建了一套全类型多场景的图片压缩解决方案,根据用户客户端情况返还最优的图片格式,降低业务接入门槛,如下右图。

版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。
点击这里给我发消息