Ribbon ist ein Client-Load-Balancer, der eine hervorragende Kontrolle über das Verhalten von HTTP- und TCP-Clients bietet. Feign hat standardmäßig Ribbon verwendet (Referenzartikel)
1. Werfen wir zunächst einen Blick auf mehrere Kernklassen von Ribbon
1 IClientConfig
Standardimplementierungsklasse DefaultClientConfigImpl
, die hauptsächlich für verwendet wird Konfiguration Relevante Attributkonfiguration des Ribbon-Clients
2, ServerListUpdater
Standardimplementierungsklasse PollingServerListUpdater
, hauptsächlich verantwortlich für die dynamische Aktualisierung der Serverliste
Nach der Startmethode ist aufgerufen, ein Timer wird gestartet. Die Aufgabe startet die Ausführung mit einer Verzögerung von 1s und wird periodisch alle 30s ausgeführt
Das periodische Intervall kann mit ribbon.ServerListRefreshInterval=1000
oder ribbonClientName.ribbon.ServerListRefreshInterval=1000
initialisiert wirdDynamicServerListLoadBalancer
Serverliste abrufenServerList
, standardmäßig wird die Serverliste aus der Konfigurationsdatei abgerufen und wie folgt konfiguriertConfigurationBasedServerList
[ribbonClinetName].ribbon.listOfServers=xxx,xxx
Konsul-Implementierungsklasse für die Diensterkennung einführen, hauptsächlich verantwortlich für den Erhalt der Serverliste des Registrierungszentrums ConsulServerList
-Implementierung erweitern durch Konfiguration, wie folgt: ServerList
[ribbonClient].ribbon.NIWSServerListClassName=类名
ServerlistenfilterServerListFilter
hauptsächlich Filter die Serverliste basierend auf PartitionenZonePreferenceServerListFilter
Führt die Implementierungsklasse der Consul Service Discovery ein, die hauptsächlich für das Filtern der Liste der Server verantwortlich ist, die die Consul-Gesundheitsprüfung bestehen (alle Serverlisten). wird in ConsulServerList abgerufen, einschließlich Servern, die die Integritätsprüfung nicht bestehen)HealthServiceServerListFilter
Implementierung durch Konfiguration erweitern, wie folgt ServerList
[ribbonClient].ribbon.NIWSServerListFilterClassName=类名
Überprüfen Sie, ob IPing
implementiert. Dies ist eine falsche Erkennung und wird immer zurückgegeben wahrDummyPing
, Einführung von consul Die Implementierungsklasse der Serviceerkennung bestimmt hauptsächlich, ob der Server aktiv ist, basierend auf dem von consul zurückgegebenen Prüfparameter, der mit der Filterbeurteilung von identisch ist ConsulPing
HealthServiceServerListFilter
Implementierung zu erweitern: ServerList
[ribbonClient].ribbon.NFLoadBalancerPingClassName=类名
LastausgleichsauswahlIRule
, zusammengesetzte Beurteilung der Leistung der Region, in der sich der Server befindet, und der Verfügbarkeit des Servers. Server auswählen ZoneAvoidanceRule
: Zufällig einen Server auswählen RandomRule
: RoundRobin-Modusabfrage wählt Server ausRoundRobinRule
: Wiederholungsmechanismus auf der Maschine für die ausgewählte Lastausgleichsstrategie. RetryRule
: Weisen Sie eine Gewichtung basierend auf der Antwortzeit zu. Je länger die Antwortzeit, desto geringer ist die Gewichtung und desto geringer ist die Wahrscheinlichkeit, ausgewählt zu werden. WeightedResponseTimeRule
: Filtern Sie die Back-End-Server heraus, die aufgrund anhaltender Verbindungsfehler als „Circuit Tripped“ markiert sind, und filtern Sie die Back-End-Server mit hoher Parallelität heraus (aktive Verbindungen überschreiten den Konfigurationsschwellenwert) AvailabilityFilteringRule
: Wählen Sie einen Server mit den kleinsten gleichzeitigen Anfragen BestAvailableRule
, die den gesamten Lastausgleichsclient ILoadBalancer
ZoneAwareLoadBalancer
ServerList
[ribbonClient].ribbon.NFLoadBalancerClassName=类名
Load-Balancer-Startsequenzdiagramm:
Während der Initialisierung wird zunächst eine geplante Aufgabe initialisiert, die alle 30 Sekunden ausgeführt wird. Der Cache speichert alle vom Registrierungscenter erhaltenen Instanzlisten allServerList und die Instanzliste upServerList erfolgreich gepingt. Während des Lastausgleichs habe ich jedoch die Liste „allServerList“ und nicht „upServerList“ erhalten. Ich verstehe die Bedeutung dieses Pings nicht.
Starten Sie eine geplante Aufgabe, um die Dienstliste abzurufen Besuchen Sie das Registrierungscenter regelmäßig und führen Sie es alle 30 Sekunden aus
Initialisieren, um die Serviceliste zu erhalten, wird von ServiceFilter gefiltert und im Cache gespeichert.
Wenn der Client einen Anruf initiiert, ruft er die Methode ChooseServer von ILoadBalancer auf, um eine Instanz auszuwählen und sie gemäß dem Lastausgleichsalgorithmus von IRule an den Aufrufer zurückzugeben
Verwandte Artikel:
WPF 4 Ribbon Development Quick Access Toolbar )
SharePoint 2013 Blendet das Ribbon, das Menü und andere nicht inhaltsbezogene Elemente der Seite aus
Das obige ist der detaillierte Inhalt vonAnalyse des Spring-Cloud-Ribbon-Prinzips: mehrere Kernklassen von Bändern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!