Rapidant란 병렬 TCP기반으로, 소프트웨어를 통한 초고속 데이터 전송 플랫폼이라고 한다.
즉, 하드웨어적인 변경 없이 기존 환경에서 가능한 최대의 대역폭을 사용하여 대용량 데이터를 신속하게 전달할 수 있는 기술이라고 한다.
아래의 그림은 Rapidant 사이트에 있는 벤치마크 그림이다.
대략적인 그림만 봐도 기존 전송 속도에 비해 엄청난 시간이 단축된다는 뜻인데... 과연 진짜 가능하려나...
내부적인 구성을 살펴보도록 하자.
위의 그림처럼 크게 sender와 receiver로 이루어져 있고, 각 내부에는 3개의 컴포넌트가 위치한다.
보내는 쪽(sender)의 구성은 Disk Reader를 통해 파일을 읽고, Compressor를 통해 읽은 파일을 압축하고, Socket Writer를 통해 receiver측으로 전송하는 방식으로 구성되어 있다. 만일 압축이 필요한 상황이 아니라면 바로 Socket Sender를 통해 데이터를 보낼 수도 있도록 되어 있다. 압축 필요 여부는 파일의 형식에 따라 지정된다고 한다.
하위 클래스를 통해 생성한 데이터를 Socket을 통해 클라이언트 측으로 전송하는데는 병렬 TCP(Parallel TCP)방식이 사용된다고 한다. 이는, 데이터 전송시에 기존처럼 하나의 TCP 연결을 통해 데이터를 보내는게 아니라, 동시에 복수개의 TCP 연결을 생성하고 각 연결된 소켓에서 동시에 데이터를 전송하는 방식이다.
받는 쪽(reciever)의 구성은 Socket Reader를 통해 sender에서 보낸 데이터를 수신하고, 데이터가 압축되어 있다면 Decompressor를 통해 받은 데이터를 압축 해제하고, Disk Writer를 통해 파일을 생성하는 방식으로 구성되어 있다.
최초, Host A가 데이터 전송을 위한 Control Message를 Host B로 보낸다. 이 Control Message A에는 아래의 Config 정보가 기록된다. 그리고 나면, Host B는 Host A가 전송한 요청의 응답인 Control Message B를 Host A로 전송한다. 이 Control Message B는 아래의 CtrlType 중의 하나의 값이다. 예를들어, SERVER_CONFIG_SUCCESS 같은 값이 전송된다는 뜻이다. Control Message B를 Host A가 수신하면 Host A는 이제 본격적인 데이터 전송을 위한 데이터 채널(여기에서는 병렬 TCP)을 생성하기 위한 Tag Message를 Host B로 전송한다. 이 때, FileBlock을 이용하여 데이터를 보낼 수 있다. 모든 전송이 완료되면, Host B는 데이터 전송 완료를 뜻하는 Control Message C를 Host A로 전송하게 된다.
참고
http://sourceforge.net/apps/mediawiki/rapidant/index.php?title=Rapidant