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