解密普元大文件传输核心技术-阿里云开发者社区

开发者社区> 晚来风急> 正文

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

简介: 本文讲的是解密普元大文件传输核心技术,提起文件数据的传输功能,文件如何传输,如何保障传输的可靠性,不会出现数据错乱等问题是客户最为关心的问题。
+关注继续查看

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

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

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

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

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

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

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

二、传输会话的控制
image

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

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

1、分段传输

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

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

2、数据校验

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

image

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

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

image

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

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

5、流速控制

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

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

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

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

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

image

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

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

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

原文发布时间为: 2017-04-10
本文作者:杨波
本文来自云栖社区合作伙伴EAWorld,了解相关信息可以关注EAWorld。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9482 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2462 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13166 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9048 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21893 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4008 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6885 0
+关注
9380
文章
243
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载