如何让你产品的用户拥有一流的上传体验

本文由  网易云发布。

在当下的互联网产品中,短视频、线上 KTV、线上多媒体互动等场景可谓是越来越多。此类产品非常依赖价值创造者,比如美女主播,小视屏制作者,音乐制作人等等,为价值提供者创造一个优质的用户体验对这些互联网产品来说显得尤为重要。

那么,如何才能保障这一点呢?下面我们就从价值提供者生产并传播价值 (上传数据) 的用户体验方面来聊一聊。

如上图所示,这应该是当下很多 APP都面临的问题,上传失败、上传慢,导致了在用户体验上不尽如人意,从宏观层次来看我们可以把原因大致归结如下:

Mobile

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

Long journey

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

You are in china

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

深入到技术层面来看,技术人员都清楚这是因为互联网的根基——伟大的 TCP协议在此类移动、广域网络环境下显得有些捉襟见肘了。正如下图所示,我们面临的是一条质量极差的底层 TCP数据传输通道,丢包 ( High loss rate))和高延时 ( High RTT) 使得这条数据传输通道变得又窄又拥挤。

网易云提供解决方案

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

在国内、国外和跨境上传难、上传慢等是我们在与各行各业的互联网产品对接时它们所共同反映的问题。为此,从2014年初开始,网易云就着手打造统一的解决方案来帮助产品克服这一难题,目前,我们也已有了非常完善的解决方案。下面先来看一下我们取得的一些成果:

加速效果明显

网易云提供的解决方案帮助产品在传输速度和上传成功率上都取得了不错的提升效果,得到了用户肯定。( 上图是采用全国各级进行基调测试而得到的客观数据 )

接入便利

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

而如果有企业想要自己去构建一套客户上传系统,就会涉及到方方面面的投入:

○ 靠谱的上传协议:支持文件分片、断点上传、流式上传、安全上传(HTTPS)
○ 上传服务端系统:支持高并发、高吞吐(设计大量数据交互的服务端实际往往是很困难的)
○ 全平台的 SDK:包括移动端 Android、iOS; Web端;PC端
○ 大量资源投入等: 包括大量的人力资源(开发、运维)、各个地区边缘节点,国内外的专线资源等等

这么多的投入,资本耗费起码也得数百万。而使用网易云,企业可以零成本接入上传系统,和网易的合作伙伴站在同样的技术起跑线上去打造产品。

技术大揭秘

接下来就来和大家分享下我们在技术上是如何打造上述上传解决方案的。

我们在资源、架构、系统优化等方面的投入都非常之多,其中,主要的优化工作包括:

○ 边缘布点

○ TCP协议调优

○ 应用层协议优化

○ 移动端上传优化

○ 路由优化系统

1 边缘布点与TCP优化

客户端到基站主要是 High Loss Rate,即高丢包率问题;基站到数据中心之间主要是 High RTT 高延时问题。

我们的解决思路是一分为二。为了解决后半部分网络的高延时问题,我们将边缘节点服务?部署到离用户最近的地方,结合高速专线等方式快速地将用户数据上传到数据中心。

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

下图为国内覆盖的区域:

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

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

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

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 移动端上传优化

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

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上维护了与上传节点的连接池,避免每一次上传之前连接建立的时间消耗。

4 路由优化系统

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

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

更多精彩

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

○ s丰富的图片处理
○ 原生支持视频点播
○ 视频截图、转码服务
易盾一键反垃圾
○ 事件通知
○ 丰富的访问控制

了解 网易云 :
网易云官网:https://www.163yun.com/
新用户大礼包:https://www.163yun.com/gift
网易云社区:https://sq.163yun.com/

原文地址:https://www.cnblogs.com/163yun/p/8890383.html

时间: 2024-10-03 01:20:12

如何让你产品的用户拥有一流的上传体验的相关文章

【阿里云产品公测】ACE下上传文件永久存储实践

本帖主要内容: ;$,=VB:'   在阿里云的ACE下,我是如何实现让上传的文件永久保存的? ,%"!8T   本文以PHP为例,具体知识点如下: WD# 96V   第一,扩展服务“存储服务(Storage)”的入门基础: uzg(C#sp   第二,如何结合实际项目使用: \ne1Xu:hM   uP, iGA ?lq   2 j.6   ]8q#@%v}   写教程前,先发发牢骚吧! M.fAFL   我为什么要用云引擎ACE?因为我讨厌天天去更新系统.打补丁和查日志等等,这么专业的东西

黄聪:wordpress前台自定义用户,调用wp_editor上传附件提示【抱歉,出于安全的考虑,不支持此文件类型】错误。

1.直接禁用文件类型检测,在wp-config.php文件中,添加这样一句代码define('ALLOW_UNFILTERED_UPLOADS', true); 2.在functions.php里面,添加下面代码(最重要是黄色背景那2句): <? // 添加一个角色,允许地区编辑添加 add_role('dq_edit','地区编辑', array( 'level_3' => true, 'read' => true, 'edit_posts' => true, 'edit_pub

Linux上的ftp服务器vsftpd之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传

一.问题背景 没事谁折腾这鬼玩意哦...还不是因为bug. 我们的应用,用户头像是存在ftp上的.之前的ftp服务器是一台windows,我们后台服务器程序收到用户上传头像的请求时,会用一个ROOT/ROOT的账户,连接ftp服务器. 获取到连接后,即进行上传. 上传:上传文件则存放在ROOT用户的home 目录(在windows上装的是server-U来充当ftp服务器,所以就是在Server-U里面配置了ROOT用户的home目录). 上传完成后,会得到一个ftp协议类型的url.范例如:

从产品和用户角度,思考需求和用户体验

需求来源于生活,用户体验是为了相对核心的需求而产生的新需求,需求的极致就是把一种需求变成习惯. 在产品这个圈子里,经常会遇到两个词,一个叫需求,另一个叫用户体验.在我看的各类产品相关的书籍和文章中,这两个词的出现率也是相当高的.经常在跟别人聊天的时候,也把这几个词挂在嘴边,忽悠忽悠.随着自己的成长和自己眼界的拓展,渐渐地理解了这两个词的意义. 一.需求的思考 从产品人的角度,需求就是产品人能给用户解决的问题.从用户的角度来说,需求就是用户需要产品人解决的问题. 举个例子说,假如某公司PM设计了一

oracle查询在当前数据库下当前用户拥有的表语句

1.查询表的数目: select count(*) from tabs select count(*) from user_tables 2.查询用户拥有哪些表: select * from tabs select * from user_tables 3.管理员用户 SELECT * FROM ALL_TABLES WHERE OWNER='用户名';

三流的父母想拥有一流的孩子,这是病

三流的父母想拥有一流的孩子,这是病 2017-02-04 12:38:47 89723 奋斗精神.职业道德,即使是努力本身,很大程度上也依赖于幸运的家庭环境.别自己懒的要死却成天做梦想生个孩子成为世界首富,比尔盖茨他爸妈不是又懒又穷. 本文系网易News沸点工作室<槽值>栏目(公众号:caozhi163)出品,每周更新五期. 除夕夜,云南镇雄县15岁的男孩小龙(化名)服农药自杀. 小龙父母常年在外务工,对他也无暇过问.根据小龙遗书和邻居描述,父亲是个暴脾气,在外过得不如意,回家经常打骂孩子.

工作杂谈:学习360产品,用户至上原则

产品的好与坏,不是开发者说了算的,真正有权利做评价的是产品的用户.所以做产品要时时刻刻谨记一条根本原则:用户至上. 以下是围绕这个根本原则具体描述. 一:产品功能选择 在设计产品时,可能产品经理有许多的构想,产品能干这个,能干那个.但是总要有个侧重点,优先实现那些功能,那些功能是最基本的.这里有几条这样的原则: (1)刚性需求 就是这个需求是必要的,用户肯定会用到的.比如360的杀毒软件,云拦截(拦截垃圾电话和短信). (2)感知强 这个功能做出来,用户肯定会用的很舒服,体验很好,给产品加分.

因为选定的用户拥有对象,所以无法除去该用户

sql数据库用户不能删除,提示"因为选定的用户拥有对象,所以无法除去该用户"的解决办法 由于mssql200数据库的错误,我把一个原来的数据库还原到现在的sql上,此时我来到用户里面,想把还原过来的用户删除掉,结果却提示“ 因为选定的用户拥有对象,所以无法除去该用户 ” 因PB会通过登录的用户名自动建立表,因此导致此用户名拥有表对象(可直接删除PB自动建立的表). 1.打开企业管理器,展开服务器,右键点击本地服器,属性: 2.选择 服务器设置 选项卡,勾选 允许对系统目录直接进行修改

构建基于虚拟用户的vsftpd服务器且每个用户拥有独立的目录

第一步:安装需要的软件vsftp,db4-utils,ftp(用于测试) [[email protected] ~]#yum -y install vsftpd db4-utils ftp 第二步:建立虚拟FTP用户的帐号数据库文件 [[email protected] ~]#vi /etc/vsftpd/vusers_list vuser_list文件内容如下: tom (用户名) 123   (用户密码) jerry  (用户名) 456   (用户密码) 注意:不要有空行,一行帐号,一行密