APP下载

基于智能路由器的远程存储管理系统

2015-12-23乔龙飞郑建生陈鲤文

计算机工程与设计 2015年10期
关键词:存储设备离线调用

乔龙飞,郑建生,,陈鲤文

(1.武汉大学 卫星定位导航技术研究中心,湖北 武汉430072;2.武汉大学 电子信息学院,湖北 武汉430072)

0 引 言

传统路由器只是一个网络数据转发节点,不具备可扩展能力。与之相比,智能路由器硬件配置更高、计算能力更强,具有统一接入的云平台,可以与路由器保持通信和连接并进行指令和数据的交互。硬件上也提供了扩展接口比如USB、SD 卡槽等,可支持接入存储设备、视频设备、音频设备等外设[1,2]。

另一方面,快速发展的智能家居技术开始应用于日常生活中,文献 [3]提出一种基于Android和Arduino平台的智能家居方案;文献 [4]提出一种对家庭物联网中数据进行云端分析的框架;文献 [5]提出一种将传感器与智能网关相结合用于家庭消防的机制。然而文献 [3]中Arduino平台适用范围窄且系统不具备扩展性,文献 [4]主要面向数据处理,文献 [5]主要关注消防,对系统的实现和数据的交互关注较少。

结合上述分析,本文设计和实现了一种基于智能路由器的远程API调用框架并在此基础上实现了远程存储管理系统。API调用框架定义了标准的接口数据交互格式和基于命名空间的层次划分体系。提供的存储管理API可对路由器外接大容量存储设备进行远程管理和访问,并可实现离线下载功能。配合智能手机客户端和浏览器web端,可将智能路由器打造为智能家居中的控制中心和数据中心,方便个人数据存储和数据共享、进行离线数据下载等,成为构建智能家居的重要组成部分。

1 系统整体方案设计

系统整体架构如图1所示,分为4个子模块。

图1 系统整体架构

(1)基于HTTP协议的API接口框架。基于智能路由器提供的从服务器端cloud-server到路由器端cloud-client的加密消息通道。参考REST 风格的API设计方法[6],本系统设计了一种按命名空间进行功能划分的远程调用接口体系,定义了接口的输入输出数据格式,实现了接口的远程调用逻辑和权限管理功能。其它子系统的功能API接口基于该体系对外提供。

(2)存储设备管理模块。本系统设计了一个存储管理守护进程storaged,实现对外接存储设备的自动发现、管理功能,并对外提供操作和查询接口。另一方面对Linux文件系统进行封装,屏蔽了硬件和文件系统类型等细节,对外提供API接口实现远程文件管理,比如文件的查看、重命名、删除、移动等文件系统管理功能。

(3)离线下载管理模块。系统设计了一套完整的远程下载接口调用体系,通过对嵌入式P2SP下载器进行封装,支持远程下发离线下载任务、查看任务状态、暂停、重启、删除任务等操作,支持HTTP、FTP、BT 等类型资源的下载。

(4)本地数据传输模块。为方便的对存储设备上的数据进行存取,结合 (2)中的文件系统管理接口,系统实现了基于Nginx代理服务器的数据传输通道。

2 各子模块的设计与实现

本系统基于智能路由器平台hiwifi os和hiwifi cloud搭建,其最重要的特点之一就是具有统一接入的云平台,路由器通过一条稳定且加密的SSL长连接同云平台保持连接,通过该双向消息通道,实现路由器与cloud 平台的互联互通。

云消息通道工作模式如图2所示。路由器启动之后会运行cloud-client守护进程,cloud-client先向服务器发起TLS (transport layer security)加密连接,连接通过之后与云服务器之间进行信息同步,并通过心跳包同服务器保持连接,并报告自身ID 等基本情况。远程调用指令会首先缓存在云服务器的消息队列中,云服务器通过客户端ID 取出消息队列中的消息发送给对应的终端,终端收到消息之后调用信息处理程序进行处理并返回处理结果。

图2 智能路由器云平台消息系统架构

2.1 API接口框架设计与实现

API框架系统在图2所述加密消息通道的基础上实现。路由器端API入口作为一个消息接收者同cloud-client对接,服务器端则作为一个业务系统同cloud-server通信。为简化接口调用模型,服务器端采用同步调用接口同服务器进行通信。

API框架基于HTTP协议,通过域名openapi.hiwifi.com提供一组API用于对路由器的绑定、解绑、授权、查询路由器的工作状态,以及直接调用路由接口。

为防止接口被恶意调用造成安全隐患,框架实现了安全认证机制。调用者需要在平台上申请签名参数app_key和app_secret。调用时需要app_key和app_secret来对请求签名。app_key作为一个明文参数,对应唯一的app_secret,发起请求时使用app_secret对数据进行运算并得出密文,服务器端使用同样的方式对密文进行校验。

该框架同时支持服务器和客户端调用。因服务器相对固定,可直接通过openapi.hiwifi.com 调用相关接口。而客户端往往有多个,并且可能有变化,故客户端需要先通过openapi.hiwifi.com 和特定路由器绑定,成功以后openapi.hiwifi.com 返回一个客户端密匙client_secret。客户端通过请求域名client.openapi.hiwifi.com 来调用被绑定路由器中的接口,此调用需要用client_secret签名。

路由器的局域网内,client.openapi.hiwifi.com 这个域名会被拦截到路由器本身,因此客户端只要访问client.openapi.hiwifi.com就可以直接访问到路由器而不经过外网,这样可以提高接口调用速度,接口调用路径如图3所示。

2.1.1 API数据交互格式设计

API框架接口调用格式如下:

图3 openapi调用路径

https://openapi.hiwifi.com/{action}?sign= {sign}

使用POST 方式提交json 格式的请求数据,HTTP header中的Content-Type需要设为application/json,action包含bind (绑定)、unbind (解除绑定)、call(调用api)、status(获取状态)。

加密认证通过对POST 的数据算出一个校验码sign并作为一个参数,算法如下:

如上文所述,app_id是每个外部调用者的编号,app_secret是每个外部调用者的密匙。

为方便接口的管理和数据交互,框架设计了一个统一的输入输出数据格式。其中输入参数格式如下:

2.1.2API命名空间设计

路由器对外提供的API方法由嵌入式动态语言lua编写。为了更合理的分配和管理接口,方法以namespace命名空间来组织, 各级空间以点号分割, 如system.os.restart。其结构如图4所示。

接口通过lua的module模块来进行组织,相关的接口封装在同一个module中,比如上述restart接口属于opena-pi.system.os这个module。

图4 API namespace结构设计

接口的调用通过在lua语言中模拟反射机制来实现。反射机制是指程序可以访问、检测和修改它本身状态或行为的一种能力[7]。API接口名为调用参数之一,通过字符串的方式输入,框架动态载入相关程序模块,调用对应的函数获得结果并返回给调用者。

2.2 存储设备抽象层设计与实现

2.2.1 自动化存储管理子系统

普通家用路由器并无数据存储能力,智能路由器为嵌入式系统,通过扩展USB 口、SD 卡槽或SATA 硬盘接口支持扩展存储设备。不像PC 系统有稳定的硬盘等存储设备,路由器扩展存储设备可能经常被使用者拔插,且分区、文件系统等各异,所以对存储设备的使用需要特殊处理。本系统设计并实现了一个存储设备管理守护进程storaged,该模块在系统后台运行,对存储设备进行管理。storaged进程维护一个存储设备链表,每个节点代表一个设备,每个设备节点包含设备详细信息以及设备所处的不同状态。

系统利用Linux udev[8]体系和openwrt hotplug热插拔机制对存储设备进行监控。当存储设备接入或者移除系统时,驱动程序初始化并触发内核的hotplug事件,内核通过netlink socket与用户态hotplugd 程序进行通信,storaged会在hotplugd设置回调钩子程序,每当有块设备事件发生就会通知storaged,storaged收到消息开始自动对设备进行管理,根据图5所述状态转移图对设备进行各种操作,最终到稳定状态mountd时会将设备统一挂载到文件系统的目录/tmp/storage下,并新建一些基本目录和文件。这些操作执行过程中也会更新设备链表中的状态信息。storaged会定期对设备进行扫描以保持和系统状态一致。

storaged同时对外提供基于unixsocket的设备信息的查询和操作接口。数据以json 格式输出,方便解析和处理。用户可以通过storaged对存储设备状态进行查询,也可以对storaged下发指令完成对存储设备的卸载、弹出、格式化等操作,避免直接操作存储设备造成的不可预知的后果。

2.2.2 存储管理接口体系

图5 storaged中存储设备状态转移

对存储设备的文件系统进行操作一般只能在系统本地,为了能够远程操作数据,按照CDMI(cloud data management interface)的规范[9],利用构建的API体系在存储设备文件系统上层封装了一层文件系统API接口层,其接口属于openapi.system.fs 命名空间,包括list、rm、link、dirname、stat、 move、rename、 mkdir、touch、access、chmod、chown等所有常用文件系统操作接口。提供了文件系统的远程管理能力,所有数据的交互通过openapi的json格式进行,基于HTTP协议。

2.3 离线下载模块设计和实现

为充分利用路由器的网络接入能力和数据存储能力,系统在智能路由器中内置了P2SP下载器并对其进行封装,设计了一套文件远程推送API框架,可以实现下载任务的新建,查看,暂停,删除等功能。离线下载体系结构如图6所示,整个体系分为3个抽象层次,对外接口层提供完整和通用的API给调用者,见表1。中间的下载器和数据库抽象层负责处理不同下载器的接口调用、数据封装和相关的任务数据存储和查询,下载器封装接口针对不同下载器提供的RPC接口同下载器进行指令和数据的交互。目前该系统可支持HTTP/HTTPS/FTP/BitTorrent及Metalink磁力链等不同类型的资源的下载。

图6 下载器体系结构

2.4 本地数据传输模块

为提供对保存于路由器存储设备上的文件的访问和管理能力 (比如视频不放、文档浏览等),本系统通过Nginx建立本地文件服务器,提供基于HTTP 的文件访问服务[10],数据访问流程如图7所示,当终端设备同路由器直接连通时,可通过局域网直接读取存储设备中的数据和文件。调用者通过查询数据库,获得真实存储路径中的存储接口查询和浏览存储设备上的文件等资源信息,每个资源的数据中包含一个文件访问路径access_path和文件名file,然后客户端向http://dl.hiwifi.com/$access_path/$file发起GET 请求,Nginx收到请求之后,通过内嵌的Nginx lua取出url中的参数,通过这些参数信息到文件Metadata数据库中查询资源的真实存储路径,然后通过内部跳转,直接从路由器的存储设备上取出数据并返回给客户端。客户端通过这种方式,可以以局域网的速度直接打开路由器中的视频、音频、文档等各种类型的文件,而不必下载到本地。且不同客户端可同时读取,实现数据的共享访问。

表1 离线下载相关接口

图7 Nginx 文件服务器架构

3 系统实现及性能测试

该系统目前已开始为hiwifi手机客户端提供服务,客户端可以通过网络随时随地查看和获取信息,对自己所属路由器的存储设备进行管理,以及直接通过网络读取路由器中的数据文件。

3.1 API调用速度分析及测试

该远程调用体系基于HTTP 协议,需要通过网络进行数据传输,如式 (1)所示,接口调用平均时长T 为传输数据量d 除以平均网络传输速率v

手机客户端接口调用有两条数据通道:

(1)局域网:客户端-->路由器;

(2)公网:客户端-->openapi服务器-->cloud服务器-->路由器。

第一种情况,当客户端在局域网内直接连接路由器时,接口调用总时长

式中:Ttr——内网网络传输时间,路由器内网速率为300 Mbps,假设平均每个接口调用传输数据量为200Byte,那么内网调用平均时长为5.33ms。API自身执行时间Ta取决于API的实现及其业务逻辑。表2所示为内网接口调用测试结果,平均每个接口调用10次,从结果可见内网调用网络传输速度较短,调用时长主要受API自身实现所影响,但整体速度较快。

表2 内网API调用时长/ms

第二种情况,客户端不在路由器局域网,接口调用总时间

式中:Tto——终端设备到openapi平台来回时间,Toc——openapi到cloud-server 服务器来回时间,Tcr——cloudserver到路由器cloud-client的来回时间,这种情况下数据传输路径远比第一种复杂,易受到网络不稳定的因素影响。其中手机客户端易受当时网络连接状况影响,最不可控,其它几个环节网络环境相对稳定,可以通过优化尽量保证。在线上服务器抓取用户访问记录得到结果见表3,可见API平均调用时间在秒级,足以满足远程调用需求。

表3 外网API调用时长

3.2 磁盘管理和文件访问接口测试

测试设备上包含一个SD 卡槽和USB 接口,在卡槽中插入一张带有一个独立分区的SD 卡,通过一个USB hub接入两个U 盘。如图8所示,客户端通过调用磁盘列表接口system.storage.list可正确获取并返回存储设备详细信息,通过调用system.storage.list_file接口获取存储设备中所存储的文件夹与文件等数据信息。通过接口也可正常完成存储设备格式化、弹出、文件的浏览、重命名、删除等功能。

图8 磁盘和文件管理接口测试

3.3 离线下载接口测试

通过手机客户端远程下发下载任务,路由器端接收到任务之后,下发到下载器中执行,客户端可以通过接口实时查询下载任务的状态。如图9所示,系统可以正确实现下载任务的添加、暂停等功能,获取任务下载的状态,下载完成之后可以通过手机客户端直接查看相关文件。

图9 离线下载管理接口测试

3.4 文件数据传输测试

通过手机调用接口直接读取设备中的数据,并直接播放视频、音频、浏览文档,同时也可将文件批量转存到本地保存。内网数据传输速度受限于内网带宽、路由器CPU处理能力和存储设备IO 速度,针对不同大小的文件,每个文件下载10 次,统计文件传输的平均速率,得到以下结论。

数据下载速度测试见表4。

表4 数据下载速度测试

从上述测试结果可见,客户端本地通过HTTP 协议直接读取路由器存储设备中的文件平均速度能达到4.2 MB/s左右,足以满足查看文档,播放音乐和普通视频的需求。

4 结束语

本文提出并实现了一种基于智能路由器的远程存储管理系统,利用智能路由器提供的路由器到云端的加密消息通道构建了一套基于HTTP协议的API框架。在此框架的基础上,分别提供了存储设备和文件管理、远程下载管理及数据访问的相关接口。

该系统和手机app结合实现了对路由器存储设备的远程管理和数据的访问功能,可以使路由器成为智能家居的数据中心,方便个人数据备份,家庭成员之间共享照片、视频等文件,并可以充分利用网络和存储资源进行离线下载。

该API框架实现了一种标准的路由器远程调用方式,具备很强的可扩展性,可方便的对各种接入设备提供远程管理接口,为智能路由器作为智能家居中心的地位打下了基础。

[1]FU Ruoyan.The trend of smart router:To become the raffic entrance of smart home [J].IT Time Weekly,2014 (12):33-34 (in Chinese).[傅若岩.智能路由器大潮来临:瞄准智能家居时代的流量入口[J].IT 时代周刊,2014 (12):33-34.]

[2]SONG Yanhong.The war of home data center is beginning,smart router has become a new craze on the Internet[J].IT Time Weekly,2014 (1):43-44 (in Chinese). [宋滟泓.家庭数据中心入口大战开打智能路由器成互联网新宠 [J].IT时代周刊,2014 (1):43-44.]

[3]Kumar S.Ubiquitous smart home system using android application [J].International Journal of Computer Networks &Communications,2014,6 (1):33-43.

[4]CHEN Liang,QIU Jing,ZHU Youchan,et al.Cloud computing architecture oriented household internet of things[J].Application Reach of Computers,2013,30 (12):3686-3689 (in Chinese).[陈亮,仇晶,朱有产,等.面向家庭物联网的云计算架构[J]. 计算机应用研究,2013,30 (12):3686-3689.]

[5]CUI Tieliang,LU Xu,CHEN Yuanfei.Emergency monitoring system of home fire based on cloud services[J].Journal of Safety Science and Technology,2012,8 (12):196-200 (in Chinese).[崔铁良,卢许,陈援非.基于云服务的家庭物联网智能消防系统 [J].中国安全生产科学技术,2012,8(12):196-200.]

[6]Zhou W,Li L,Luo M,et al.REST API design patterns for SDN northbound API[C]//28th International Conference on Advanced Information Networking and Applications Workshops,2014:358-365.

[7]Shams Z,Edwards SH.Reflection support:Java reflection made easy [J].Open Software Engineering Journal,2013,7:38-52.

[8]DeronceléEB,Fuentes AP,Hernández DCT,et al.USB device management in GNU/Linux systems [M].Open Source Software:Mobile Open Source Technologies.Springer Berlin Heidelberg,2014:218-225.

[9]Atre A,Lalingkar P,Rao A,et al.Overview of CDMI specification standard [J].Software Engineering and Technology,2014,6 (7):197-200.

[10]Nedelcu C.Nginx HTTP server second edition [M].Packt Publishing Ltd,2013.

猜你喜欢

存储设备离线调用
异步电机离线参数辨识方法
呼吸阀离线检验工艺与评定探讨
浅谈ATC离线基础数据的准备
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
离线富集-HPLC法同时测定氨咖黄敏胶囊中5种合成色素
基于系统调用的恶意软件检测技术研究
Windows 7下USB存储设备接入痕迹的证据提取
基于Flash芯片的新型存储设备数据恢复技术研究
用批处理管理计算机USB设备的使用