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

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

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

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

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

要約する

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

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

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

推薦する

機密情報の綱引き: Ganji.com と 58.com の変革は同じ結果につながる

Ganji.comと58.comはともに変革を模索新浪テクノロジー 神雲芳2005年に設立された2つ...

Weiboマーケティングは、競争の激しいケータリング業界で目立つことを可能にします

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス飲食業界は、あらゆる業界...

優れたクラウド プラットフォームを構築するための 7 つのステップ

効率的なクラウド アーキテクチャは、突然現れるものではありません。代わりに、最適な運用環境は組織によ...

Docker 以上の 8 つのオープンソース コンテナ管理ソリューション

Docker は 2013 年に誕生し、コンテナの概念を普及させました。そのため、ほとんどの人は今で...

RamNode が高性能 NVMe VPS シリーズを追加、月額 12 ドルから

Ramnode は新しい VPS シリーズ製品である KVM 仮想化をリリースしましたが、データ ス...

企業はどのようにして ERP をクラウド プラットフォームに移行できるのでしょうか?

多くのベンダーがアプリケーションの近代化を推進しています。しかし、CIO はこれをどの程度うまく実行...

噂を広めすぎると、それを真実だと信じる人が出てきます。

今日、LEB を閲覧していたとき、reversehosts が投稿した VPS プロモーションを見ま...

今年422のポルノサイトが捜査され処罰されたが、次回の取り締まりはさらに厳しくなるだろう

国家ポルノ及び違法出版物取締局、中国サイバースペース管理局、工業情報化部、公安部など4つの部門は4月...

VMware は、企業が生成 AI の力を簡単に活用できるよう支援します。

2023 年 8 月 23 日、VMware Explore 2023 カンファレンスにおいて、VM...

自動車コンピューティングの未来: クラウド、エッジ、自動車バリューチェーンにおける新たな機会と戦略

コネクテッドカーのエコシステムが発展するにつれ、自動車、通信、ソフトウェア、半導体など、複数のバリュ...

chicagovps-$6/メモリ4g/ハードディスク100g/トラフィック2T/ポート1000M/コンピュータルーム6室

chicagovps から送信された電子メールには、最新のプロモーション VPS が 2 つ記載され...

データセンターを変革し、リソースの半分を仮想化する4つのステップ

[51CTO.com 7月13日の海外ニュース見出しを速報] 世界の大手IT企業の大半が大混乱に陥っ...

企業向けWeChatパブリックプラットフォームでサブスクリプションアカウントを運用するための11の秘訣

メディアの報道によると、WeChatのユーザー数は6億人を突破しました!近い将来、WeChatは重要...

ビッグデータの 5 つの課題を克服する - クラウドが答えを持っている

組織は、ビッグデータイニシアチブの実装で課題に直面すると、落胆することがよくあります。ビッグ データ...

UCloudが2018年中国最革新企業優秀貢献賞を受賞

9月19日、経済観察報が主催する「2018年中国イノベーションサミット及び中国最革新企業表彰式」が北...