Amazon Simple Storage Service ( Amazon S3 ) は、最も広く使用されている信頼性の高いクラウド ストレージ サービスの 1 つであり、拡張性と耐久性に優れたストレージを提供します。多くの S3 顧客にとって重要な要件は、データの最大の稼働時間と可用性を確保することです。この記事では、S3 がその堅牢なシステム アーキテクチャと実装を通じてどのようにして 99.99% 以上の可用性を達成するのかを詳しく見ていきます。
Amazon クラウド テクノロジー開発者コミュニティは、開発者にグローバルな開発テクノロジー リソースを提供します。技術ドキュメント、開発事例、技術コラム、トレーニングビデオ、アクティビティやコンテストなどがあります。中国の開発者が世界最先端のテクノロジー、アイデア、プロジェクトとつながることを支援し、優れた中国の開発者やテクノロジーを世界のクラウド コミュニティに推奨します。まだフォロー・収集していない方は、見かけても慌てずスルーしてください♪ここをクリックして技術の宝庫にしてください! |
この包括的なガイドでは、次のような主要な S3 可用性アーキテクチャについて説明します。
- アベイラビリティーゾーン(AZ)間のデータレプリケーション - S3 は、書き込みをコミットする前に、データを少なくとも 3 つの AZ に同期的にレプリケートします。
- インテリジェントなリクエスト ルーティング - S3 は、リクエストされたデータを取得するためにトラフィックを最も近い施設にルーティングすることで遅延を最小限に抑えます。
- 迅速な障害検出 - S3 はヘルスチェックを使用して数秒で障害を検出し、回復をトリガーします。
- 自動回復 - S3 は、障害が発生した施設からリダイレクトされたトラフィックを処理するために追加の容量を予約します。
- パーティショニングと負荷分散 - S3 はバケットを分割して障害を封じ込め、負荷を分散します。
- 強力な整合性モデル - S3 は書き込み後の整合性を提供し、古いデータを防ぎます。
背景
S3 は、トップレベルのコンテナとして機能するバケットにデータを保存します。バケットでは、データはオブジェクトの形式で保存されます。オブジェクトは、データ自体、メタデータ、およびキー (名前) で構成されます。
高い耐久性を提供するために、S3 は複数のデバイスと施設にわたってデータを複製します。デフォルトでは、データは Amazon Cloud リージョン内の 3 つのアベイラビリティーゾーン (リージョン内で分離された場所) にレプリケートされます。
また、S3 はバケットを複数のパーティションに分割し、さまざまなデバイスや施設にパーティションを分散して、負荷分散と障害ドメインの分離を確保します。この分割により、障害を透過的に処理できるようになります。
S3 の可用性に関連するいくつかの重要な概念:
- コピー:ただコピーするだけではありません。S3 の場合、Amazon Cloud テクノロジー リージョン内の 3 つの異なる施設にデータを同期的に複製することになります。各施設は分離ゾーンとして機能し、1 つの施設がダウンしても他の施設は利用可能な状態を維持します。
- 堅牢性を高めるためのパーティショニング: S3 バケットはパーティションに分割され、これらのパーティションはさまざまなデバイスや施設に分散されます。この継続的なパーティショニングにより、負荷のバランスが確保され、障害が分離されます。
- 一貫性とフェイルオーバー: 2 つの基本的な柱。S3 は最新のコピーの維持 (一貫性) を優先し、障害が発生した場合 (フェイルオーバー) にバックアップ コピーに切り替えます。
高可用性の重要性
可用性とは、システムが動作し続け、ユーザーの要求を満たすためにアクセスできる時間の割合を指します。高可用性は、ミッションクリティカルなデータに S3 を使用する多くの組織にとって重要です。
IDC によると、ダウンタイムにより企業は 1 時間あたり平均 25 万ドルの損失が発生します。S3 のアーキテクチャにより、潜在的なダウンタイムが短縮され、コストが節約され、収益の損失が防止されます。
可用性を確保する際の課題
常時接続の可用性を提供するには、いくつかの重要な課題があります。
- レイテンシーに影響を与えることなく、データセンター間で書き込み操作を複製します。
- 数秒での高速障害検出
- データを失わずに障害からシームレスに回復します
- 障害時と回復時に読み取りの一貫性を維持する
- データ量の増加に応じて直線的に拡張します
次の章では、S3 のアーキテクチャがこれらの問題にどのように対処するかを検討します。
S3 が高可用性を実現する方法
S3 は、高度に分散され、最適化されたストレージ システムを採用し、優れた可用性を実現します。主な側面は次のとおりです。
自動障害検出と回復
冗長性があっても、障害が発生する可能性はあります。クラッシュを処理するために、S3 は以下を使用します。
- ヘルスチェック: 1 秒あたり 50,000 件を超えるストレージ サーバーのステータス チェック
- 自己修復: チェックサム検証を通じて破損したオブジェクトを自動的に修復します。
- フェイルオーバー: プライマリ サーバーがダウンした場合、60 秒以内にトラフィックをバックアップ サーバーにルーティングします。
Java フェイルオーバー ロジックの例を次に示します。
if (primaryServer.isHealthy()) {
routeTraffic(primaryServer);
} else {
logError(primaryServer);
routeTraffic(secondaryServer);
recoverData(primaryServer);
}
これにより、複数のサーバーがオフラインの場合でも、サービスは 99.99% 利用可能なままになります。
パーティショニングとロードバランシング
S3 はバケットをフラグメントに分割し、施設全体に分散します。これにより、障害の分離と動的な負荷分散が可能になります。各パーティションは1 秒あたり 5,500 リクエストを処理できます。
アベイラビリティーゾーン間の同期レプリケーション
S3 は、書き込みをコミットする前に、データを少なくとも 3 つのアベイラビリティ ゾーンに同期的に複製します。これにより、1 つのアベイラビリティーゾーンに完全な障害が発生した場合でも、データが失われることはありません。
強い一貫性
S3 は、新しい PUT および DELETE 操作に対して書き込み後の一貫性を提供します。また、データ破損を検出して、古いデータの提供を防ぐこともできます。S3 のエラー率の中央値は約0.01%で、業界標準の 3 ~ 4% と比較します。
インテリジェントなリクエストルーティング
S3 は、要求されたデータを含む最も近い施設を特定し、それに応じてトラフィックをルーティングします。これにより、負荷のバランスをとりながら遅延が最小限に抑えられます。S3 は、1 秒あたり150 万を超えるリクエスト トラフィックを維持できます。
実際のケース
Acme が S3 の可用性を活用して重要なワークロードを処理する方法を見てみましょう。
- アベイラビリティーゾーン A、B、および C にわたる S3 バケットには、分析データ用の500 のパーティションが保存されています。
- アベイラビリティーゾーン A で重大な障害が発生し、アベイラビリティーゾーン B および C からトラフィックが流れ続けます。
- 書き込みはアベイラビリティーゾーン B と C にのみコピーされるようになりました。
- A が回復すると、S3 はホットスポットを減らすためにパーティションのバランスを再調整します。
- Acme のデータは停止中も利用可能でした
結論は
この記事では、極めて高い可用性を実現する S3 の内部システム アーキテクチャについて説明します。主な側面には以下が含まれます:
- マルチ AZ アーキテクチャにより障害が分離され、低遅延が実現します。
- 自動復旧により、停止時の運用が簡素化されます。
- パーティションにより障害が分離され、リバランスが可能になります
- 強力な一貫性により、古いデータの提供を防止します
S3 の可用性アーキテクチャを深く理解することで、開発者は復元力の高いクラウドネイティブ アプリケーションを構築できます。
このトピックに関して他にご質問がある場合は、コメント欄でお知らせください。さらにご相談いただければ幸いです。