物理隔离下的数据交换平台难点解析与实践(一)
目录
第零章、前言:为什么?做什么?怎么做?
最近带队做了公司的一个项目,叫数据交换平台,旨在物理隔离的情况下对多端业务系统进行数据的加密、传输、监控。
正好这个项目的架构师也在公司做了一次架构层面的技术分享,我便把此次分享和我在项目实践中遇到的一些坑一起整理出来,形成本系列文章。
本系列文章介绍在物理隔离的网络条件下进行数据交换的难点,以及如何保证文件交换的可靠性和安全性,如何与业务系统做到低耦合。
本文的目的在于跟读者一起经历整个项目,看看项目之初我们为什么去启动这个项目,项目的边界在哪里?
项目启动后我们为什么去这样架构和设计?为什么做这样的选型?
再看看项目之中我们怎样去解决断点续传、文件加解密、文件传输监控、文件存储策略、多节点集群等方面的问题?
最后再看看项目结束之后我们又收获了什么?是否真正地解决了问题?还有没有可改进的地方?
第一章、数据交换平台的一些基本概念
1.1 数据交换与交换平台
数据交换在一般意义上实际上是指物理硬件上的电路交换,而我们本次探讨的内容则是软件系统间的数据交换实现。
那么软件系统中的数据交换都有哪些类型呢?
- API接口
这应该是我们最常用的一种数据交换方式了。可是,API接口也算是数据交换吗?
事实上,我们所有的ESB、webService、API网关、RPC、MQ等等,都是在做系统间通信的工作。
我们想一想,不同的系统间通信什么内容呢?不就是灵与灵的交流、心与心的沟通,嗯,数据跟数据的交换吗?
- 共库
这应该是最简单的一种交换方式了,我把数据放到这个库,然后给你开个只读用户,或者对你开放同义词、视图权限,我写你读,你写我读。
- ETL
ETL是英文Extract-Transform-Load的缩写,指将数据从源端抽取取、转换、加载到目标端的一个过程。
ETL常常用在数据仓库,但其实并不限于数据仓库。
- 数据交换平台
在我的理解中,数据交换平台其实就是ETL的一个扩展集,它可以对多个应用子系统进行信息/数据的传输及共享,对各种分布异构系统进行互联互通,建立中心数据库,完成数据的抽取、集中、加载、展现,有着统一的数据处理和交换方法。
1.2 什么是物理隔离?
那我们本次要说的数据交换平台跟上面定义中的交换平台有什么区别呢?
为什么我们的文章标题中要加一个物理隔离呢?
实际上在我们软件系统数据传输中,大部分都是通过TCP协议来通信的,而在物理隔离的情况下,这一法则将不再适用。
什么是物理隔离?
这个嘛,说起来也是颇具中国特色。在政务内网中,有个名词频频被提及,就是网闸。
这个吊吊的设备提供了我们政务内网与互联网之间的网络安全性。
什么是网闸?来看看百度词条上的一段话:
网闸是使用带有多种控制功能的固态开关读写介质连接两个独立主机系统的信息安全设备。
网闸是怎么保证内外网的安全性的?
由于物理隔离网闸所连接的两个独立主机系统之间,不存在通信的物理连接、逻辑连接、信息传输命令、信息传输协议,不存在依据协议的信息包转发,只有数据文件的无协议"摆渡",且对固态存储介质只有"读"和"写"两个命令。
一句话,就是文件摆渡。另外提一嘴,这个协议隔断可是从链路层搞起的哦。
当前面临的情况就是,一个网闸连接两台主机,只监控这两台主机上指定的文件夹目录,摆渡目录中的文件,从A1到B1,从B2到A2,如此这般。
这两台连接网闸的主机,我们一般叫做前置机。
那么,这两台前置机之间通信只能依赖文件跟文件的交换了。哦,NO。管你什么基于TCP、UDP的HTTP、FTP、TFTP、socket都完蛋。
好吧,看来,网闸真的神一样的存在啊。而网络直连的API接口访问、共库、ETL好像都成了镜花水月一样的东西,看得见,摸不着。只能走自建数据交换平台,使用文件交换这条路了。
紧接着,我们因为这个网闸产生的一系列问题即将接踵而来。
怎么把数据变成文件上传到前置机上去交换?怎么在目标端下载下来?
怎么保证大文件的传输完整呢?中途失败了怎么办?
怎么知道对面的主机收到了我发送的文件呢?网闸可不提供TCP的ACK功能。
怎么保证数据的安全性呢?中途被篡改了怎么办?
怎么保证数据的时序性呢?网闸可不按照时间顺序给你传递文件。
怎么监控数据流转的情况呢?丢包了怎么办?有没有办法可以知道?
嗯,如果想了解以上问题,请看第二章:交换平台的项目边界与架构设计。
第二章在哪里看?额,还没写,等两天吧。