CDP:Write Proxyパターン
提供:AWS-CloudDesignPattern
インターネットストレージへの高速アップロード
目次 |
解決したい課題
インターネットストレージは一般的に、読み込みに対するキャパシティーやデータの耐久性が非常に高い。しかし、冗長性を保つために複数ローケーションに書き込んでいるほか、HTTPプロトコルでクライアントと通信しているので、書き込み速度が比較的劣るという性質がある。大量データをインターネットストレージに書き込む場合に、パフォーマンスが問題になることがある。
クラウドでの解決/パターンの説明
クライアントからインターネットストレージに直接データを転送するのではなく、仮想サーバーでデータを受け、その仮想サーバーからインターネットストレージへ転送する。クライアントから仮想サーバーへの転送では、HTTPよりも高速なプロトコル(例えばUDPベースのプロトコル)を使うことができる。また、小さいサイズのファイルが大量にある場合は、クライアント側で一度アーカイブし、仮想サーバーに転送後に解凍してインターネットストレージに転送することも可能である。仮想サーバーとインターネットストレージは同一リージョンであれば専用線で接続されているため、直接インターネットストレージに転送するよりも、仮想サーバーを経由した方がトータルの転送時間を短くできる。
実装
- データを受け取るためのEC2インスタンスを起動する。EC2インスタンスは、最終的なデータ格納先となるS3と同一リージョンで起動する。
- EC2インスタンス上にFTPサーバーやWebサーバー、AsperaやTsunamiUDPなどのUDP転送ソフト、もしくは転送速度をアクセラレートするようなソフトをインストールする(このサーバーを「アップロードサーバー」と呼ぶ)。
- クライアントからアップロードサーバーにデータを転送する。小さいサイズのファイルが大量にある場合は、一旦クライアントで一つのファイルにまとめる。
- アップロードサーバーへの転送完了後(もしくは逐次処理で)、アップロードサーバーからS3に転送する。クライアントでアーカイブした場合は、アップロードサーバーで解凍後にS3へ転送する。
構造
利点
- S3への転送速度を速くすることができる。
- 特に海外リージョンのS3へのアップロード時には、大幅な転送速度向上を見込める。
注意点
- アップロードサーバーのEC2の書き込み速度(一般的にはEBSへの書き込み速度)がボトルネックとなる場合があるため、必要に応じてディスクをストライピングし(参照: Ondemand Diskパターン)、書込み性能を高くする。
- サイズの小さいEC2インスタンスは相対的に回線が細いため、高い性能が必要な場合は大きなインスタンスを利用する。
その他
- UDPを用いたデータ転送高速化ソリューションとしては、TsunamiUDPやAspera、SkeedSilverBulletなどがある。
- S3への書き込み性能を高める方法として、ファイルを分割して並列に書き込む方法がある(マルチパートアップロードと呼ばれる)
- FTPにてEC2にアップロードし、そのままS3に自動同期させるなど、高速化以外に、ユーザーの利便性を高めることも可能である。[関連ブログ 1]
関連ブログ
- ↑ suz-lab - blog の「"Auto Scaling"でEC2を自動復旧」( http://blog.suz-lab.com/2012/04/auto-scalingec2.html )