本文转自微信号EAWorld。扫描下方二维码,关注成功后,回复“普元方法+”,将会获得热门课堂免费学习机会!
提起文件数据的传输功能,文件如何传输,如何保障传输的可靠性,不会出现数据错乱等问题是客户最为关心的问题。普元作为国内领先的软件基础平台与解决方案提供商,在这篇文章里,我将会和大家从架构和技术两个方面解密我所在职的这家公司产品家族中的大文件传输技术。
本文目录:
一、文件传输高可用架构
二、传输会话的控制
三、如何保障文件传输安全可靠
四、总结

一、文件传输高可用架构
大文件传输采用分布式的架构,它包括了三个重要的组成部分:BFT Agent,BFT Server,BFT Console。

BFT Server(中心服务节点):集中管理传输代理节点信息、传输配置信息、日志记录等。
BFT Console(管理控制台):基于BFT Server提供的HTTP接口,为用户提供友好的交互界面,使用Web化的控制台管理整个文件传输系统。
BFT Agent(传输代理节点):大文件传输任务的执行单元,Agent部署在一台独立服务器上运行,监控指定的本地文件系统,它可以发送和接受来自Agent或者其他文件数据源的文件。

文件传输系统的各个组件分布在不同的物理设备之上,通过TCP连接进行交互通讯。作为整个系统的首脑BFT Server就存在单点故障的隐患,例如网络故障、设备故障的,这都造成BFTServer无法正常服务,随之而来的就是整个系统立刻停滞无法正常工作。

为了达到可用性,BFTServer可以部署多个,BFTAgent与其中一个BFTServer进行通讯,如果其中一个连接无法重建,就可以选择使用另外一个可用的BFTServer进行连接。文件传输系统针对性较强,为了达到多个BFTServer之间数据的一致性,将少量用于共享的数据存储在Key-Value数据库中,减少BFTServer之间复制,达到数据一致性。

BFTServer也针对不同的业务数据进行合理规划设计,减小锁粒度或者降低竞争带来的开销,例如BFTAgent在线状态,针对每个Agent配置一个分布式锁,更新在线状态必须获得Agent对应的锁。而对于文件传输记录这样的无状态数据无论在哪一个BFTServer都可以进行持久化存储在同一个数据库中。

二、传输会话的控制

文件传输的传输过程是通过TCP连接,建立文件传输会话,在一次会话当中完成一个文件的传输。
传输会话中存在两类角色,其中发现文件的Agent作为发送方,接受文件的另外一个Agent就是接收方。发送方首先会与接收方进行协商,建立一个用于传输的会话连接,会话建立成功之后,发送方把发现的文件一段一段的切分,切分的每一个数据段在建立好的会话上发送到消费方,消费方接受数据并验证,验证通过之后存储到本地,当接收方接受完成整个文件之后会发送一个回执到发送方,通知发送方文件已经完整无误的接受完成,可以进行后续处理。
由于依赖于网络进行数据传输,大文件传输采取了很多措施来保障文件可以正确无误的传输到目的地,下面为大家一一介绍。

三、如何保障文件传输安全可靠

1、分段传输

由于传输依赖于网络,容易受到网络质量的影响,例如一个1T左右的文件在一个不太稳定的网络中传输,在传输过程中出错频率高,需要具备纠错能力,保证文件完整性。如果一个文件没有采用一个有序的策略去处理,那么大文件可能无法准确无误的到达,所以需要把文件切分成数据段这样更小的单元,通过消息通讯机制进行发送的。这种方式可以控制文件的发送接收、文件完整性的校验等等一系列控制操作。

一个文件被切分为众多数据段,每个数据段分配一个文件的块号,通过块号可以准确无误写入到接收方的临时文件当中。当最后一个文件块到达接收方并写入文件成功之后,更改临时文件名,同时向发送方返回一个确认消息,通知发送方,所有文件块已经接收完成,发送方可以进行下一步操作。在传输的过程中,每个数据段可以进行例如校验、加密、多线程I/O等。

2、数据校验

如果说数据在传输过程中产生错误,错误的数据没有被发现,那么接收到的文件也就无法保障正确性。分段方式传输则可以定位和发现错误,保障文件内容的完整无误。文件传输在读取文件时,对已经读取的数据段进行编号并计算校验和,校验和、编号和数据段一同发送到接收方。当接收方接受完成之后校验,如果验证错误则立刻发送消息到发送方,发送方接收到这个信号之后会从出现问题的编号位置重新读取数据,并将I/O队列清空。

3、断点续传

大文件传输具备从断点位置重新传输的能力,而分段式的传输为断点定位定和续传带来便利。例如文件发送第N块数据时,连接被断开或者会话异常,之后恢复连接和会话重试之后,发送方可以从上次中断的文件块开始继续传输,不需要重新开始。

因为网络和应用层面存在数据缓冲区,所以文件传输的断点是按照接收方存储到文件系统中的实际大小为准,在建立传输会话时由接收方提供给发送方,这样发送方就能准确定位断点。

4、消息优化

文件被分段传输,每个数据段都是在一个个消息上,使用Java对象作为消息进行通讯,由于消息中携带有类型的元数据,码流过大,效率较低,所以大文件传输利用Google Protobuf编解码方案与BFT自定义编解码两种方式混合使用,提高消息的利用率降低码流,以尽可能少的控制数据与文件数据放置在一个消息当中。

其中Protobuf主要负责非文件数据的复杂消息的交互,例如建立会话的请求、回执消息等等。对于文件切分出来的数据块,则采用更为简洁直观的自定义编解码方式。文件数据消息使用特殊BFT自定义消息的主要原因:Protobuf没有NIO接口。如果使用Protobuf只能产生byte[],这样会出现内存复制和GC过程。

5、流速控制

文件传输在实际传输文件的过程中,尤其是大文件,会占用设备带宽资源,影响其它进程的使用,所以文件传输BFTAgent具备实时流控,可以在BFTAgent进程和多个文件传输配置两个维度分配流量,降低对其它进程的影响。流控同时带来另外一个应用场景,那就是优先级。可以针对优先级高的文件,增加流出速率,让高优先级的文件传输的更快一些。

文件传输的带宽设置主要分为两部分,其中BFTAgent设置一个总的可用带宽,BFTAgent所属的文件传输服务从这个总带宽中分配。

由于Java无法直接获取系统底层的网络控制权,流速控制是如何实现呢。大文件传输采用了缓冲队列和定期采集I/O流速的方式实现带宽控制,缓冲队列具备最高水位线,限制可以存储的待发数据,防止内存溢出,当到达控制阈值后,缓冲队列超过最高水位线时,发送不可写事件,通知发送逻辑暂停读取文件,等待恢复至水位线以下或任务被取消。概括如下,

问题:
· 文件较大,传输占用带宽资源,影响其他应用
· 需要对不同的文件采用不同的传输优先级

解决方式:
· 缓冲队列存放待发送数据
· 定时采集流速信息
· 超过流速产生文件读取暂停事件
· 流速下降之后恢复文件读取

6、传输安全

对于传输过程中数据的安全性,文件传输系统支持安全套接字协议。为了满足企业更多的定制化安全策略,同时也提供文件数据的加密、解密接口,可由用户自行实现并放置到系统中,让数据的传输更加安全。这两种方式可以组合使用。

四、总结
从揭秘普元大文件传输的核心可以看出,在高可用的分布式架构中,每个传输节点基于TCP会话把文件切分为数据段进行传输、校验、压缩、断点续传操作,降低了网络等因素的影响,提高了数据传输效率,这些就是保障大文件传输高可用、传输过程可靠的秘密所在。

关于作者:
杨波 普元大数据产品线研发核心架构师
2014年加入普元,现主要从事普元产品ESB、DI、BFT的研发与维护工作 ,对网络和并发编程有浓厚兴趣。

关于EAWorld
微服务,DevOps,元数据,企业架构原创技术分享,EAii(Enterprise Architecture Innovation Institute)企业架构创新研究院旗下官方微信公众号。

扫描下方二维码,关注成功后,回复“普元方法+”,将会获得热门课堂免费学习机会!
微信号:EAWorld。

全新形态的PWorld2017盛大开启,首四场定于7月1日在北京、上海、广州、成都四城同步举行。CSDN专项报名通道可获得现场伴手礼个性T恤一件!

7月1日北京站报名:http://www.bagevent.com/event/611620?bag_track=csdn

7月1日上海站报名:http://www.bagevent.com/event/626256?bag_track=csdn

7月1日广州站报名:http://www.bagevent.com/event/625055?bag_track=csdn

7月1日成都站报名:http://www.bagevent.com/event/626275?bag_track=csdn

解密普元大文件传输核心技术相关推荐

  1. 文件传输-对数据进行加解密的方法!

    由于项目安全要求,需要使用RSA算法对部分关键数据进行加密,并使用OAEPWithSHA-256AndMGF1对数据进行填充.通过搜索最终选择较为通用OpenSSL库,但OpenSSL的RSA算法默认 ...

  2. c 服务器通信和文件传输,服务器、终端和文件传输方法

    1.一种服务器,其特征在于,包括: 交互单元,用于与终端建立连接,并接收终端发送的文件传输参数,以及将所述文件传输参数发送至指定服务器,以使所述指定服务器根据所述传输参数向所述终端发送文件. 2.根据 ...

  3. 零拷贝机制在文件传输中的使用手法

    文章目录 文件传输(读取与发送)中的拷贝与上下文切换 零拷贝技术 sendfile sendfile + SG-DMA mmap + write splice Direct I/O 经典应用 文件传输 ...

  4. XMPP文件传输(XEP-0096协议说明)

    XMPP XEP-0096协议是XMPP中的文件传输协议.        关于文件传输,在xmpp协议中有不少协议可以实现,而XEP-0096协议是其中非常简单的一个协议.由于邮件被删,我的代码dem ...

  5. 【传输文件】文件传输协议FTP、SFTP和SCP

    网络通信协议分层 应用层: HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页) DNS(Domain Name System) FTP(File Transf ...

  6. 文件传输协议FTP/TFTP/SSH/SCP——应用层

    常见的文件传输协议:FTP.TFTP.SSH.SCP 一.FTP(英文:File Transfer Protocol,缩写:FTP) 1.概念 FTP是在网络层传输文件的应用层协议,基于TCP连接,使 ...

  7. 渗透测试常用文件传输方法-Linux篇(如何向Linux服务器中上传文件?) (゚益゚メ) 渗透测试

    文章目录 介绍 攻击机挂载文件 Python脚本挂载 使用阿帕奇服务挂载 传输文件 wget curl netcat sftp 其他方法 DNS传输数据 介绍 文件上传一般分为上传和下载,下面我所指的 ...

  8. SSH和文件传输(SCP)

    装载自 http://wuyong0125.blog.163.com/blog/static/5692021020086144740373/ SSH和文件传输(SCP) 默认分类 2008-07-01 ...

  9. SSH-远程连接文件传输

    SSH 常用远程连接软件 Putty:PuTTY为一开放源代码软件,只有500多k,小巧轻便,但功能单一 SecureCRT:SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简 ...

  10. 文件传输协议的五种安全文件传输替代方案

    对安全文件传输协议的需求,过去,文件传输协议(FTP)是发送文件的常用协议.这是一个更简单的时期,安全性比今天要少得多. 但是随着黑客变得越来越复杂,他们发现FTP缺乏安全性.他们知道FTP可以通过有 ...

最新文章

  1. 常用数据结构讲解与案例分析
  2. 在CentOS 6.9 x86_64的OpenResty 1.13.6.1上使用LuaRocks示例
  3. IE9(测试版)浏览器实用快捷键使用方法
  4. shader 4 杂 一些和函数名词、数据结构
  5. python win32ui选取文件夹_最全 Python 算法实现资源汇总!
  6. java 二进制as_Java中的二进制文本
  7. 续--Flask, Django - 区别
  8. opencv-Getting Started with Videos
  9. 微软power bi_Microsoft Power Platform快速概述
  10. php 复制文件夹并压缩到最小_php实现对文件压缩简单的方法
  11. 一个在线文本比较工具
  12. linux命令mvn,Linux下使用mvn命令(maven)
  13. Office 2007卸载
  14. 单模光纤最大传输距离为多少_单模光纤的最长传输距离有多远?单模,多模光纤有什么不同呢?...
  15. VTN系列多通道振弦、温度、模拟传感信号系列数据采集仪
  16. P2P: Tuning Pre-trained Image Models for Point Cloud Analysis with Point-to-Pixel Prompting
  17. centos7 安装 Firefox
  18. xmapp 在Mac下配置
  19. 滑块拖动验证码智能识别验证码技术(持续更新)
  20. linux系统安装--安装文件大于4G,fat32的硬盘或者优盘无法安装--解决方案

热门文章

  1. Spring 揭秘 12.1
  2. mysql中主键数据类型_MySQL系列-详解mysql数据类型
  3. (原创)十大危险cmd命令代码总结
  4. rmt_redis.c:6446 ERROR: Can't handle RDB format version redis-migrate-tool迁移工具报错
  5. 数字签名工具signtool
  6. Listary -- 高效率办公软件
  7. Windows2019在IIS下添加.NET Framework 3.5 NetFx3 失败 (状态为:0x800f0950)的解决办法)
  8. SQL Server 2012安装异常:Error while enabling Windows feature: NetFx3, Error Code: -2146498298
  9. HTK中函数ProcessCrossWordLinks处理流程
  10. Maple公式推导教程