ㅁ 풀어야 할 문제
인터넷 스토리지는 일반적으로 읽기에 대한 수용 능력 및 데이터 안정성이 매우 뛰어나다. 그러나 이중화를 위해 여러 지역에 쓰기가 이루어지고 있고 HTTP 프로토콜로 클라이언트와 통신하므로 비교적 쓰기 속도가 느린 특성이 있다.
따라서, 큰 데이터를 인터넷 스토리지에 쓰는 경우 성능이 문제가 될 수 있다.
ㅁ 해결/패턴
클라이언트에서 인터넷 스토리지에 직접 데이터를 전송하는 것이 아니고, 가상 서버로 데이터를 받아 그 가상 서버로부터 인터넷 스토리지로 전송함
클라이언트에서 가상 서버로의 전송은 HTTP보다 빠른 프로토콜(예를 들어, UDP 기반의 프로토콜)을 이용할 수 있다.
또, 작은 용량의 파일이 많을 경우 클라이언트 쪽에서 한번 압축하여 가상 서버로 전송 후 압출을 풀어 인터넷 스토리지에 전송 가능
가상 서버와 인터넷 스토리지는 같은 지역이라면 전용선이 연결되어 있어 직접 인터넷 스토리지에 전송하는 것보다 가상 서버를 통해 전송하는 것이 전체 전송 시간을 단축 시킬 수 있다.
ㅁ 구현
- 데이터를 받기 위한 EC2 인스턴스를 가동함. EC2 인스턴스는 최종적으로 데이터를 저장할 S3와 같은 지역에 가동
- EC2 인스턴스에 FTP 서버나 웹 서버, Aspera나 TaunamiUDP 등의 UDP 전송 소프트웨어, 또는 전송 속도를 가속화하는 소프트웨어를 설치 (이 서버를 업로드 서버로 함)
- 클라이언트에서 업로드 서버로 데이터를 전송함. 작은 용량의 파일이 많을 경우 일단 클라이언트에서 한 개의 파일로 합친다.
- 업로드 서버로 전송 완료 후 (또는 순차 처리로) 업로드 서버에서 S3에 전송함. 클라이언트에서 압축한 경우는 업로드 서버에서 압축을 푼 후S3로 전송함
- S3로의 전송 속도를 빠르게 할 수 있다.
- 특히, 해외 지역의 S3로 업로드할 경우 많은 속도 향상을 기대할 수 있다.
- 업로드 서버 EC2의 쓰기 속도(일반적으로 EBS에 쓰기 속도)가 병목 구간이 되는 경우가 있으므로 필요에 따라 디스크를 스트라이핑하여 속도를 올려줌
- 크기가 작은 EC2 인스턴스는 상대적으로 회선의 대역이 작기 때문에 높은 성능이 필요한 경우 큰 인스턴스를 이용
ㅁ 기타
- UDP를 이용한 데이터 전송 고속화 솔루션으로는 TsunamiUDP나 Aspera, Skeed SilverBullet 등이 있다.
- S3로의 쓰기 성능을 높이는 방법으로는 파일을 분할하고 병렬로 쓰는 방법이 있다. (Multipart Upload라고함)
- FTP로 EC2에 업로드할 경우, 그대로 S3에 자동 동기화시키는 등 고속화 외에도 사용자의 편리성을 높일 수 있다.
'AWS Design Pattern > 데이터 업로드 패턴' 카테고리의 다른 글
Direct Object Upload - 업로드 절차 간소화 (0) | 2021.02.05 |
---|---|
Storage Index - 인터넷 스토리지 검색 효율화 (0) | 2021.02.05 |