computer system

대용량 데이터 업로드 - parallel, multi-part upload

hongiiv 2013. 1. 3. 22:10
반응형
요즘 사용하는 컴퓨터는 코어가 여러개인 멀티-코어가 대세죠, 파일 업로드도 멀티-코어를 이용해서 패러럴하게 업로드하는 방법을 소개하겠습니다. 물론 업로드하는 곳은 아마존의 S3나 KT 클라우드 스토리지와 같은 서비스입니다.

병렬로 즉 멀티-코어를 활용하여 업로드 속도를 빠르게 업로드하는 방법은 크게 아래 그림과 같이 2가지 방식으로 생각해 볼 수 있습니다. 하나는 원본 파일1개에 대해서 클라이언트측에서 잘게 자른후 이 조각들(parts)을 코어/프로세스수에 맞추어 쓰레드로 동시에 업로드하는 것입니다. 실제 swift에는 조각나 저장되어 있지만, 사용자는 다운로드 할 경우에는 마치 1개의 파일인 마냥 사용할 수 있습니다. 물론 이러한 기능은 아마존의 S3도 지원하는 기능입니다.

다른 방법은 여러개의 파일을 업로드하는 경우 동시에 업로드하는 것입니다. 그리고 그림에는 없지만 이 두가지 방법은 섞어서 여러개의 파일을 조각내어 동시에 업로드하는 방법도 생각해 볼 수 있겠습니다.

특히나 genomics 데이터의 경우 하나의 파일이 워낙 large data이다 보니 첫번째 방법만을 사용하는 것이 효율적입니다. 분명 업로드 속도는 개선되지만, 문제는 클라이언트에서 원본 파일을 조각내어야 한다는 것입니다. 즉, 사용자가 직접 파일을 조각내어야 하는데 이때 사용할 수 있는 방법은 리눅스의 split 명령을 이용해서 파일을 조각내는 방법이 있는데, 이건 원본파일과 같은 용량의 저장공간이 별도로 필요하기 때문에 비효율적입니다.

따라서, 물리적으로 파일은 그대로 두고, 파일의 포인터만 옮겨서 하나의 파일에 대해서 다수의 스레드가 동시에 읽어가면서 업로드하는 방법이 있습니다. 물론 이때 클라이언트는 CPU를 좀 많이 잡아먹는다는 단점이 있습니다. 하지만, 별도의 저장공간이 필요하지 않고 물리적으로 파일을 자르는데에 따르는 시간(물론 엄청 빨리 자르긴 하지만,,,)을 절약할 수 있다는 장점이 있습니다. 

 
지금 GenomeCloud에 적용된 파일 업로드 방식은 serial하게 순차적으로 파일 하나를 업로드하고 끝나면 다시 다른 파일을 업로드하는 방식입니다. 전혀 paralle하지 않게 말이죠. 그러니 속도가 느릴 수 밖에 없구요. 하지만 클라이언트는 CPU나 저장공간의 소모없이 원활하게 업로드가 가능하다는 잇점이 있죠.

워낙 다양한 고객이 존재하기에 현재 위에서 소개한 방식으로 paralle 업로드를 적용할 예정으로 좀 더 빠르게 대용량의 genome 데이터를 업로드하실 수 있습니다. 언제? 곧!

이건 좀 다른 이야기이긴한데 시퀀싱 장비에서 생산되는 genome 데이터를 실시간으로 업로드하는 방법에 대한 내용입니다. 위의 내용을 적용해서 paralle하게 업로드하는건데... 이건 특허감이라 나중에 기회가 되면..ㅋ
 
반응형