最近、友人がバックグラウンドでメッセージを残し、負荷分散に関する記事を書くように依頼しました。インターネットには実はたくさんの記事があって、そのたびに「いい記事だな」と思っても、しばらくすると何も思い出せなくなる、という話でした。そこで今日は、実際の事例を使って負荷分散についてお話します。少し長い部分もあるかと思いますが、皆様に分かりやすくお伝えできるよう、精一杯努力しました。皆さんにぜひ知識を習得してもらいたいです。 負荷分散とは何ですか? ロードバランシング(英語名は Load Balance)とは、負荷(作業タスク)を均衡化し、FTP サーバー、Web サーバー、エンタープライズコアアプリケーションサーバー、その他の主要なタスクサーバーなどの複数の運用ユニットに分散して操作し、共同で作業タスクを完了することを意味します。 負荷分散には通常、負荷を均等に分散することと冗長性 (バックアップとも呼ばれる) を提供することの 2 つの目的があります。 ライフケース 上記がまだ理解できない場合は、実際の例を使って説明を続けましょう。 高速道路の出口に、出口が一つしかなく、ある日突然大量の車両(ETCを申請している人はいないと仮定)が現れて、例えばこの出口で高速道路を降りるとしたら、この時間に高速道路を降りなければならない人は何百人もいるのに、高速道路を降りるには通行料を払わなければならず、各車は少なくとも数分は遅れることになります。何百台もの車!!!つまり、後ろにいる人は数時間待たなければならない可能性があるということです。出口が複数ある場合はどうなりますか?そうすれば、そんなに長く待つ必要はありません。 出口をもう 1 つ追加すると、高速道路から出る車両の数を均等に分散する出口が 2 つになります。料金徴収員は料金徴収員の速度も判断する必要があります。車両 3 は車両 1 が速く走っているのを確認して、車両 1 に追いつきます。 n をさらに追加すると、その効果は想像できます。しかし、数が多すぎると、リソースの無駄遣いになるようです。多くの出口では、1 日に数台の車両しか出入りしません。多すぎると無駄になりませんか?そのため、ほとんどの人は 2 つ持っているのが普通ですが、これは緊急時のバックアップとして理解できます。 「私たちはドライバーを、前方の道路状況に基づいてどの出口を利用するかを決定するロードバランサーとみなしています。その決定を行う方法は、ロードバランシングアルゴリズムとして理解できます。」 私たちの技術分野で使用される用語は冗長性と呼ばれます。料金徴収機の速度は、当社のシステムにおけるサービスのパフォーマンスとして理解できます。 技術分野 次の図は、当社の技術分野における負荷分散を示しています。 生活の場面とテクノロジー分野の場面を組み合わせて理解すると、より新鮮になります。 注: クラスターとは、同じ App アプリケーション サービスに対して複数のノードを展開することを指します。クラスターの主な目的は圧力を分散することです。ロードバランサー(システム)は、司令官として理解できます。リクエストが届くと、コマンダーは特定の方法に従ってそのリクエストをクラスター内のサービスに渡します。その後、コマンダーはさまざまな方法でクラスター内のサービスにリクエストを割り当てることができます。ランダムに与える、キューイングで与える、より早く応答した人に与えるなどの方法により、負荷分散アルゴリズムが形成されます。 上記の比喩は、あくまでも私の個人的な理解です。 負荷分散の種類 ドメイン名 (ドメインネームシステム) ドメイン名と IP アドレスを相互にマッピングする分散データベースとして、人々がより便利にインターネットにアクセスできるようにします。 DNS は TCP および UDP ポート 53 を使用します。現在、ドメイン名の各レベルの長さ制限は 63 文字で、ドメイン名の合計長は 253 文字を超えることはできません。 DNS は最も単純かつ最も一般的な負荷分散方法であり、通常は「地理レベル」の負荷分散を実現するために使用されます。たとえば、北の人々は北京のコンピューター室を訪れ、南の人々は広州のコンピューター室を訪れ、西の人々は成都のコンピューター室を訪れます。 DNS ロード バランシングの本質は、同じドメイン名の DNS 解決で異なる IP アドレスが返される可能性があることです。たとえば、https://www.sina.com.cn/ を北部のユーザーが使用する場合、10.210.1.12 (北京データセンター) として解決され、南部のユーザーが使用する場合、14.213.164.27 (広州データセンター) として解決されます。 シンプルなDNS図 アドバンテージ
欠点
実際の状況: 実際のプロジェクト展開では、通常、一部のサーバーに対して DNS 解決を使用し、ドメイン名解決を負荷分散の最初のレベルとして使用します。次に、サーバーの負荷分散の第 2 レベルとして nginx 負荷分散を使用します。 ハードウェア負荷分散 ハードウェア負荷分散では、別のデバイスを使用して負荷分散機能を実現します。このタイプのデバイスはルータ スイッチに似ており、負荷分散のための基本的なネットワーク デバイスとして理解できます。現在、業界には F5 と A10 という 2 つの主要なハードウェア ロード バランサーがあります。このタイプの機器は性能が優れており、機能が強力ですが、価格は高価であると言えます。一般的に、銀行、国営企業、その他の大規模で裕福な企業のみが、会議にこのタイプの機器を使用することを検討します。 F5 は銀行でしか見たことがありません。 A10に関しては、接触していない限り撤回しません。 アドバンテージ 強力な機能: すべてのレベルでの負荷分散を完全にサポートし、さまざまな負荷分散アルゴリズムをサポートし、グローバル負荷分散をサポートします。 優れたパフォーマンス: 一般に、ソフトウェア ロード バランシングは 10w 以上の同時実行をサポートできますが、これはすでに非常に優れています。しかし、ハードウェア ロード バランシングは 100w 以上の同時実行をサポートできます。 高い安定性:市販品なので、十分に厳格にテストされ、大規模に使用されているため、非常に安定しています。 高いセキュリティ: 負荷分散に加えて、ハードウェア負荷分散デバイスにはファイアウォールと DDoS 攻撃対策機能も備わっています。 欠点 高価:ある銀行がF5を購入するのに数百万を費やしたと記憶しており、さらに高価なものもあると言われているので、価格が想像できます。 スケーラビリティが低い: ハードウェア デバイスはビジネスに応じて構成できますが、拡張またはカスタマイズすることはできません。 ソフトウェア負荷分散 ソフトウェア ロード バランシングは、ロード バランシング ソフトウェアを通じてロード バランシング機能を実装します。一般的な負荷分散ソフトウェアには、LVS や Nginx などがあります。 LVS は、Linux カーネルの 4 層負荷分散です。 4 層と 7 層の違いは、プロトコルと柔軟性の違いにあります。 Nginx は HTTP と電子メール プロトコルをサポートする 7 層の負荷分散ですが、LVS は 4 層の負荷分散であるため、プロトコルとは関係なく、基本的にチャット、データベースなど、すべてのアプリケーションで使用できます。 以下は、Nginx の負荷分散の簡単な図です。 アドバンテージ
欠点
負荷分散は何に使用されますか?
一般的な負荷分散アルゴリズム ローテーショントレーニング 負荷分散システムは、リクエストを受信すると、特定の順序でリクエストをサーバーに配布します。ラウンドロビンは、サーバーの状態を考慮しない単純な負荷分散アルゴリズム戦略です。 利点: すべてのサーバーが正常である場合、ラウンドロビン トレーニングは、各サービスが「均等に分散」されたと表現できる同量のリクエストを受信することを保証するため、理想的です。 デメリット:上記の点は理想的ですが、現実はそうではないことがよくあります。現実は依然として非常に厳しい。オンラインシステムにはさまざまな問題が発生することがよくあります。たとえば、サーバーがダウンした場合、ラウンドロビン アルゴリズムはサーバーの状態を考慮しないため、すでにハングアップしているサーバーに大量の要求が送信され、システムが使用できなくなり、ユーザーが失われることになります。もう 1 つのよくある問題は、一部のサーバーは応答が速く、一部のサーバーは応答が遅いことです (32 コアのサーバーと 16 コアのサーバーなど)。ラウンドロビン アルゴリズムは応答速度を考慮しないため、多くのサービス要求の応答が遅くなり、ユーザー エクスペリエンスが悪くなります。応答時間が遅いと、他のシステムにも影響が出る可能性があります。 加重ラウンドロビン 負荷分散システムは、サーバーの重みに基づいて、要求タスクを対応するサーバーにディスパッチします。ここでの重みは通常、システムのハードウェア構成に基づいて静的に構成されます。動的計算はビジネスに適していますが、単純なラウンドロビンよりも複雑性がはるかに高くなります。 加重ラウンドロビントレーニングは、ラウンドロビントレーニングの特別な形式です。その主な目的は、サーバーの処理能力の違いの問題を解決することです。たとえば、クラスター内の一部のサーバーには 32 個のコアがありますが、一部の古いシステムには 16 個のコアがあります。理論的には、重みを設定できます。つまり、32 コア サーバーの処理能力は 16 コア サーバーの 2 倍になります。負荷分散アルゴリズムの重み比は 2:1 に調整され、より多くのリクエストを 32 コア サーバーに分散できるようになります。 加重ラウンドロビンは、サーバー構成の違いに基づいてタスクがより適切に割り当てられるというラウンドロビン アルゴリズムの問題を解決します。しかし、サーバーの状態の違いに応じてリクエストタスクを割り当てることができないという問題が残っています。 最も負荷の少ないものから 負荷システムは、現在の負荷が最も低いサーバーにリクエストを分散します。ここでの負荷は、さまざまなリクエスト タイプとビジネス処理シナリオに応じて、さまざまな指標で測定できます。たとえば、次のシナリオ:
最も低い負荷優先度のアルゴリズムは、ラウンドロビン アルゴリズムがサーバーの状態を認識できないという問題を解決しますが、次のような複雑さが大幅に増加するという代償があります。
最も低い負荷優先度のアルゴリズムは、ラウンドロビン アルゴリズムの欠点を完全に解決できます。ただし、最も低い負荷優先度のアルゴリズムを採用した後は、負荷分散システムがサーバーの現在の動作状態を感知する必要があり、これもコストの大幅な増加を引き起こします。開発者にとって、ラウンドロビン アルゴリズムを実装するには数行のコードしか必要ありませんが、最も低い負荷優先度のアルゴリズムを実装するには大量のコードが必要になります。 最も低い負荷優先度のアルゴリズムは、ラウンドロビン トレーニングの欠点を解決するようです。ただし、複雑さが増すため、実際の使用率はラウンドロビン トレーニングやラウンドロビン トレーニングの加重アルゴリズムよりもさらに低くなります。 最適なパフォーマンス 最も低い負荷優先度アルゴリズムはサーバーの観点からリクエストを割り当てますが、最も高いパフォーマンス アルゴリズムはクライアントの観点からリクエストを割り当て、処理速度が速いサーバーを優先します。このようにして、クライアントにとって最速の応答が実現されます。 パフォーマンス優先度は、実際には最小負荷優先度に似ています。どちらもサーバーの状態を認識する必要があります。違いは、応答時間標準を通じてサーバーの状態を外部から感知することで、最高のパフォーマンスが実現されることです。実装の複雑さも非常に高く、主に次の側面に反映されています。
ハッシュクラス 負荷分散システムは、リクエスト内の特定のキーワードに基づいてハッシュ操作を実行し、同じ値を同じサーバーに配布します。この主な目的は、次のような特定のビジネス ニーズを満たすことです。
負荷分散アルゴリズムの適用 Dubbo ではどのような負荷分散アルゴリズムが使用されていますか?
クラス図 nginx ではどのような負荷分散アルゴリズムが使用されていますか? 「ラウンドロビン (デフォルト)」: 各バックエンド サーバーに順番にリクエストを配布するポーリング方式。これはデフォルトの負荷分散方法です。バックエンド マシンのパフォーマンスが一貫している状況に適用できます。障害が発生したマシンはサービス リストから自動的に削除されます。 「重み」: 重みに基づいてリクエストを異なるマシンに分散し、ポーリング確率を指定します。重みはアクセス比率に比例し、バックエンド サーバーのパフォーマンスが不均一な場合に使用されます。例えば:
「IP_hash」: リクエスト元の IP アドレスのハッシュ値に基づいて、バックエンド サーバーにリクエストを送信します。これにより、同じ IP アドレスからのリクエストが固定のマシンに送信され、セッションの問題が解決されます。例えば:
「url_hash(サードパーティ)」: 要求された URL のハッシュ値に基づいて、リクエストを異なるマシンに分散します。バックエンド サーバーがキャッシュされている場合は、これがより効率的です。 たとえば、アップストリームにハッシュ ステートメントを追加する場合、重みなどの他のパラメーターをサーバー ステートメントに書き込むことはできず、使用されるハッシュ アルゴリズムは hash_method になります。 「公平 (サードパーティ)」: バックグラウンド応答時間に基づいてリクエストを分散し、応答時間が短いリクエストに多くのリクエストを分散します。例えば:
要約する 私たちは実際のストーリーを使って、負荷分散とは何か、負荷分散の役割、負荷分散の種類、負荷分散アルゴリズムの種類、そして Dubbo と nginx での負荷分散アルゴリズムの適用について説明しました。 この記事はWeChat公開アカウント「Java Backend Technology Full Stack」から転載したものです。以下のQRコードからフォローできます。この記事を転載する場合は、Java Backend Technology Full Stack パブリック アカウントにお問い合わせください。 |
<<: IDC: アリババクラウド、テンセントクラウド、キングソフトクラウドが、2020年第3四半期の中国におけるパブリッククラウドインターネットクラウドサービスプロバイダーのトップ3にランクイン
>>: エッジで生活し、エッジ コンピューティング ビジネスを行っていますか?
企業がクラウド支出を節約したい場合は、コスト管理にさらに多くの時間とリソースを投資する必要があります...
企業がバックアップ データをクラウドに保存していない場合、遅れをとる可能性があります。幸いなことに、...
Kryptcloudは、1998年に米国ロサンゼルスで設立されたKrypt直系のクラウドサーバーブラ...
Hostgator の公式仮想ホスティングはますます高価になってきているのでしょうか?実際、blue...
山英国際ホールディングス株式会社(以下、「山英国際」)とSAPは、双方の上級役員が出席し、戦略協力の...
Yecaoyunの年末プロモーションが始まりました。このイベントは香港VPSのプロモーションに重点を...
6月8日、中国北京市-華雲データグループは「中国クラウドパワー-華雲データグループ製品とエコ戦略発表...
Dwidc は、クリスマスと元旦の特別プロモーションを開始しました: 湖北省十堰、湖北省武漢、浙江省...
これは18日間かけて書いた、完全に手作りの記事です。初心者SEO担当者として、最初に関わる仕事は、会...
SEO における外部リンクの重要性は誰もが知っています。特に人気のあるキーワードを最適化する場合は、...
最近、工業情報化部は2018年第3四半期のネットワークセキュリティ脅威状況分析と作業概要を発表しまし...
英国オンライン出版者協会と世界編集者フォーラムは最近の記事で、英国の新聞のオンライン版の最近のパフォ...
centexhosting.com についてはほとんど何も知りません。以前、Scabal に hos...
2013年9月17日、あるニュースが皆の前に現れました。 「SogouがSosoと合併し、Tence...
この記事を書いたとき、私は百度の入札クリック料金の実態を確認するのに1日半を費やしました。多くの講師...