解密普元大文件传输核心技术

本文讲的是解密普元大文件传输核心技术,提起文件数据的传输功能,文件如何传输,如何保障传输的可靠性,不会出现数据错乱等问题是客户最为关心的问题。普元作为国内领先的软件基础平台与解决方案提供商,在这篇文章里,我将会和大家从架构和技术两个方面解密我所在职的这家公司产品家族中的大文件传输技术。

本文目录:
一、文件传输高可用架构
二、传输会话的控制
三、如何保障文件传输安全可靠
四、总结

一、文件传输高可用架构
大文件传输采用分布式的架构,它包括了三个重要的组成部分: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队列清空。

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

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

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

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

5、流速控制

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

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

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

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

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

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

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

如需成为EAii架构研究院会员加入微信群参与架构设计与讨论直播,享受微课堂PPT抢先下载等权益,请发送您的微信号至此公众号eaworld。

时间: 2024-09-17 03:57:47

解密普元大文件传输核心技术的相关文章

OpenSSH最流行的文件传输和远程登录Linux应用程序

OpenSSH是最流行的文件传输和远程登录Linux应用程序之一,它提供了多种在客户端和服务器之间建立加密的远程终端和文件传输连接的方式. OpenSSH Secure http://www.aliyun.com/zixun/aggregation/16458.html">Copy (SCP) 和 Secure FTP (SFTP) 程序是FTP的安全替代品, 同时Secure Shell (SSH) 常常被用作是TELNET的一个默认替代程序.OpenSSH 并不局限于Linux系统:

android Socket实现简单聊天功能以及文件传输

干程序是一件枯燥重复的事,每当感到内心浮躁的时候,我就会找小说来看.我从小就喜爱看武侠小说,一直有着武侠梦.从金庸,古龙,梁羽生系列到凤歌(昆仑),孙晓(英雄志)以及萧鼎的(诛仙)让我领略着不一样的江湖. 如果你有好看的武侠系列小说,给我留言哦.题外话就扯这么多了,接着还是上技术. 看看今天实现的功能效果图: 可以这里使用多台手机进行通讯,我采用的服务器发送消息. 是不是只有发送消息,有些显得太单调了.好,在发送消息的基础上增加文件传输.后期会增加视频,音频的传输,增加表情包.那一起来看看图文消

同时-IIS 搭建FTP服务 文件传输受限

问题描述 IIS 搭建FTP服务 文件传输受限 在内网中一台PC机上使用IIS搭建FTP服务,在测试文件传输的时候发现最多只允许两个下载 其它请求都在排队,不知道这个是在哪里设置的?

Linux与windows之间-文件传输工具RZSZ

RZSZ简介 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆 linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地 : 与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地 机器 rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器 rz, sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具,windows端需要支持ZMode

文件传输-java 编译出现找不到符号错误

问题描述 java 编译出现找不到符号错误 //导入包import javax.swing.JPanel;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JTextField;import static java.awt.BorderLayout.*;import javax.swing.JScrollPane;import java.awt.

标准C实现基于TCP/IP协议的文件传输

TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如下: 1.Socket系统调用  为了进行网络I/O,服务器和客户机两端的UNIX进程要做的第一件事是调用socket()系统调用,建立软插座,指明合适的通讯协议.格式为:  1 2 3 #include >sys/types.h> #include >sys/socket.h>    int socket(int family,int type,int 

FTP文件传输协议两种方式的工作原理

FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式). Standard模式 FTP的客户端发送 PORT 命令到FTP server.Passive模式FTP的客户端发送 PASV命令到 FTP Server. 下面介绍一个这两种方式的工作原理: Standard模式 FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个

FTP非交互方式文件传输

FTP(FileTransferProtocol)是文件传输协议,通过它可以从计算机传输或传输到计算机文件.FTP命令可以交互方式使用,也可以非交互方式使用.交互方式的使用较简单,命令执行时系统会逐步提示,非交互方式的实现虽然复杂,但大大方便使用者,因为FTP会自动完成所有的操作.我们在使用FTP命令时,为了操作方便,往往会按非交互方式使用,下面笔者就介绍在SCOUNIX3.0下FTP实现非交互方式的处理. 在UNIX系统下,使用RCP命令可以实现远程文件传输,但双方都必须为同一种系统,如果远程

Java 网络文件传输

网络 读者范围: 本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解. 正文: 关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论: 图1: 分析图1我们基本可以知道从服务器文件系统中通过流把文件中的数据写入到服务器的进程中,然后把进程中的数据通过网络IO系统传递到客户机,这个阶段,网络中的数据以字节流的形式保存.当该字节流被客