最新の分散システムの可用性とパフォーマンスを確保するには、負荷分散とフェイルオーバーが重要です。 Java フレームワークは、成熟したミドルウェア ソリューションを通じてこれらの機能を簡単に実装できます。ロード バランサーを使用すると、受信トラフィックをバックエンド サーバー クラスターに均等に分散して、スケーラビリティと可用性を向上させることができます。コンポーネントに障害が発生した場合、フェールオーバーによってトラフィックが正常なコンポーネントにリダイレクトされ、アプリケーションの安定した動作が保証されます。この記事では、Google Cloud 上でターゲット プール、ヘルスチェック、ロードバランサを作成する実践例を含め、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 を使用してロード バランシングとフェイルオーバーを実現する実際のケースです:
以上がJava フレームワークでミドルウェアを使用してロード バランシングとフェイルオーバーを管理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。