障害耐性のあるアーキテクチャは、ITシステムが個々のコンポーネントの障害が発生しても継続的に動作することを保証するために必要です。主な原則は、冗長性(redundancy)、負荷分散(load balancing)、および自動回復(failover)によって単一障害点を排除することです。
クラシックな障害耐性システムの構成は、サーバークラスター、複製されたデータベース、負荷バランサー、監視システムを含みます。大規模なシステムには、異なるデータセンターにレプリカを配置する地理的分散が利用されます。
複数のアップストリームを持つnginxの構成例:
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; least_conn; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } }
主な特徴:
データベースが複製されている場合、常にレプリカ間のデータの一貫性を保証できますか?
いいえ、一貫性は選択した複製モデル(強い/最終的一貫性)に依存します。たとえば、最終的一貫性では、同期の遅延が原因で一部のレプリカに「古い」データが表示される可能性があります。
負荷バランサーがバックエンドの可用性の問題を自動的に修正できますか?
いいえ、負荷バランサーは機能していないサーバーをプールから除外できるだけで、それを修復することはできません。自動回復には、Kubernetesのようなオーケストレーションシステムなどの追加サービスが使用されます。
障害耐性のためにサーバークラスターを設定するだけで十分ですか?
いいえ、ネットワークインフラ、ストレージ、およびスタック内の他のコンポーネントの障害耐性にも注意を払うことが重要です。どの部分の計画ミスも全体システムに脅威を与える可能性があります。