ホームページ  >  記事  >  Java  >  Java フレームワークでミドルウェアを使用してロード バランシングとフェイルオーバーを管理する

Java フレームワークでミドルウェアを使用してロード バランシングとフェイルオーバーを管理する

WBOY
WBOYオリジナル
2024-06-03 15:41:021039ブラウズ

最新の分散システムの可用性とパフォーマンスを確保するには、負荷分散とフェイルオーバーが重要です。 Java フレームワークは、成熟したミドルウェア ソリューションを通じてこれらの機能を簡単に実装できます。ロード バランサーを使用すると、受信トラフィックをバックエンド サーバー クラスターに均等に分散して、スケーラビリティと可用性を向上させることができます。コンポーネントに障害が発生した場合、フェールオーバーによってトラフィックが正常なコンポーネントにリダイレクトされ、アプリケーションの安定した動作が保証されます。この記事では、Google Cloud 上でターゲット プール、ヘルスチェック、ロードバランサを作成する実践例を含め、Java フレームワークでロード バランシングとフェイルオーバーにミドルウェアを使用する具体的な実践方法について説明します。

Java フレームワークでミドルウェアを使用してロード バランシングとフェイルオーバーを管理する

Java Framework でのロード バランシングとフェイルオーバー: ミドルウェアの使用

最新の分散システムでは、ロード バランシングとフェイルオーバーが重要であり、アプリケーションが可用性とパフォーマンスを維持しながらピーク トラフィックやコンポーネントの障害に耐えられるようにします。 Java フレームワークは、成熟したさまざまなミドルウェア ソリューションを通じてこれらの機能を簡単に実装できます。

ロードバランサー

ロードバランサーは、スケーラビリティと可用性を向上させるために、受信トラフィックをバックエンドサーバークラスター全体に均等に分散します。 Java で一般的に使用されるロード バランサーには次のものがあります。

import com.google.cloud.compute.v1.GlobalForwardingRule;
import com.google.cloud.compute.v1.ForwardingRuleService;
import com.google.cloud.compute.v1.RegionForwardingRule;
import com.google.cloud.compute.v1.ForwardingRule;
import com.google.cloud.compute.v1.TargetPool;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

public class CreateLoadBalancer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample
    String project = "your-project-id";
    String zone = "zone-name"; // optional, only required for region-wide forwarding rules
    String region = "region-name"; // optional, only required for global forwarding rules
    String forwardingRuleName = "your-forwarding-rule-name";
    String targetPoolName = "your-target-pool-name";
    String healthCheckName = "your-health-check-name";
    String backendServiceName = "your-backend-service-name";
    String port = "8080"; // your port

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `client.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ComputeEngine client = ComputeEngine.create()) {
      // Create a new forwarding rule
      ForwardingRule forwardingRule;
      if (region == null) {
        // Create regional forwarding rule
        forwardingRule =
            ForwardingRule.newBuilder()
                .setName(forwardingRuleName)
                .setTarget(String.format("/region/%s/targetPools/%s", region, targetPoolName))
                .addPortRange(port)
                .build();
        RegionForwardingRule regionForwardingRule =
            RegionForwardingRule.newBuilder().setForwardingRule(forwardingRule).setRegion(zone).build();
        forwardingRule = client.insertRegionForwardingRule(regionForwardingRule, zone);
      } else {
        // Create global forwarding rule
        forwardingRule =
            ForwardingRule.newBuilder()
                .setName(forwardingRuleName)
                .setTarget(String.format("/global/targetPools/%s", targetPoolName))
                .addPortRange(port)
                .build();
        GlobalForwardingRule globalForwardingRule =
            GlobalForwardingRule.newBuilder()
                .setForwardingRule(forwardingRule)
                .setProject(project)
                .build();
        forwardingRule = client.insertGlobalForwardingRule(globalForwardingRule);
      }
      System.out.printf("Forwarding rule %s created.\n", forwardingRule.getName());
    }
  }
}

フェイルオーバー

フェイルオーバーは、サーバーやデータベースなどのコンポーネントに障害が発生したときに、トラフィックを正常なコンポーネントにリダイレクトするプロセスです。 Java で一般的に使用されるフェイルオーバー ソリューションには次のものがあります:

import com.google.cloud.compute.v1.HealthCheck;
import com.google.cloud.compute.v1.HealthCheckService;
import com.google.cloud.compute.v1.RegionHealthCheck;
import com.google.cloud.compute.v1.ResourceGroupReference;
import com.google.cloud.compute.v1.TargetPool;
import com.google.cloud.compute.v1.TargetPoolService;
import java.io.IOException;

public class CreateHealthCheck {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample
    String project = "your-project-id";
    String zone = "zone-name";
    String region = "region-name";
    String targetPoolName = "your-target-pool-name";
    String healthCheckName = "your-health-check-name";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `client.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ComputeEngine client = ComputeEngine.create()) {
      // Create a new health check
      HealthCheck hc =
          HealthCheck.newBuilder()
              .setName(healthCheckName)
              .setType("TCP")
              .setPort(8080) // optional, ignored by TCP-based heath checks
              .addTcpHealthCheck(
                  com.google.cloud.compute.v1.TcpHealthCheck.newBuilder()
                      .setRequest("/index.html")
                      .setResponse("200"))
              .build();

      // Add the health check to target pool
      TargetPool targetPool =
          TargetPool.newBuilder()
              .setName(targetPoolName)
              .addHealthChecks(String.format("/zone/%s/healthChecks/%s", zone, healthCheckName))
              .build();

      if (region == null) {
        targetPool = client.updateRegionTargetPool(targetPool, zone);
      } else {
        targetPool = client.updateGlobalTargetPool(targetPool);
      }

      System.out.printf("Added health check %s to target pool %s.\n", healthCheckName, targetPoolName);
    }
  }
}

実際のケース: Google Cloud Load Balancing の使用

以下は、Google Cloud Load Balancing を使用してロード バランシングとフェイルオーバーを実現する実際のケースです:

  1. ターゲット A を作成するバックエンド サーバー インスタンスを含むプール
  2. バックエンド インスタンスの健全性を定期的にチェックするための ヘルス チェックを作成します。
  3. ロードバランサーを作成し、トラフィックをターゲットプールにルーティングするように構成します。
  4. 障害や過剰な負荷が発生した場合、ロード バランサーはトラフィックを自動的に再ルーティングして、アプリケーションの可用性を維持します。
次の手順に従うことで、ミドルウェアを簡単に使用できるようになります

以上がJava フレームワークでミドルウェアを使用してロード バランシングとフェイルオーバーを管理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。