アマゾン氷河
つまり、Amazon Glacierは、アーカイブ/バックアップを保存するために設計された非常に魅力的なストア価格サービスです。 しかし、アーカイブを復元するプロセスはかなり複雑であり、かつ/または高価です。 ただし、このサービスは二次バックアップに非常に適しています。
Glacierの詳細については 、すでにギーク誌に書いています。
投稿について
ローカルディレクトリをGlacierサービスと同期するためにPerlでオープンソースクライアントを共有し、氷河で作業する際のニュアンスについても説明し、その作業のワークフローを説明します。
機能的
mtglacier GitHub リンク
プログラムの特徴:
- AWSプロトコルは独立して実装され、サードパーティのライブラリは使用されません。 日曜大工Amazon署名バージョン4署名プロセスとツリーハッシュ計算
- マルチパートアップロードの実装
- アーカイブのマルチスレッドアップロード/ダウンロード/削除
- マルチスレッドとマルチパートアップロードの組み合わせ。 つまり 3つのストリームでファイルAの一部をアップロードでき、さらに2つのストリーム-ファイルBの一部、別のファイルでファイルCのアップロードを開始できます。
- ローカルログファイル(追加モードでのみ書き込み用に開かれます)。 結局のところ、Glacierでファイルのリストを取得するには、4時間待つ必要があります
- ローカルファイルのチェックサムとログを比較する機能
- アーカイブをダウンロードするとき、一度にダウンロードされるファイルの数を制限する機能(ダウンロードアーカイブの特定の請求のために必要)
プロジェクト目標
1つのプログラムに4つのことを実装します(これらはすべて別個ですが、一緒にではありません)
- Perl実装-プログラムが作成される言語/テクノロジーは、エンドユーザー/管理者にとっても重要だと思います。 そのため、異なる言語の実装を選択する方が良い
- 必ずAmazon S3サポートを計画してください
- マルチパート操作+マルチスレッド操作-
multipartは、数ギガバイトをリモートサーバーにアップロードし、突然接続が切断される状況を回避するのに役立ちます。 マルチスレッドはダウンロードを高速化し、小さなファイルのヒープのロードまたは多数のファイルの削除を大幅に高速化します
- プロトコルの独自の実装-コードを再利用可能にし、CPANで個別のモジュールとして公開する予定です
仕組み
ファイルをサービスに同期する場合、 mtglacierはログ(テキストファイル)を作成します。ログにはすべてのアップロードファイル操作が記録されます。各操作について、ローカルファイルの名前、アップロード時間、ツリーハッシュファイル、受信したarchive_idファイル。
Glacierからローカルディスクにファイルを復元する場合、リカバリ用のデータはこのログから取得されます(glacierでファイルを一覧表示できるのは4時間以上の遅延がある場合のみ)。
Glacierからファイルを削除すると、削除エントリがログに追加されます。 Glacierで再同期すると、ログによって判断して、存在しないファイルのみが処理されます。
2パスファイルリカバリ手順:
- ログには存在するがローカルドライブには存在しないファイルをダウンロードするタスクが作成されます
- 4時間待った後、2番目のコマンドを実行してこれらのファイルをダウンロードできます
警告
- 使用前にAmazon Webサイトで価格を確認してください。
- Amazon に関するよくある質問
- いいえ、本当に、価格を確認してください
- Glacierで「プレイ」する前に、最後にすべてのアーカイブを削除できることを確認してください。 実際には、Amazon Consoleを使用してアーカイブを削除したり、ボールトを空にしたりできない
- glacierを使用したマルチスレッドの作業では、最適なスレッド数を選択する必要があります。 特定のストリームごとにダウンロードするのが遅すぎる場合、AmazonはHTTP 408タイムアウトを返します(その後、mtglacierストリームが1秒間停止し、5回以内に再試行します)。 そのため、マルチスレッドのダウンロードはシングルスレッドよりも遅くなる可能性があります
- 今のところ-これはベータ版です。 本番環境での使用は推奨されません
使い方
- AmazonコンソールでVaultを作成する
- glacier.cfgを作成します(ボールトが作成されたのと同じリージョンを指定します)
キー= YOURKEY 秘密=あなたの秘密 地域= us-east-1
- Glacierでローカルディレクトリを同期します。 並行性パラメーターを使用して、スレッドの数を示します
./mtglacier.pl sync --config=glacier.cfg --from-dir /data/backup --to-vault=myvault --journal=journal.log --concurrency=3
- ファイルを追加してもう一度同期できます
- ファイルの整合性をチェックする(ログでのみチェックされる)
./mtglacier.pl check-local-hash --config=glacier.cfg --from-dir /data/backup --to-vault=myvault --journal=journal.log
- /データ/バックアップからいくつかのファイルを削除できます
- データ回復ジョブを作成します。 max-number-of-filesパラメーターを使用して、復元するアーカイブの数を指定します。 現時点では、数十を超える値を指定することはお勧めしません(現在のジョブのリストが複数のページにロードされるまで実装されます)
./mtglacier.pl restore --config=glacier.cfg --from-dir /data/backup --to-vault=myvault --journal=journal.log --max-number-of-files=10
- 4時間以上待つ
- 削除されたファイルを回復する
./mtglacier.pl restore-completed --config=glacier.cfg --from-dir /data/backup --to-vault=myvault --journal=journal.log
- バックアップが不要になった場合、Glacierからすべてのファイルを削除します
./mtglacier.pl purge-vault --config=glacier.cfg --from-dir /data/backup --to-vault=myvault --journal=journal.log
実装
- LWPで実装されたHTTP / HTTPS操作:: UserAgent
- Amazon APIとの相互作用はゼロから書かれ、唯一のダイジェスト:: SHAモジュールが使用されます(コアモジュール)
- Amazon Tree Hashの独立した実装(これは独自のチェックサム計算アルゴリズムであり、TTHアルゴリズム間で類似するものは見つかりませんでしたが、正しくない場合は修正します)
- forkプロセスを使用して実装されたマルチスレッド
- 信号による異常処理の処理
- プロセス間通信-名前のないパイプを使用
- ジョブキューは、FSMに似たOOPオブジェクトです
これまで欠けているもの
最初のベータ版の主なものは、安定して動作する(アルファ版ではない)バージョンで、週の終わりまでに準備ができていたため、まだ多くのことが欠けています。
それは必須です:
- 調整可能なチャンクサイズ
- 非マルチパートアップロード
- 構成内のSNS通知のトピック
- SNS通知を介して信号を受信するための外部との統合
- 内部屈折
- ユニットテストは、順番に並べると公開されます。
- 別のテストスイート、おそらく氷河サーバーエミュレーターがあります
- もちろん、ベータ版ではなく、本番用のバージョンがあります