一般的な負荷分散アルゴリズムをいくつ知っていますか?

一般的な負荷分散アルゴリズムをいくつ知っていますか?

  [[275226]]

コールドスタンバイとホットスタンバイ

  • コールドスタンバイとは、通常は稼働していない予備の機器を使用することを指します。稼働中の機器に障害が発生した場合、予備の機器を使用して交換します。
  • ホットスタンバイとは、デバイスが稼働している間にスタンバイデバイスを稼働させることを意味します。稼働中のデバイスに障害が発生した場合、スタンバイデバイスは自動的に置き換えられます。

フェイルオーバーとフェイルバック

  • フェイルオーバーとは、予備設備において、稼働中の機器を停止し、予備設備を使用して作業するプロセスを交換と呼び、英語ではフェイルオーバーまたはスイッチオーバーと呼ばれます。
  • フェイルバックとは、交換後に元の稼働中のデバイスに復元するプロセス、つまり稼働中のバックアップ デバイスから元の稼働中のデバイスに切り替えるプロセスのことで、英語ではフェイルバックまたはスイッチバックとも呼ばれます。

冗長性タイプ

1. アクティブ・スタンバイ

ルーターを 2 台用意し、そのうち 1 台は通常業務を遂行するアクティブ デバイス (マスター デバイスまたはプライマリ デバイスとも呼ばれます) にします。もう一方のデバイスは、障害が発生した場合に交換するスタンバイ デバイスとして機能します。バックアップ デバイス、スレーブ デバイス、セカンダリ デバイスとも呼ばれます。アクティブ デバイスとスタンバイ デバイスは、デバイスに関するセットアップ情報を共有する必要があります。

2. アクティブ-アクティブ

ルーターを 2 台用意し、1 台をプライマリ デバイス、もう 1 台をセカンダリ デバイスとして同時に実行して冗長構造を形成します。この方法は、負荷分散デバイスと組み合わせて使用​​したり、クライアント側で DNS やルーティング情報を設定したりすることで、負荷分散の目的を達成できます。

3. クラスター

アクティブスタンバイモードまたはアクティブアクティブモードでは、3 つ以上のハードウェアユニットを使用して冗長構造を形成します。

負荷分散とは

負荷分散(英語名は Load Balance)とは、複数のサーバーを対称的に構成したサーバーセットを指します。各サーバーは同等のステータスを持ち、他のサーバーの支援なしに独立して外部にサービスを提供できます。何らかの負荷分散技術により、外部から送信されたリクエストは対称構造のサーバーに均等に分散され、リクエストを受信したサーバーはクライアントのリクエストに独立して応答します。ロード バランシングにより、クライアント要求をサーバー アレイに均等に分散できるため、重要なデータへの高速アクセスが可能になり、大量の同時アクセス サービスの問題が解決されます。このクラスター テクノロジにより、最小限の投資でメインフレームに近いパフォーマンスを実現できます。

負荷分散アルゴリズムは、サービス ガバナンスや分散キャッシュなど、さまざまな場所で使用されています。この記事では、主にいくつかの一般的な負荷分散アルゴリズムを紹介します。

1. 投票方法

ポーリング方式は理解しやすいです。リクエストを順番にサーバーに分散します。各バックエンド サーバーを均等に扱い、接続数やサーバーの負荷を気にしません。次のコードはこのアルゴリズムを示しています。

  1. パブリッククラスBalanceServer{
  2. 公共 静的リスト<String> サーバー =
  3. Arrays.asList( "192.168.0.1" , "192.168.0.2" , "192.168.0.3" , "192.168.0.4" ,
  4. "192.168.0.5" );
  5. 公共 静的 整数位置 = 0;
  6. 公共 静的文字列getServer() {
  7. 文字列サーバー = null ;
  8. if (pos >= servers.size ()) {
  9. 位置 = 0;
  10. }
  11. サーバー = servers.get(pos);
  12. 位置++;
  13. サーバーを返す
  14. }
  15. 公共 静的void main(String[] args) {
  16. ( int i=0;i<10;i++)の場合{
  17. System.out.println (BalanceServer.getServer()) ;
  18. }
  19. }
  20. }

ポーリング戦略の目的は、リクエストの絶対的なバランスを確保することですが、実際にはサーバーがまったく同じではない場合があり、その結果、一部の高性能サーバーがリソースを十分に活用できない可能性があります。

2. ランダム法

システムのランダム機能により、バックエンド サーバー リストのサイズに応じて、バックエンド サーバーの 1 つがランダムに取得され、アクセスされます。呼び出し回数が増えるにつれて、実際の効果は各サーバーに均等に分散されることに徐々に近づいていきます。ポーリングの効果と同様に、コードは次のようになります。

  1. パブリッククラスBalanceServer{
  2. 公共 静的リスト<String> サーバー = Arrays.asList( "192.168.0.1" , "192.168.0.2" , "192.168.0.3" , "192.168.0.4" ,
  3. "192.168.0.5" );
  4. 公共 静的 整数位置 = 0;
  5. 公共 静的文字列getServer() {
  6. 文字列サーバー = null ;
  7. ランダム random = new Random();
  8. int randomPos = random.nextInt ( servers.size ());
  9. サーバー = servers.get(randomPos);
  10. サーバーを返す
  11. }
  12. }

ポーリング アルゴリズムと比較すると、同時実行シナリオではポーリングにロックが必要であり、ランダム メソッドの方がパフォーマンスが優れています。

3. 送信元アドレスハッシュ方式

ソースアドレスハッシュ方式の考え方は、クライアントがアクセスした IP アドレスを取得し、ハッシュ関数を通じてハッシュ値を計算し、そのハッシュ値を使用してサーバーリストのサイズに対してモジュロ演算を実行することです。得られた値は、アクセスするサーバーのシリアル番号です。コードは次のとおりです。

  1. パブリッククラスBalanceServer{
  2. 公共 静的リスト<String> サーバー = Arrays.asList( "192.168.0.1" , "192.168.0.2" , "192.168.0.3" , "192.168.0.4" ,
  3. "192.168.0.5" );
  4. 公共 静的 整数位置 = 0;
  5. 公共 静的文字列 getServer(文字列 ip) {
  6. 文字列サーバー = null ;
  7. intハッシュコード = ip.hashCode();
  8. pos = ハッシュコード % servers.size ();
  9. サーバー = servers.get(pos);
  10. サーバーを返す
  11. }
  12. }

ハッシュ方式の利点は、サーバー リストが変更されない場合、クライアントがアクセスするサーバーは毎回同じサーバーになることです。この機能を使用すると、ステートフル セッションを実現できます。スティッキー セッションは、追加操作なしで実装できます。

4. 加重ラウンドロビン

前述のように、サーバーによってパフォーマンスが異なるため、一般化することはできません。パフォーマンスが低いサーバーには低い重みを与え、パフォーマンスが高いサーバーには高い重みを与える必要があります。コードは次のとおりです。

  1. パブリッククラスBalanceServer{
  2. 公共 静的Map<String, Integer > serverMap = 新しい HashMap<String, Integer >();
  3. 公共 静的 整数位置 = 0;
  4. 静的{
  5. serverMap.put( "192.168.0.1" , 1);
  6. serverMap.put( "192.168.0.2" , 1);
  7. serverMap.put( "192.168.0.3" , 4);
  8. serverMap.put( "192.168.0.4" , 3);
  9. serverMap.put( "192.168.0.5" , 3);
  10. serverMap.put( "192.168.0.6" , 2);
  11. }
  12. 公共 静的文字列getServer() {
  13. <文字列>を設定します。keySet = serverMap.keySet();
  14. イテレータ<String> it = keySet.iterator();
  15. List<String> サーバー = 新しい ArrayList<String>();
  16. (it.hasNext()) の間 {
  17. 文字列 server = it.next ();
  18. 整数の重み = serverMap.get(server);
  19. ( int i = 0; i < 重み; i++) {
  20. servers.add (サーバー);
  21. }
  22. }
  23. 文字列サーバー = null ;
  24. if (pos >= servers.size ()) {
  25. 位置 = 0;
  26. }
  27. サーバー = servers.get(pos);
  28. 位置++;
  29. サーバーを返す
  30. }
  31. 公共 静的void main(String[] args) {
  32. ( int i=0;i<14;i++)の場合{
  33. System.out.println (BalanceServer.getServer()) ;
  34. }
  35. 35 }
  36. 36}

5. 加重ランダム法

加重ラウンドロビン方式と同様に、加重ランダム方式でも、バックエンド サーバーのさまざまな構成と負荷条件に基づいて異なる重みが構成されます。違いは、順序ではなく重みに基づいてサーバーをランダムに選択することです。重み付けランダム法のコード実装は次のとおりです。

  1. パブリッククラス WeightRandom
  2. {
  3. 公共 静的文字列 getServer()
  4. {
  5. // サーバーの起動と停止による同時実行の問題を回避するためにマップを再構築します
  6. マップ<文字列、整数> serverMap =
  7. 新しい HashMap<String, Integer >();
  8. serverMap.putAll(IpMap.serverWeightMap);
  9. // IPアドレスリストを取得
  10. <文字列>を設定します。keySet = serverMap.keySet();
  11. イテレータ<String> iterator = keySet.iterator();
  12. リスト<文字列> serverList = 新しい ArrayList<文字列>();
  13. (イテレータ.hasNext()) の間
  14. {
  15. 文字列サーバー = iterator.next ();
  16. int重み = serverMap.get(server);
  17. ( int i = 0; i < 重み; i++)の場合
  18. serverList.add (サーバー);
  19. }
  20. java.util.Random ランダム = new java.util.Random();
  21. int randomPos = random.nextInt(serverList.size ( ));
  22. serverList.get(randomPos);を返します
  23. }
  24. }

<<:  1 つの記事で 26 個のニューラル ネットワーク活性化関数 (ReLU から Sinc まで) を紹介します

>>:  世界最高の AI 教育会社はどこでしょうか?米国、中国、欧州、イスラエルが先頭を走る

ブログ    
ブログ    
ブログ    

推薦する

ビジネスに人工知能を導入する際に考慮すべき3つの要素

最近、ますます多くの企業が人工知能に投資しています。しかし、成功するには、推論の解釈可能性、データ密...

HTML5アウトラインアルゴリズムが構造に与える影響

[[91338]] HTML5 がリリースされてから長い時間が経ちますが、日々の仕事や個人の Web...

単一の GPU で GPT-3 をトレーニングする方法にまだ苦労していますか? HP チューニングの新しいパラダイムをぜひご覧ください。

偉大な科学的成果は試行錯誤だけでは達成できません。たとえば、宇宙計画におけるすべての打ち上げは、空気...

...

AI モデルの「アウトソーシング」をやめましょう!新しい研究によると、機械学習モデルのセキュリティを弱める「バックドア」の一部は検出できないことが判明した。

悪意のある「バックドア」が埋め込まれたモデルが、何百万、何十億ものパラメータを持つモデルの中に、何者...

教師なしニューラル機械翻訳: 単一言語コーパスのみを使用する

概要: ニューラル機械翻訳 (NMT) は最近、標準ベンチマークで大きな成功を収めていますが、大規模...

2021 年に AI と ML に参入する前に知っておくべき 10 のこと

高度な新しい AI アルゴリズムを使用して複雑な問題を解決し、高い給料を得られるというのは魅力的に思...

2021 年の機械学習の 6 つのトレンド

機械学習は今日ではよく知られた革新的な技術となっています。ある調査によると、現在人々が使用しているデ...

肖像ラベルシステムの構築と運用実践

1. ポートレートラベルシステムQunarは、事業開発プロセスごとに独立したポートレートラベリングシ...

個人情報保護における人工知能データの役割

世界中で人工知能の大規模な構築と応用の発展が加速する中、近年、人工知能ガバナンスの問題が社会の関心を...

...

情報格差を打破せよ!大規模モデル向けの驚異的な 3D 視覚化ツールです。

最近、ニュージーランド出身のブレンダン・バイクロフトという男がテクノロジー界で大流行を巻き起こしてい...

我が国の独自開発OS micROSがリリースされました!このロボットの「心と脳」は単純ではない

9月10日、2019年世界コンピューター会議が湖南省で開催されました。中国科学院院士の楊学軍氏は、我...

星が輝くとき - WOT グローバル テクノロジー イノベーション カンファレンス 2021 が間もなく開催されます

【51CTO.comオリジナル記事】​​​ 100年前、シュテファン・ツヴァイクは彼の有名な著作「星...

スマート健康システムがコロナウイルス隔離中の人々を監視

新型コロナウイルスの世界的な感染拡大は187の国と地域に広がり、417万人が感染している。ほとんどの...