1. 价值创造者的烦恼

打造一款互联网产品时,我们都会非常关注用户体验,当下短视频、线上KTV、线上多媒体互动 等场景越来越多。对于此类产品,我们非常依赖价值创造者,比如美女主播,小视屏制作者,音乐制作人等等。如何为你的价值提供者创造更好的用户体验,这次我们从价值提供者生产并传播价值(上传数据)的用户体验说一说。

如上图所示,这应该是我们当下很多APP都面临的现状,上传不上、上传慢、上传失败,导致在体验上不尽如人意,从表象的原因来看我们可以把这类原因归结为如下:

  • Mobile

移动端网络多种多样,wifi、2g、3g、4g,相比于桌面互联网,移动互联网较为显著一个特点 是环境很不稳定,丢包比较严重,这直接导致了客户端与服务端的连通率较低,导致文件上传下载速度很慢、成功率较低。

  • Long journey

另一点是移动网络和桌面网络都得面对的问题--广域网高延时,当前通过网易云对象存储分布于各个区域布点机房之间的延时监控可以了解到,华北、西北、西南等区域节点到杭州机房的延时基本30ms~50ms左右,到了晚上网络繁忙的时候延时往往有时会达到百ms级别,丢包率也会相应变高。

  • You are in china

国内网络环境还有一个典型的问题就是电信、联通南北分隔,以及诸多小运营商网络问题。国外就更不必说了,访问无论是国内到国外还是国外到国内基本都就然并卵、延时丢包都高到吓人。

在技术人的眼中,我们看到的是互联网根基-伟大的TCP协议在此类移动、广域网络环境下显得非常捉襟见肘,如下图所示,我们面临是一条质量极差的底层TCP数据传输通道,丢包(High loss rate)和高延时(High RTT)导致使得这条数据传输通道变得又窄又拥挤。

2. 网易云提供解决方案

网易云作为一流的存储服务提供商(这是我们的目标),为网易集团内部和诸多合作伙伴提供优质的对象存储和基于存储的上下行数据传输加速服务等丰富的增值服务,一站式解决移动互联网时代非结构数据管理难题。

国内、国外的上传的用户体验问题都是我们对接的所有各行各业的互联网产品现实遇到的棘手问题,因此,从2014年初开始我们就计划打造统一的解决方案来帮助产品解决问题。当前我们已经有非常完善的解决方案来解决这个问题,我们先看下当前我们取得的成果

  • 加速效果

提供的解决方案能够使得产品方在传速度和上传成功率都取得不错的提升,获得用户肯定。(PS: 如上是直接采用全国各级进行基调测试取得的客观结果)

  • 如何接入

企业只需要使用SDK(Android、iOS、Web
PC),可以在短时间内解决各种上传不了、上传慢、安全上传等全方位的问题,帮助产品实现一流的上传体验。

如果企业自身去构建一套客户上传系统,需要方方面面的投入:

1. 靠谱的上传协议:支持文件分片、断点上传、流式上传、安全上传(HTTPS)

2. 上传服务端系统:支持高并发、搞吞吐的上传系统(设计大量数据交互的服务端实际往往是很困难的)

3. 全平台的SDK:包括移动端Android、iOS;Web端;PC端SDK。

4. 大量资源投入等: 包括大量的人力资源(开发、运维)、各个地区边缘节点,国内外的专线资源等等。

如此多的投入,起码耗费大几百万成本。使用网易云,企业可以免费0成本接入上传系统,和网易和合作伙伴站在同样的技术起跑线上打造自身的产品。

3. 技术大揭秘

接下来和大家分享在技术上我们是如何打造上传解决方案的。在资源、架构、系统优化等方面投入了非常多,主要的优化工作包括:

  • 边缘布点
  • TCP协议调优
  • 应用层协议优化
  • 移动端上传优化
  • 路由优化系统

3.1 边缘布点与TCP优化优化

客户端到基站这边主要的是High Loss Rate即高丢包率问题,基站到数据中心之间主要是High RTT 高延时问题。我们解决问题的思路是一分为二,为了解决后半部分网络的高延时问题,我们还将边缘节点服务器部署到离用户最近的地方,结合高速专线等方式快速将用户数据上传到数据中心。

网易云对象存储当前直传加速网络已经覆盖了国内华中、华北、华南、华东、西南、西北几个大区;国外主要包括美国、日本、东南亚、欧洲等区域,并且区域覆盖也在不断完善中。
下图为国内覆盖。

国外我们使用aws机房的节点进行覆盖,并且在通过国外高速专线接入国内机房。

边缘节点与数据中心(NOS中心机房)之间的网络是掌握在我们自己手里的,所以首先我们做的优化,当然是为了克服广域网的高延时问题,在边缘节点和中心机房之间建立长连接池,并且对TCP连接做一定参数调优,比如tcp_slow_start_after_idle、tcp_wmem等等,这样可以避免每次上传数据的慢启动过程,保障一片数据只需要经过一次RTT既可以发送到数据中心(理论上的最优效果)。

以下为线上基调测试北京节点优化前和优化后边缘节点到中心机房的统计(边缘节点到中心机房的时间(包含写NOS)),可以看到优化后,相比于杭州BGP边缘节点到杭州中心机房(同机房),北京AWS于之基本相差一个RTT 30ms左右。

3.2 应用层协议优化

传统标准的对象存储服务(AWS S3 基本是事实标准)原生就是为服务端进行设计的,包括系统设计及其提供的接口等都并不能很好得适应移动网络的需求,其中最重要的一点是传统(也是标准的)对象存储的存储接口是不能支持断点续传的,其分块上传协议也主要是针对用户上传大文件的场景(最小分块大小为5M),就当前移动互联网的应用场景而言,为了给用户提供更好的体验,包括语音、图片和视频等资源一般都是在确保不影响用户体验的基础上进行大幅度的数据压缩,其上传文件的大小往往都不会超过1M,最小分块5M完全派不上用场。

所以必须为直传设计一套通用的协议以支持移动端上传,我们主要考虑了如下两个基本设计目标。

  • 断点续传:支持小文件的短时间内断点续传,支持大文件较长时间的断点续传。
  • 流式上传:支持大小文件的流式上传,即在不知道最终文件大小的情况下进行一部分一部分进行流式上传,(比如支持边录边传)。

如下为核心接口PostPart

POST /${bucketName}/${objectName}?offset=${Offset}&complete=${Complete}&context={context}&version=1.0 HTTP/1.1
Content-Length: ${length}
Content-Type: ${contentType}
x-nos-token: ${token}

<data of body>
  • offset为上传数据在整个文件中的偏移
  • x-nos-token为上传令牌
  • complete标识是最后一个文件分片数据
  • context为服务端返回的标识用于断点续传场景下唯一标识此次文件上传。

3.3 移动端上传优化

为了应对移动端网络的高丢包率,除了设计专用如上分片上传协议之外,对于移动端我们还做了以下几点优化。

  • HTTP PipeLine

在移动端网络环境下,为了提高文件上传的成功率,客户端往往会把文件进行切片,比如1M的文件按照16K一个分片,一个分片一个分片进行上传。传统的HTTP 1.1 请求的模式(既当前大部分用户使用的方式)为如下的 no pipelining模式,既每一次分片的上传都是等待一次RTT之后才能够进行上传,在广域网环境下,比如海外的用户上传到杭州,下一次分片上传必须得等待上一次分片上传完成,也就是好几百ms的时间之后才能进行下一分片的上传。

显然在广域网环境下传统的HTTP non pipeling协议模式是不太合适的。我们的SDK 当前支持Http pipeling模式,在默认情况使用Http pipling模式进行上传,充分利用客户端的上传带宽,同样也使得上传速度对客户端分块大小不是很敏感。

我们在实验环境下,使用树莓派+ Facebook Augmented Traffic Control(FaceBook开源的网络环境模拟工具,其主要用来测试FaceBook社交网络在一些弱网络环境的表现) 对pipeline进行了一轮测试,如下为测试效果。在实际线上表现也非常好,能够在服务端和网络优化的基础上再得到近一倍的速度提升。

国内:

国外:

  • 连接池管理

完成一次tcp 3次握手的时间基本在上百ms的时间,所以NOS Andriod SDK 、iOS SDK等SDK上上维护了与上传节点的连接池,避免每一次上传之前的连接建立时间消耗。

3.4 路由优化系统

另外,广域网系统也在不断的调整过程中,为了获得最佳的上传效果,我们构建了一个闭环系统,使用基调动态跟踪广域网最佳路由,找到最优策略。

线上基调随机路由数据=>统计各路由质量=>生产最佳系统路由=>更新线上路由

4. 更多精彩

除了直传加速服务,网易云对象存储服务对典型数据资源,比如图片、音视频、反垃圾等方面做了非常多的服务生态,一站式解决互联网时代非结构数据管理难题,助力企业高效起步。


This article used CC-BY-SA-4.0 license, please follow it.