通过SFTP数据流与对象存储服务器的通信方法与流程

文档序号:21720195发布日期:2020-08-05 01:10阅读:916来源:国知局
通过SFTP数据流与对象存储服务器的通信方法与流程

本发明涉及数据流的通信方法,具体讲是通过sftp数据流与对象存储服务器的通信方法。



背景技术:

sftp(secretfiletransferprotocol)是一种基于安全文件传送协议的数据流连接方式,能够提供文件访问、传输和管理功能的网络传输协议等功能。

对象存储,也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。文件和对象都有与它们所包含的数据相关的元数据,但是对象是以扩展元数据为特征的。每个对象都被分配一个唯一的标识符,允许一个服务器或者最终用户来检索对象,而不必知道数据的物理地址。这种方法对于在云计算环境中自动化和简化数据存储有帮助。常见的对象存储服务器包括有阿里云的对象存储、七牛的对象存储、aws的对象存储等。

在现有技术中,用户不能通过sftp数据流来操作对象存储服务器,只能通过sftp数据流在操作文件服务器等块存储服务器,或者通过sdk、api来操作对象存储服务器。由于块存储服务器是直接使用硬盘或用需要通过nas等协议将数据封装后才能处理,对象存储屏蔽了具体存储格式,对外提供存储接口,因此对象存储相比块存储具有更灵活、更便利的优点。因此,如何通过sftp数据流来操作对象存储服务器是一个需要解决的技术难题。



技术实现要素:

本发明提供了一种通过sftp数据流与对象存储服务器的通信方法,通过sftp数据流操作对象存储服务器,以可以利用对象存储大数据量、高可用和高并发的特点。

本发明通过sftp数据流与对象存储服务器的通信方法,包括步骤:

a.通过sftptransporter模块监听指定的tcp协议通信端口,等待sftp客户端连接;

b.sftptransporter模块根据sftp客户端发送的连接请求和sftp客户端建立连接;

c.sftp客户端发送sftp命令给对应的sftptransporter模块,sftptransporter模块将接收到的sftp命令传递给sftpcommanddispatcher模块,sftpcommanddispatcher模块根据sftp命令映射表找到对应的命令处理器后,将该sftp命令分发给对应的命令处理器,所述的sftp命令至少包括list命令、get命令和put命令;

d.命令处理器接中对应的commandhandler收到sftp命令后,通过命令处理器的objectstoreadapter模块调用对象存储服务器中容器集群管理系统的driver,所述driver通过http协议发送sftp命令到对象存储服务器的处理模块对sftp命令进行响应,再依次通过所述的driver、objectstoreadapter模块、commandhandler、sftpcommanddispatcher模块和sftptransporter模块,将对象存储服务器的响应返回给所述的sftp客户端。

通过本发明的通信方法,能够在对用户透明的情况下,使用对象存储替换了现有的块存储,让用户在无需修改代码和使用习惯的情况下,获得了对象存储的大数据量、高可用、高并发的优势。

进一步的,步骤b中,当sftp客户端发送的连接请求给sftptransporter模块后,sftptransporter模块创建socket连接,并返回认证要求;sftp客户端收到所述认证要求后,发送sshkey给sftptransporter模块,sftptransporter模块对其中的key进行验证,如果验证通过,创建相应的session并连接成功;如果验证失败,返回失败信息。

进一步的,步骤c中,sftptransporter模块将接收到的sftp命令传递给sftpcommanddispatcher模块后,sftpcommanddispatcher模块解析该sftp命令,如果该sftp命令不是合法的,sftpcommanddispatcher模块则通知sftptransporter模块返回异常信息给sftp客户端,sftptransporter模块删除当前session,并断开与sftp客户端的连接;如果该sftp命令是合法的,sftpcommanddispatcher模块再根据sftp命令映射表找到对应的命令处理器和分发sftp命令。

具体的,所述的list命令用于列出当前目录下的所有文件和目录,步骤d中,命令处理器中的listcommandhandler接收到list命令后,调用objectstoreadapter模块的list方法,通过objectstoreadapter模块的list方法委托对象存储服务器中容器集群管理系统的driver的list方法,所述driver通过http协议发送get请求到对象存储服务器的处理模块对get请求进行响应,对象存储服务器响应后返回当前目录下的文件和目录列表;所述driver获取到对象存储服务器的响应后,再解析httpresponse,将响应的消息体取出并序列化为字符串,然后返回给objectstoreadapter模块,objectstoreadapter模块再将所述字符串返回给listcommandhandler,listcommandhandler通过sftptransporter模块将字符串返回给sftp客户端。

具体的,所述的get命令用于下载指定的文件,步骤d中,listcommandhandler接收到get命令后,调用objectstoreadapter模块的get方法,通过objectstoreadapter的get方法委托对象存储服务器中容器集群管理系统的driver的get方法,所述driver通过http协议发送get请求到对象存储服务器的处理模块进行http响应,响应后的httpbody为通过下载的文件生成的输出流;所述driver获取到对象存储服务器的响应后,在临时目录下新建临时文件,再将获取的所述输出流写入该临时文件,再通过objectstoreadapter模块将该临时文件返回给getcommandhandler,getcommandhandler通过sftptransporter模块将临时文件的内容序列化为sftp协议格式发送给sftp客户端。

具体的,所述的put命令用于上传文件,步骤d中,putcommandhandler接收到put命令之后,调用objectstoreadapter模块的put方法,objectstoreadapter模块的put方法根据接收到的sftp客户端传输来的文件流,在临时目录下创建临时文件,将所述文件流输出到临时文件中,然后再调用对象存储服务器中容器集群管理系统的driver的put方法,将临时文件作为输入,发送给对象存储服务器的处理模块,对象存储服务器的处理模块收到该临时文件后在对应的目录下创建相应的文件。

本发明通过sftp数据流与对象存储服务器的通信方法,能够在对用户透明的情况下通过sftp数据流操作对象存储服务器,而且对现有系统没有侵入性,不需要修改系统代码。

以下结合实施例的具体实施方式,对本发明的上述内容再作进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段做出的各种替换或变更,均应包括在本发明的范围内。

附图说明

图1为本发明通过sftp数据流与对象存储服务器的通信方法的流程图。

具体实施方式

如图1所示本发明通过sftp数据流与对象存储服务器的通信方法,包括步骤:

a.通过sftptransporter模块监听指定的tcp协议通信端口,如tcp的22端口,等待sftp客户端连接。

b.sftp客户端发送的连接请求给sftptransporter模块后,sftptransporter模块创建socket连接,并返回认证要求。sftp客户端收到所述认证要求后,发送sshkey给sftptransporter模块,sftptransporter模块对其中的key进行验证,如果验证通过,创建相应的session并连接成功。如果验证失败,返回失败信息。

c.sftp客户端发送sftp命令给对应的sftptransporter模块,sftptransporter模块将接收到的sftp命令传递给sftpcommanddispatcher模块,sftpcommanddispatcher模块解析该sftp命令,如果该sftp命令不是合法的,sftpcommanddispatcher模块则通知sftptransporter模块返回异常信息给sftp客户端,sftptransporter模块删除当前session,并断开与sftp客户端的连接。如果该sftp命令是合法的,sftpcommanddispatcher模块则根据sftp命令映射表找到对应的命令处理器,将该sftp命令分发给该命令处理器。所述的sftp命令至少包括list命令、get命令和put命令。

d.命令处理器接中对应的commandhandler收到sftp命令后,通过命令处理器的objectstoreadapter模块调用对象存储服务器中容器集群管理系统的driver,所述driver通过http协议发送sftp命令到对象存储服务器的处理模块对sftp命令进行响应,再依次通过所述的driver、objectstoreadapter模块、commandhandler、sftpcommanddispatcher模块和sftptransporter模块,将对象存储服务器的响应返回给所述的sftp客户端。

以国内常用的ks3对象存储服务器中容器集群管理系统的driver为例,对上述的各命令的处理过程为:

list命令:

list命令用于列出当前目录下的所有文件和目录,相当于列出ks3对象存储服务器中当前bucket下的所有文件和目录。命令处理器中的listcommandhandler接收到list命令后,调用objectstoreadapter模块的list方法,通过objectstoreadapter模块的list方法委托ks3对象存储服务器中容器集群管理系统的driver的list方法,所述driver通过http协议发送get请求到ks3对象存储服务器的处理模块对get请求进行响应,ks3对象存储服务器响应后返回bucket下的文件和目录列表。所述driver获取到ks3对象存储服务器的响应后,再解析httpresponse,将响应的消息体取出并序列化为字符串,然后返回给objectstoreadapter模块,objectstoreadapter模块再将所述字符串返回给listcommandhandler,listcommandhandler通过sftptransporter模块将字符串返回给sftp客户端。

get命令:

get命令用于下载指定的文件,即下载bucket中指定的文件。listcommandhandler接收到get命令后,调用objectstoreadapter模块的get方法,通过objectstoreadapter的get方法委托ks3对象存储服务器中容器集群管理系统的driver的get方法,所述driver通过http协议发送get请求到ks3对象存储服务器的处理模块进行http响应,响应后的httpbody为通过下载的文件生成的输出流。所述driver获取到ks3对象存储服务器的响应后,在临时目录/tmp下新建临时文件,再将获取的所述输出流写入该临时文件,再通过objectstoreadapter模块将该临时文件返回给getcommandhandler,getcommandhandler通过sftptransporter模块将临时文件的内容序列化为sftp协议格式发送给sftp客户端。

put命令:

put命令用于上传文件,即上传文件到bucket中。putcommandhandler接收到put命令之后,调用objectstoreadapter模块的put方法,objectstoreadapter模块的put方法根据接收到的sftp客户端传输来的文件流,在临时目录/tmp下创建临时文件,将所述文件流输出到临时文件中,然后再调用ks3对象存储服务器中容器集群管理系统的driver的put方法,将临时文件作为输入,发送给ks3对象存储服务器的处理模块,ks3对象存储服务器的处理模块收到该临时文件后在bucket下创建相应的文件。

通过本发明的通信方法,能够在对用户透明的情况下,使用对象存储替换了现有的块存储,而且对现有系统没有侵入性,不需要修改系统代码,让用户在无需修改代码和使用习惯的情况下,获得了对象存储的大数据量、高可用、高并发的优势。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1