分散 - 分散についての理解について話します。なぜ分散を導入するのですか?

さっそく始めましょう。

焦点を当てる:

  1. 分散システムの概念を深く理解し、将来の作業で分散システム設計のアイデアを得ることができます。
  2. システムの安定性を考慮した設計はできますか?
  3. 高 QPS の堅牢なシステム アーキテクチャを構築できます。

1. インタビュアー: では、分散システムについてのあなたの理解を話してください。

問題分析:

さまざまな分散フレームワークが際限なく登場しますが、Spring Cloud と Ali’s Dubbo のどちらを使用しても原理は同じです。基本的な概念がどの程度習得できているかを確認してみましょう。

答え:

従来の単一サービスアーキテクチャによって引き起こされるさまざまな問題、コード量が膨大である、反復的なテストとメンテナンスが困難である、テストの変更によりサービス全体が麻痺する可能性があるなどを解決するために、分散システムはサービスを分割することになります。大規模なサービスを数十、場合によっては数百の小さなサービスに統合します。モノリシック アーキテクチャのサーバーをバスケットに例えると、コードは卵です。すべての卵を 1 つのバスケットに入れないでください。また、全員が分割して開発するのに便利です。コードはプロジェクト内に存在しません。最も重要なことは、プロジェクトがそれ自体を維持することです。

たとえば、Spring ファミリ バケットの Ali の Dubbo と Spring Cloud は、分散マイクロサービス アーキテクチャを解決するための優れたフレームワークです。

2. インタビュアー: 分散システム環境におけるそれぞれの利点と欠点は何ですか?

問題分析:

面接官は主に欠点や問題点を見て認識したいと考えていますが、良い点については簡単に言及する必要があります。

答え:

分散を利用することは、従来のアーキテクチャのさまざまな問題を解決するものではなく、複数の人が 1 つの環境で開発および保守するのが難しく、耐障害性を制御するのが容易ではないなど、多くの利点があります。問題をマイクロサービスに分割する方がはるかに簡単です。主に4つの側面から簡単に説明します。

  1. システム可用性の向上
    システムは年間を通じて 99.999% の時間利用可能であり、適切に設計された分散システムではファイブナインのサービス可用性率は達成できない数字ではありません。
    従来の集中型コンピューティングや集中型ストレージでは、単一障害点が発生すると、サービス全体が利用できなくなることが容易ですが、分散サービス システムでは、1 台のマシンに障害が発生しても、サービス全体が利用できなくなることはありません。
  2. システムの同時実行性向上
    リクエストは、Nginx 負荷分散を通じてさまざまなサーバーに分散されます。同じコードを実行するサーバーは 1 台または N 台で可能です。通常、マシンは、データベースであってもサービスであっても、実際のユーザーのアクセスに応じていつでも追加されますいつでも水平方向に拡張できます
    たとえば、ダブル 11 イベントの期間中は、通常は 50 台少ないマシンで注文できますが、11 月 11 日には注文量が急増し、サーバーの数が 100 台に増加しました。各マシンは互いに独立しており、相互に影響を及ぼしません。 。
  3. システムの耐障害性の向上

    画像の説明


    (ペンを持っているので、面接官に向けて気軽に絵を描くことができます。)
    同グループのサービスは北京、上海、杭州にも展開されており、杭州のコンピューター室が突然停電したり火災になったりすると、コンピューター室のトラフィックが一時的に停止します。杭州は北京と上海のコンピューター室に自動的に配信され、ユーザーの使用に影響を与えます。
  4. 低遅延 
    前の図を参照すると、北京からのユーザー要求は自動的に北京に分散され、上海からのユーザー要求は上海に自動的に分散され、サーバーはユーザーの IP に応じて自分に最も近いコンピューター室を選択して、ネットワーク遅延を削減します。 

インタビュアー: そうですね、基本的な内容は包括的です。引き続き欠点について話しましょう。

分散サービスには多くの利点がありますが、同時に、主に 3 つの側面から問題も確実に生じます。

  1. 分散サービスはネットワークに依存します
    。サーバー間の通信はネットワークに依存します。信頼性の低いネットワークには、ネットワークの遅延、パケット損失、中断、非同期が含まれます。完全なサービス要求は一連のサービス呼び出しに依存します。サービス ノードのネットワーク内の問題このリクエストが発生する可能性があります。失敗します。
  2. 高額な保守コスト
    従来のモノリシック サービスでは、1 つのサイトのみを保守する必要があります。
    分散型サービスシステムはいくつかの小さなサービスに分割されており、1つのサービスから数十、数百のサービスに変化すると、運用保守コストが増加します。
  3. 一貫性、可用性、パーティションフォールトトレランスを同時に満たすことはできません
    。これが最も重要です。これら 3 つの特性は通常 CAP 定理と呼ばれます。分散システムでは、これら 3 つの特性は最大でも 2 つしか満たせず、満たすことはできませんどちらを犠牲にするかは状況に応じて調整してください。

インタビュアー: そうですね、3 番目に重要な点が実現されました。(面接者の心理: CAP の問題を認識できれば、はるかに楽になります。CAP について言及すると、チャットを続けることができます)

自分で穴を掘ることに成功しました。CAP については、次のセクションで別途説明します。

詳細な分析:

分散システムとは、平たく言えば、ビジネスシステム全体が多数のサービスに分割され、各サービスの責任が人に割り当てられ、サービス間でコードの衝突がなく、サービスが自律的に動作し、それぞれのサービスや技術が独立して動作することができるシステムです。統一されたサービス呼び出しプロトコルに従うだけです。リリースごとにサービスを変更する場合は、全員で共同デバッグするのではなくサービスを起動すると、各リリースに伴う変更の影響も制御可能になります。従来のモノリシック アーキテクチャ サービスとは異なり、多くの場合、数百万行のコードが統合されます。

この概念は、 1994 年に発行された 「 A Note on Distributed Systems 」というタイトルの 論文で Jim Waldo によって提案されました。興味のある読者は、英語の原文を参照してください。

Baidu Encyclopedia では次のように説明されています。
分散システム (分散システム) は、ネットワーク上に構築されたソフトウェアシステムです。ソフトウェアの特性により、分散システムは凝集性と透明性が高くなります。したがって、ネットワークと分散システムの違いは、ハードウェアよりも高レベルのソフトウェア(特にオペレーティング システム) にあります。

分散システムは特定のテクノロジーでも、特定のフレームワークでもありません。専門用語では、計算能力とデータ ストレージ容量を異なるサーバーに分散し、ネットワーク接続を通じて全体的なサービスを形成することです。異なるサーバーは物理マシンまたは仮想マシンである場合があります。分散の概念は、ソリューション プランとして理解できます。

要約すると、分散システムとは、データ ストレージ機能とコンピューティング機能を異なるサーバーに分散し、全体として外部サービスを提供することです。その目的は、単一マシンの障害の問題、単一マシンのコンピューティングおよび IO パフォーマンスの問題、および単一マシンのストレージ容量不足の問題を解決することです。スタンドアロン障害の発生確率は比較的低いですが、クラスタの規模が大きくなると、基本的にクラスタのダウンタイムやディスクの損傷が発生するのが一般的であり、分散システムは主にさまざまな障害によって引き起こされる問題を解決します。

例えば、Meituan Waimaiは、ユーザーの観点から見ると、食品の配達を注文し、商品を選択し、船荷証券で支払い、配達後に注文が届くのを待つことができるAPPです。システム開発エンジニアの場合、この小さな APP の背後には非常に巨大なシステムがあり、テイクアウトを注文すると、プロセス全体を完了するためにバックグラウンドで数十、数百のサービス コールが実行されます。大きな視点では、商品管理システム、注文システム、決済システム、決済システム、マーチャントシステム、物流システム、リスク管理システムなどが含まれます。各サブシステムはいくつかのマイクロサービスに分割でき、各システムは論理的に全体を形成して統合された外部サービスを提供します。

3. 分散システムとマイクロサービスの関係は何ですか?

分散システムとマイクロサービスに関しては、どちらも単なる概念にすぎません。マイクロサービスを採用するということは、システムを分散する必要があるということであり、分散システムのメリットとデメリットがマイクロサービスに反映されることになるため、マイクロサービスは分散システムに特化したソリューションであると個人的には理解しています。

 要約する

 インターネットの発展に伴い、従来の単一プロジェクトは現在のインターネット ユーザーのニーズを満たすことができなくなりました。2010 年に卒業したばかりの私には、SSH/SSM を使用する仕事しか見つかりませんでした。分散型については理解できませんでした。多くのソフトウェア会社も、一連のフレームワークが世界を征服しています。そんな時代は過ぎましたが、初心者が仕事を見つけるためにどの言語を学べばよいのか、読者からよく質問されます。大企業から面接の機会を得て内定を獲得したい場合、プログラミング言語は基礎にすぎず、分散システムの基礎としても非常に重要です。大きなインターネット企業のシステムはすべて分散されており、企業が採用したいと考えている人材も分散された知識に精通しています。

分散システムの利点:

  1. サービスの可用性と安定性の向上
  2. システムの同時実行性の向上
  3. システムの耐障害性を向上させる
  4. 低遅延

分散システムの欠点:

  1. ネットワークに依存すると、ネットワークの問題によりシステム データの損失や不整合が発生します。
  2. システムの複雑さ、システムの監視とメンテナンス、バージョンの反復リリースは比較的複雑になり、コストがかかります。
  3. 一貫性、可用性、分割耐性を同時に満たすことはできません。

長々としないでください。この記事は終わりました。3 回続けて読むのを楽しみにしています。

おすすめ

転載: blog.csdn.net/qq_34272760/article/details/120714630