実践スキル: 分散システムを体系的に学ぶにはどうすればよいでしょうか?

実践スキル: 分散システムを体系的に学ぶにはどうすればよいでしょうか?

分散システムについて学ぶ前に、最初に解決する必要がある質問は、「分散システムはどのような問題を解決するのか?」です。

[[342965]]

分散システムはどのような問題を解決しますか?

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. 理論から始める

理論から始めて、流通に関する論文を勉強します。ここで私は『データ集約型アプリケーションの設計』(中国語版:データ集約型アプリケーション システム設計)という本をお勧めします。まず本全体を読み、次に興味のある章に含まれる関連参考文献を読んでください。

要約する

この記事では、分散システムが解決する問題から始め、次に分散システムが問題を解決する方法について説明し、最後に分散システムがもたらす新しい問題と、その新しい問題の解決策について説明します。これは分散システムの一般的な知識のコンテキストです。この知識のコンテキストを習得した後は、実践的観点と理論的な観点を組み合わせて、分散システムを詳細に学習することができます。

<<:  カフカも理解していないのに、面接を受けに行くのですか?

>>:  エッジコンピューティングのイノベーション:少ないリソースでより多くの成果を実現

推薦する

ウェブサイト運営:ユーザーエクスペリエンスはウェブサイト最適化の核心です

序文始める前に、日常生活でよく見かけるシーンを見てみましょう。ある日スーパーマーケットに買い物に行く...

LetBox-テレコムバックボーン/KVM/2gメモリ/20g SSD/3Tトラフィック/20g DDoS保護

LetBoxから、中国電信の基幹ネットワークに接続したというメールが届きました。実は、Fantong...

コダック株:洗練された交通運用が将来のトレンドになる可能性

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています「トラフィ...

今後 2 年間で垂直分野に混乱は起こるでしょうか?

編集者注: この記事の著者は、E-House China の副社長兼 Leju Internet G...

QingCloud: 新たなポジショニング、戦略的なアップグレード

設立以来、QingCloud の位置付けは、当初の「クラウド、フリーコンピューティングの礎」から、現...

企業のウェブサイトを構築する際は、どのような原則に従うべきでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています公式サイト...

クラウドへの移行は今後も深まり、企業のIT支出は今年1.3兆ドルを超える見込み

ガートナーは、2025 年までに、パブリック クラウド コンピューティング分野の有効市場セグメントに...

エッジコンピューティング市場ではどのような提携や連合が行われるのでしょうか?

[[228676]]画像出典: Visual Chinaクラウド サービスや CDN 市場での争いに...

alphavps: (ブルガリア) 大容量ハードディスクを備えた安価な VPS。バックアップデータの保存に最適

安価な大容量ハードドライブ VPS 業者 alphavps をお勧めします。2003 年に設立された...

百度は再び地域SEOを狙うために剣を抜く

ウェブマスターは、6 月 22 日と 6 月 28 日の Baidu の大惨事を経験したばかりです。...

小紅書のブランドマーケティング推進メカニズムの分析

新しい消費時代において、ブランドがインターネット上のさまざまなマーケティングおよびプロモーション プ...

マヤの予言が信頼できるなら、キーワードランキングはホームページにしっかりと定着するだろう

これから過ぎ去ろうとしている年は、残酷で寒い年だと思っています。6月、8月、11月の数字は、すべての...

ユーザーエクスペリエンスを把握することで、Web サイトのコンバージョン率を完全に逆転させることはできますか?

使用するウェブサイト マーケティング方法に関係なく、目的は同じで、売上を効果的に増やすことです。ウェ...

外部リンクを使ったブログの喜びと悲しみ

外部リンクといえば、ウェブマスターの友人たちは、このような経験をしたことがあると思います。生き残り、...

#実用的な推奨事項# iwfhosting: $10/6g メモリ/50g SSD/3T トラフィック/5 コンピュータ ルーム

iwfhosting は、あまり知られていないと思います。17 年の歴史を持つ古いビジネスです。正式...