注:この投稿は古くなっています。 最新のバージョンはこちらで確認できます。
この投稿は古くなっています。 ここで更新されたバージョンを見つけてください。 私は意図的にここにこの記事を残しているので、私は私に戻ってリンクする他のサイトを中断しません。
数年前、ソフトウェアシステムにパフォーマンスを構築するのは簡単でした。 水平スケーリング(スケールアウト):今日では、第三のオプションがあります。
近年、コンピューティングのグローバルな性質とアプリケーションに対するパフォーマンスの要求の高まりにより、ソフトウェアシステムの水平スケーリングが必要になってきています。 多くの場合、会社の本社に隣接する単一のデータセンターで単一のデータベースを持つ単一のサーバーを実行することはもはや許容されません。 今日のビジネス課題に取り組むためには、真に分散した環境が必要です。
残念ながら、水平スケーリングが提供するパフォーマンス上の利点は、コストの複雑さになります。 分散システムは、以前に存在していたよりも多くの要因を性能方程式に導入します。 データレコードは、異なる場所のクライアント/ノードによって異なります。 単一障害点はシステムの稼働時間を破壊し、断続的なネットワーク問題は最悪の時間にクリープアップします。
分散システム全体の一貫性(C)、可用性(A)、および分割許容度(P)のこれらの懸念は、ERIC BrewerがCAP定理として造語したものを構成しています。 簡単に言えば、CAP定理は、任意の分散システムがC、A、およびPを同時に保証することができないことを示しており、むしろ、特定のタスクに必要なパフォーマ
一貫性-すべてのノードに同じデータが同時に表示されます。
簡単に言えば、読み取り操作を実行すると、最新の書き込み操作の値が返され、すべてのノードが同じデータを返します。 トランザクションが一貫性のある状態のシステムで開始され、一貫性のある状態のシステムで終了する場合、システムは一貫性を持ちます。 このモデルでは、システムはトランザクション中に矛盾した状態に移行することができますが、プロセスのいずれかの段階でエラーが発生すると、トラ
典型的なリレーショナルデータベースは一貫しています。
可用性-すべての要求は、成功/失敗時に応答を取得します。
分散システムで可用性を実現するには、システムが100%稼働したままである必要があります。 すべてのクライアントは、システム内の個々のノードの状態に関係なく、応答を取得します。 このメトリックは、読み取り/書き込みコマンドを送信できるか、できないかのいずれかを測定するのは簡単です。
SQL Server、MySQL、PostgreSQLなどの一般的なリレーショナルデータベースも利用できます。 これは、リレーショナルデータベースがCA空間に存在することを意味します。 ELASTICSEARCHのようなドキュメント指向のツールの中には、CAの傘下にあるものもあります。
パーティションの許容値-メッセージの損失または部分的な障害にもかかわらず、システムは動作し続けます。
ほとんどの人は、自分のデータストアをネットワーク内の単一ノードと考えています。 “これは私たちの本番SQL Serverインスタンスです”。 実稼働インスタンスを4分以上実行したことがある人は、これが単一障害点を作成することをすぐに認識します。 パーティショントレラントなシステムは、ネットワーク全体の障害にはならないネットワーク障害の任意の量を維持することができます。 データレコードは、断続的な停止によってシステムを維持するために、ノードとネットワークの組み合わせ間で十分に複製されます。
一貫性(CP)を持つパーティション許容範囲に該当するストレージシステム:MongoDB、Redis、AppFabricキャッシュ、およびMemcacheDB。 CPシステムは、すべてのクライアントが同じデータを取得し、システムがネットワーク境界を越えて分割されるため、優れた分散キャッ
可用性(AP)によるパーティション許容値に該当するストレージシステムには、DynamoDB、CouchDB、およびCassandraが含まれます。
結論
分散システムは、過去には利用できなかったレベルの計算能力と可用性を達成することを可能にします。 当社のシステムは、世界全体にまたがるデータセンターで、より高いパフォーマンス、より低いレイテンシ、およびほぼ100%のアップタイムを持っています。 すべてのベスト、今日のシステムはcosts0に近づく費用と容易に獲得可能、構成可能である商品ハードウェアで動く。
しかし、この計算能力と利益はすべて代償を払っています。 分散システムは、単一ネットワークのシステムよりも複雑です。 真にスケーラブルで高性能なシステムを作成するためには、さらに多くのツールとスキルを習得する必要があります。 分散システムで発生する複雑さを理解し、手元のタスク(CAP)のための適切なトレードオフを作り、仕事のための適切なツールを選択することは、コンピューティングシステムが稼働していない世界では、すべての重要なスキルです。