suchen
HeimJavajavaLernprogrammWas ist Lastausgleich und wie wird er auf der Clientseite durchgeführt?

What is load balancing and how to do it on client side

„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

  1. ServiceInstanceListSupplier zum Definieren der Backend-Adressen und Ports
  2. Bean ServiceInstanceListSupplier zur Bereitstellung der Liste der Endpunkte
  3. @LoadBalancerClient, der Webclient, wird für Backend-Aufrufe verwendet

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>> 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();
    }

}

</list>

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:

  • Meine Frage in SO zur Lösung, wie man einen clientseitigen Lastausgleich mit Feder implementiert
  • Spring Cloud LoadBalancer

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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion