分散システムについて学ぶ前に、最初に解決する必要がある質問は、「分散システムはどのような問題を解決するのか?」です。
分散システムはどのような問題を解決しますか? 1 つ目は、単一のマシンのパフォーマンスのボトルネックによって発生するコストの問題です。ムーアの法則が破られると、安価な PC のパフォーマンスのボトルネックは解消できなくなります。ミニコンピュータやメインフレームは、単一のマシンのパフォーマンスを向上させることができますが、コストが高すぎて一般の企業が負担することはできません。 2つ目は、ユーザーとデータの爆発的な増加によって生じるコストの問題です。インターネット時代では、ユーザー数が爆発的に増加し、ユーザーが生成するデータの量も爆発的に増加しました。しかし、実際には、単一のユーザーや単一のデータの価値は、ソフトウェア時代(銀行のユーザーなど)よりも低いため、より経済的なソリューションを見つける必要があります。 3 つ目は、高いビジネス可用性の要件です。インターネット製品は24時間365日サービスを提供することが求められており、サービス停止などの障害は許容されません。可用性の高いサービスを提供する唯一の方法は、冗長性を追加することです。このように、単一マシンシステムでサービスをサポートできる場合でも、高可用性が求められるため、分散システムになります。 上記の 3 つの理由から、インターネット時代において、スタンドアロン システムではコストと高可用性の問題を解決できないことがわかりますが、これら 2 つの問題はほぼすべての企業にとって非常に重大です。したがって、スタンドアロン システムから分散システムへの移行は避けられない技術トレンドです。 分散システムはどのように問題を解決するのでしょうか? では、分散システムはスタンドアロン システムが直面するコストと高可用性の問題をどのように解決するのでしょうか? 実際、アイデアは非常にシンプルで、ネットワークを介していくつかの安価な PC を接続して共同で作業を完了し、システムに冗長性を提供して高可用性の問題を解決するというものです。 分散システムはどのような新しい問題をもたらしますか? 分散システムの定義を見てみましょう。分散システムとは、ネットワークを介して通信し、共通のタスクを完了するために作業を調整するコンピュータ ノードのグループで構成されるシステムです。定義から、分散システムは、複数の作業ノードを通じて単一マシン システムが直面するコストと可用性の問題を解決しますが、分散システム内の作業ノードの調整の問題が発生することがわかります。 知識を習得するには、その原因と結果を理解する必要があるとよく言われます。分散システムの場合、原因は「分散システムはどのような問題を解決するか」であり、結果は「内部の作業ノードをどのように調整するか」です。したがって、解決する必要がある 2 番目の質問は、「分散システムは内部の作業ノードをどのように調整するのか」です。 分散コンピューティングによってどのような新しい問題が生じますか? 簡単なケースから始めましょう。分散コンピューティング (ステートレス) の場合、システム内の調整のために何を行う必要がありますか。 1. サービスを見つけるにはどうすればいいですか? 分散システムには、さまざまなサービス (役割) が存在します。サービス A がサービス B をどのように見つけるかは、解決する必要がある問題です。一般的に言えば、サービス登録と検出メカニズムは一般的な考え方であるため、サービス登録と検出メカニズムの実装原理を理解し、サービス登録と検出を AP システムにするか CP システムにするかを選択する方が合理的かどうかを考えることができます (厳密に CAP 理論によれば、現在使用しているシステムのほとんどは C または A を満たすのが難しいため、ここでは通常の意味での AP または CP のみです)。 2. 例を見つけるにはどうすればいいですか? サービスを見つけた後、現在のリクエストをサービスのどのインスタンスに送信する必要がありますか?一般的に言えば、同じサービスのインスタンスが完全に等しい(ステートレス)場合は、負荷分散戦略(ポーリング、重み、ハッシュ、コンシステントハッシュ、公平性、その他の適用可能なシナリオ)に従ってそれらを処理すれば十分です。同じサービスのインスタンスが等しくない場合(ステートフル)、ルーティング サービス(メタデータ サービスなど)を使用して、アクセスする要求データがどのインスタンスにあるかを最初に判断してからアクセスする必要があります。 3. 雪崩を避けるには? システム雪崩とは、正のフィードバック サイクルによって拡大し続ける障害を指します。雪崩は通常、システム全体の小さな部分の障害によって引き起こされ、それがシステムの他の部分でも障害を引き起こします。たとえば、システム内のサービスのインスタンスに障害が発生すると、負荷分散によってそのインスタンスが削除され、他のインスタンスの負荷が増加し、最終的にはサービスのすべてのインスタンスがドミノ倒しのように 1 つずつ障害が発生する可能性があります。 雪崩を避けるための全体的な戦略は比較的単純です。アイデアは2つだけです。 1 つは、システム負荷を迅速に軽減することで雪崩を回避する、急速な障害および劣化のメカニズム (回路ブレーカー、ダウングレード、電流制限など) です。もう 1 つは弾性拡張メカニズムで、システムのサービス容量を迅速に増加させることで雪崩を回避します。さまざまなシナリオに応じて異なる選択を行うことも、両方の戦略を使用することもできます。 一般的に、高速な障害により、一部のリクエストが失敗します。分散システムに高い一貫性要件がある場合、急速な障害によりシステム データの不整合の問題が発生します。弾性拡張の方がより良い選択ですが、弾性拡張の実装コストと応答時間は、高速障害よりもはるかに大きくなります。 4. アラームを監視するにはどうすればいいですか? 分散システムの場合、内部の状態を明確に把握できないと、高可用性を完全に保証することはできません。したがって、分散システムの監視(インターフェースの遅延や可用性の情報など)、分散トレース、障害をシミュレートするためのカオスエンジニアリング、および関連するアラームメカニズムを改善する必要があります。 分散ストレージによってどのような新しい問題が生じますか? 次に、分散ストレージ(ステートフル)の内部調整がどのように行われるかを見てみましょう。同時に、先ほど紹介した分散コンピューティングの調整方法は分散ストレージにも適用できるので、ここでは繰り返しません。 1. 分散システムの理論とトレードオフ ACID、BASE、CAP 理論。これら 3 つのトピックを理解するには、この記事と、記事の最後に記載されている関連参考文献をお勧めします。 英語版: https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/ 中国語版: https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed/ 2. データシャーディングを行うにはどうすればいいですか? 1 台のマシンにすべてのデータを保存することは不可能なので、特定のルールに従って異なるマシンにデータを保存する方法という問題を解決する必要があります。現在、最も一般的に使用されているソリューションは、ハッシュ、コンシステント ハッシュ、および範囲ベースのシャーディング戦略です。それぞれの長所と短所、およびそれぞれの適用シナリオについて学ぶことができます。 3. データを複製するにはどうすればいいですか? システムの高可用性要件を満たすために、データを冗長的に処理する必要があるのはなぜですか?現在のソリューションは、主に、集中型ソリューション (マスター スレーブ レプリケーション、Raft や Paxos などの一貫性プロトコルなど) と分散型ソリューション (Quorum および Vector Clock) です。それぞれの利点と欠点、それぞれのアプリケーション シナリオ、およびシステム外部に表示されるデータの一貫性レベル (線形一貫性、順次一貫性、結果的一貫性など) について学習します。 4. 分散トランザクションを実行するにはどうすればいいですか? 分散システムの場合、トランザクションを実装するには、まず同時トランザクションをソートする機能が必要です。これにより、トランザクションが競合したときに、どのトランザクションが成功し、どのトランザクションが送信に失敗したかを確認できます。単一マシン システムの場合、これはまったく問題ではなく、タイムスタンプとシリアル番号を追加するだけで実現できます。ただし、分散システムの場合、システム内のマシンの時間を完全に同期することはできず、単一のマシンのシリアル番号にはグローバルな意味はありません。上記の方法は機能しません。ただし、システム全体に対して 1 台のマシンを選択して、スタンドアロン モードでトランザクション ID を生成することは可能です。同じ市内に複数のセンターがある場合や、近距離の異なる場所に複数のセンターがある場合でも問題はありません。ただし、グローバル分散システムにする場合、各トランザクションのトランザクション ID を取得するためにノードにアクセスするコストが高すぎます (たとえば、中国の杭州から米国東部までの RTT は 200 ミリ秒以上です)。 Google の Spanner は、GPS と原子時計を介して TrueTime API を実装し、グローバル分散データベースを実現することでこの問題を解決します。 トランザクション ID を使用すると、2PC または 3PC プロトコルを通じて分散トランザクションの原子性が実現されます。その他の部分は単一マシントランザクションとあまり変わらないので、詳細には触れません。 上級学習段階 この時点で、分散システムのコンテキストについての基本的な理解が得られました。次は、詳細を学ぶ段階に入ります。これも非常に難しいステージです。分散システムに対する理解の深さと詳細の深さは非常に重要な評価指標です。結局のところ、悪魔は細部に潜んでいるのです。ここでは、次の 2 つの側面から体系的な研究を行うことができます。 1. 練習から始める HDFS または GFS (分散ファイルシステム)、Kafka および Pulsar (分散メッセージキュー)、Redis Cluster および Codis (分散キャッシュ)、MySQL のシャーディング (従来のリレーショナル データベースの分散ソリューション)、MongoDB のレプリカ セットと共有メカニズム セット、分散型 Cassandra (NoSQL データベース)、集中型 TiDB および分散型 CockroachDB (NewSQL)、およびいくつかのマイクロサービス フレームワークを含む、一般的に使用される分散システムの設計を学習します。 2. 理論から始める 理論から始めて、流通に関する論文を勉強します。ここで私は『データ集約型アプリケーションの設計』(中国語版:データ集約型アプリケーション システム設計)という本をお勧めします。まず本全体を読み、次に興味のある章に含まれる関連参考文献を読んでください。 要約する この記事では、分散システムが解決する問題から始め、次に分散システムが問題を解決する方法について説明し、最後に分散システムがもたらす新しい問題と、その新しい問題の解決策について説明します。これは分散システムの一般的な知識のコンテキストです。この知識のコンテキストを習得した後は、実践的観点と理論的な観点を組み合わせて、分散システムを詳細に学習することができます。 |
<<: カフカも理解していないのに、面接を受けに行くのですか?
>>: エッジコンピューティングのイノベーション:少ないリソースでより多くの成果を実現
2012年も残り3日となり、新年へのカウントダウンはすでに始まっています。2011年もインターネット...
18 年の歴史を持つホスティング会社 prometeus.net は、基本的にサーバーとして使用でき...
みなさんこんにちは、Snow Leopardです。清明節が過ぎ、今日から正式に仕事に復帰します。前回...
私はウェブサイトを構築したかったので、まず ASP、MS SQL Server、Access、HTM...
より大きな DDOS の圧力に耐えられる安価なホストを探している場合は、GINERNET がリリース...
アジア太平洋地域の業界大手である Tomago Aluminium の IT 責任者である Denn...
今月18日にウェブサイト(WordPressブログシステム)の外観テーマを変更しました。 6月28日...
昨日、seomoz.org の randfish が、2010 年の SEO に関する 8 つの予測...
bandwagonhost からの最新ニュース: 香港 VPS は、引き続き MCX10 (Kwai...
クラウド コンピューティングは 10 年以上前から存在し、テクノロジーのさまざまな側面を担ってきまし...
ますます多くの企業がビジネス ワークロードをクラウドに移行していますが、規制上の障壁、セキュリティの...
現在、中国では基本的なSEO技術が普及しており、オンラインマーケティングに携わるほぼすべての企業がS...
この記事は、Kubernetes 上で Spark クラスターを構築するためのガイドです。また、Sp...
kvmla は香港の将軍澳に新しいデータセンターを追加し、現在 VPS を販売しています。新しいキャ...
Nutanix は 2009 年の設立以来、IT 意思決定者のニーズに合わせて会社を進化させてきたこ...