Heim >Java >javaLernprogramm >Was ist Lastausgleich und wie wird er auf der Clientseite durchgeführt?
„Lastausgleich“ kann als Aufrechterhaltung einer beliebigen Arbeitslast erklärt werden. Wenn Sie beispielsweise morgens 1000 Frühstücke servieren müssen, können Sie die Arbeit auf 2–3 oder mehr Caterer aufteilen, um die Liefer-/Zubereitungszeit zu verkürzen.
In der Computerwelt gilt die gleiche Logik: Wenn Sie schnell liefern möchten, können Sie die Arbeit aufteilen. Für eine Website können wir beispielsweise 5 bis 10 Webserver haben. Auf diese Weise wird die Website schneller bereitgestellt (insbesondere bei hohem Datenverkehr). ), das ist serverseitig.
Ich möchte über den clientseitigen Lastausgleich sprechen und darüber, wie das funktioniert. Sie fragen zum Beispiel das Backend für jede Anfrage ab und Sie haben mehrere Server, die die Backend-Arbeit erledigen, dafür werde ich den WHOIS-Dienst verwenden
whois1.service.com whois2.service.com
Wir können jede Anfrage auf diesen beiden Servern, dem am häufigsten verwendeten Algorithmus und dem Standard-Round-Robin-Verfahren ausgleichen, was bedeutet, dass jede Anfrage an einen Server oder an einen anderen geht, z. B. who1, who2, who1 usw. Dies kann auf der Clientseite mit „ Spring Cloud LoadBalancer“. Wir müssen 3 Klassen konfigurieren
Jetzt haben wir das gesamte Setup für das Backend
public class RestCaller implements ServiceInstanceListSupplier { private final String serviceId; public RestCaller(String serviceId) { this.serviceId = serviceId; } @Override public String getServiceId() { return serviceId; } @Override public Flux<List<ServiceInstance>> get() { return Flux.just(Arrays.asList( new DefaultServiceInstance(serviceId, serviceId, "abc.cyclic.app", 443, true), new DefaultServiceInstance(serviceId, serviceId, "someting.koyeb.app", 443, true), new DefaultServiceInstance(serviceId, serviceId, "127.0.0.1", 8080, false) )); } } @Configuration public class RestCallerConfiguration { @Autowired @Qualifier("webClientBuilder") WebClient.Builder webClientBuilder; @Bean @Primary ServiceInstanceListSupplier serviceInstanceListSupplier(ConfigurableApplicationContext ctx) { return ServiceInstanceListSupplier .builder() .withRetryAwareness() .withHealthChecks(webClientBuilder.build()) .withBase(new RestCaller("whoisService")) .build(ctx); } } @Configuration @LoadBalancerClient(name = "whoisService", configuration = RestCallerConfiguration.class) public class WebClientConfig { @LoadBalanced @Bean @Qualifier("loadBalancedWebClientBuilder") WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } @Bean @Qualifier("webClientBuilder") WebClient.Builder webClientBuilder() { return WebClient.builder(); } }
Dies kann jetzt in jeder @Component oder @Service verwendet werden.
@Component public class WhoisCaller { @Autowired @Qualifier("loadBalancedWebClientBuilder") WebClient.Builder webClientBuilder; public String getWhois(String ip, String source) { String url = "http://whoisService/whois?ip=" + ip + "&source=" + source; return webClientBuilder.build() .get() .uri(url) .retrieve() .bodyToMono(String.class) .timeout(Duration.ofMinutes(1)) .doOnError(e -> { WebClientResponseException e1 = (WebClientResponseException) e; log.error(e1.getRequest().getURI().getHost()); }) .block(); } }
Referenzen:
Das obige ist der detaillierte Inhalt vonWas ist Lastausgleich und wie wird er auf der Clientseite durchgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!