1. 直传用户指南¶
1.1. 直传简介¶
对于使用NOS服务的用户来说,上传必须的功能。而直传的主要目的是为了解决用户上传速度慢、接入成本高的问题。使用直传功能,用户可以将数据上传存储的问题都交给NOS,只需要关注自己具体的业务实现即可。并且直传采用了一系列的优化手段,相对于非直传来说,能够显著提高用户的上传速度。
1.2. 背景¶
传统的上传方式为,用户在移动端或者Web端将文件上传到业务服务器,业务服务器再将数据上传到NOS。
该方案有以下几个缺点:
- 上传慢。从客户端将文件上传到业务服务器,再上传到NOS,上传路线长了一半。如果从客户端直接上传到NOS,传输距离近了一半,并且NOS在国内外部署了多个边缘节点,优化了边缘节点和中心机房的传输协议,速度更快。
- 扩展性差。由于用户的上传都要经过业务服务器,因此业务服务器既需要关注业务逻辑,也需要实现上传功能。随着用户数的增加,业务服务器很容易成为瓶颈,由于NOS采用的是云存储,可以认为处理能力是无限的。因此业务服务器随着用户数增加要不断扩容。增加了用户的负担。
- 安全性差。直传提供了对HTTPS和HTTP协议的双支持,安全性更高。
- 健壮性低。如果业务服务器出现问题,或者业务服务器所在网段出现问题,服务都会瘫痪。而直传提供了高可用方案,有多个机房,健壮性高。
由于考虑到传统的上传方式具有以上比较明显的缺点,因此提出了直传的解决方案。
1.3. 直传架构¶
1.3.1. 上传模型¶
- 客户端端向业务服务器请求上传Token(从安全角度考虑不建议将Token的生成放在移动端或者Web端),具体的Token生成规则参考 上传凭证 :
- 客户端携带Token将数据发往直传网络
- 直传服务将数据发往NOS(直传服务器和NOS在同一个机房)
直传能做到上传速度更快、成功率更高,主要采用了以下几种手段:
- 布点,在国内外多个区域都有加速节点
- 协议优化
- pipeline上传
1.3.2. 边缘节点¶
国内外多个区域都部署有边缘节点,客户端在上传的时候,会使用上传速度最快的边缘节点进行上传。NOS会在不同的地点以“国家+省份+城市+运营商”为维度统计到不同节点的上传速度,从而给用户提供最优的上传节点。上传到边缘节点后,边缘节点会通过优化的网络协议上传到直传服务器。
1.3.3. 协议优化¶
NOS在上传协议方面做了很多优化。
1.3.3.1. 分片上传¶
NOS提供了分片上传接口,对于一个大文件,可以分成很多片进行上传(最大不超过10000片)。
1.3.3.2. 断点续传¶
NOS提供了断点续传功能。对于一个大文件,分片上传时如果有一片上传失败,不需要从头开始重新上传,使用NOS提供的上传上下文可以查询到断点信息,从断点处进行再次上传。并且NOS的断点信息采用持久化保存。
1.3.3.3. TCP优化¶
从TCP协议的滑动窗口、拥塞窗口等方面对TCP协议进行了针对性的调整,使其更符合直传的应用场景。
1.3.4. pipeline上传¶
非pipeline的HTTP协议上传是串行上传,无法充分利用用户端的带宽。
从对比可以看出pipeline上传非一问一答式上传,能够连续发送多个HTTP请求,能够充分利用用户带宽。