1: Was ist Band?
Ribbon ist ein von Netflix veröffentlichtes Open -Source -Projekt. Die Hauptfunktion besteht darin, Algorithmen für clientseitige Software-Lastausgleichsbilanzien bereitzustellen, um die mittleren Dienste von Netflix miteinander zu verbinden. Die Band -Client -Komponente bietet eine Reihe vollständiger Konfigurationselemente wie Timeout von Verbindungen, Wiederholung usw.. Durch die Tibbon können Sie diese Maschinen automatisch basierend auf bestimmten Regeln (z. B. einfache Umfragen, sofortige Verbindung usw.) anschließen. Wir haben auch eine sehr einfache Möglichkeit, benutzerdefinierte Lastausgleichsalgorithmen mit einem Band zu implementieren.
Zwei: LB -Schema -Klassifizierung
Derzeit kann das Mainstream -LB -Schema in zwei Kategorien unterteilt werden: Einer ist zentraler LB, dh unabhängige LB -Einrichtungen (können Hardware wie F5 oder Software wie NGINX) zwischen dem Dienstverbraucher und dem Anbieter sein, und die Einrichtung ist für die Weiterleitung von Zugriffsanfragen an den Dienstanbieter über eine bestimmte Richtlinie verantwortlich. Das andere ist In-Process LB, das die LB-Logik in den Verbraucher integriert, und der Verbraucher weiß aus dem Service-Registrierungszentrum, das Adressen verfügbar sind, und wählt dann einen geeigneten Server aus diesen Adressen selbst aus. Das Band gehört zu letzterem. Es ist nur eine Klassenbibliothek, die in den Verbraucherprozess integriert ist. Durch sie erhalten Verbraucher die Adresse des Dienstleisters.
Drei: Hauptkomponenten und Workflows Ribbon
Die Kernkomponenten von Ribbon (alle sind Schnittstellentypen) haben Folgendes:
Serverlist
Wird verwendet, um die Adressliste zu erhalten. Es kann entweder statisch sein (ein fester Satz von Adressen) oder dynamisch (wiederkehrende Abfrage für Adresslisten aus der Registrierung).
ServerListFilter
Nur bei der Verwendung von Dynamic ServerList verwendet, wird es verwendet, um bestimmte Richtlinien in der ursprünglichen Dienstliste zu verwenden, um einige Adressen zu berücksichtigen.
IRule
Wählen Sie eine endgültige Serviceadresse als LB -Ergebnis. Ausgewählte Richtlinien umfassen die Umfrage, die Gewichtung auf der Grundlage der Antwortzeit, des Leistungsschalters (wenn Hystrix verfügbar ist) usw.
Wenn die Tibbon funktioniert, wird die Verwendung von ServerList bevorzugt, um alle verfügbaren Dienstelisten zu erhalten, und verwenden Sie dann ServerListFilter, um einige der Adressen zu berücksichtigen, und wählen schließlich einen Server in den verbleibenden Adressen über IRULE als Endergebnis aus.
Vier: Einführung in die von Ribbon bereitgestellten Hauptlastausgleichsstrategien
1: Einfacher Wahllokalausgleich (Roundrobin)
Die Anfragen sind wiederum befragt, dh jeder Zeitplan wird i = (i + 1) mod n und der i-h-Server ausgewählt.
2: Zufälliger Lastausgleich (zufällig)
Wählen Sie zufällig Server mit UP -Status aus
3: Gewichtsresponsetime -Lastausgleich (Gewichtsprotokoll)
Ein Gewicht wird gemäß der entsprechenden Zeit zugewiesen. Je länger die entsprechende Zeit ist, desto kleiner ist das Gewicht und desto niedriger die Möglichkeit einer Auswahl.
4: Zoneavoidanzer
Bestimmen Sie umfassend die Leistung des Serverbereichs und des Server -Verfügbarkeitsauswahlservers
Vergleich der eigenen Lastausgleichsstrategien von Ribbon
| Strategiename | Grundsatzerklärung | Richtlinienbeschreibung | Implementierungsanweisungen |
| BestaVailablerule | public class BestaVailablerule erweitert ClientConformabledRoundRobinrule | Wählen Sie einen Server mit der kleinsten gleichzeitigen Anforderung aus | Überprüfen Sie den Server nacheinander. Wenn der Server ausgelöst wird, ignorieren Sie ihn. Wählen Sie den Server mit der kleinsten Aktivitätsquote aus |
| VerfügbarkeitsFilteringRule | Öffentliche KlassenverfügbarkeitsFilteringRule erweitert PredicateBasedRule | Filtern Sie diese Backend -Server, die als Schaltung markiert sind, aufgrund des Verbindungsversagens und filtern Sie diese Backend -Server mit hoher Parallelität heraus (aktive Verbindungen überschreiten den konfigurierten Schwellenwert). | Verwenden eines availabilityPredicate, um die Logik der Filterungsserver einzuschließen |
| Gewichtsresponsetimerule | Die öffentliche Klasse Gewichtsresponsetimerule erstreckt sich RoundRobinrule | Ein Gewicht wird gemäß der entsprechenden Zeit zugewiesen. Je länger die entsprechende Zeit ist, desto kleiner ist das Gewicht und desto niedriger die Möglichkeit einer Auswahl. | Ein Hintergrund -Thread liest regelmäßig die Bewertungsantwortzeit aus dem Status und berechnet ein Gewicht für jeden Server. Die Berechnung des Gewichts ist ebenfalls relativ einfach. Reaktionszeit abzüglich der durchschnittlichen Reaktionszeit jedes Servers ist das Gewicht des Servers. Wenn der Status gerade gestartet wird und keine Statistiken gebildet werden, verwenden Sie die Roubine -Richtlinie, um den Server auszuwählen. |
| Wiederholung | öffentliche Klasse Retyrule erweitert AbstractLoadBalancerrrule | Wiederholen Sie den Mechanismus auf der Maschine für die ausgewählte Lastausgleichsrichtlinie. | Während eines Konfigurationszeitraums, wenn die Serverauswahl nicht erfolgreich ist |
| RoundrobinRule | RoundrobenRule der öffentlichen Klasse erweitert abstrakt | RoundRobin -Methodenabfragen zum Auswählen des Servers | Umfrageindex und wählen Sie den Server, der dem Index entspricht |
| RandomRule | Die öffentliche Klasse RandomRule erweitert abstractloadBalancerrrule | Wählen Sie zufällig einen Server aus | Aus dem Zufallsprinzip im Index wählen Sie den Server, der der Indexposition entspricht |
| Zoneavoidanzer | öffentliche Klasse Zoneavoidanal erweitert PredicateBasedRule | Bestimmen Sie umfassend die Leistung des Serverbereichs und des Server -Verfügbarkeitsauswahlservers | Verwenden Sie ZoneavoidancePredicate und availabilityPredicate, um festzustellen, ob ein Server ausgewählt ist. Der vorherige bestimmt, ob die Betriebsleistung einer Zone verfügbar ist. Nicht verfügbare Zonen (alle Server) ausschließen. AvailabilityPredicate wird verwendet, um Server mit zu vielen Verbindungen herauszufiltern. |
5: Band allein
Erstellen Sie einen Maven -Projektnamen Ribbon_Client
POM -Inhalt
<dependencies> <dependency> <groupId>com.netflix.ribbon</groupId> <artifactId>ribbon-core</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.netflix.ribbon</groupId> <artifactId>ribbon-httpclient</artifactId> <version>2.2.0</version> </dependency> </Abhängigkeiten>
Probe-Client.Properties-Konfigurationsdatei
# Maximale Anzahl der Wiederholungen Beispiel-Client Sample-Client.ribbon.ServerlistReFreshInterval = 2000# Timeout anschließen von Apache Httpclient Sample-Client Beispiel-client.ribbon.Listofservers = www.sohu.com: 80, www.163.com: 80, www.sina.com.cn: 80Sample-client.ribbon.enablePrimeConnections = True
Ribbonmain -Code
importieren java.net.uri; importieren com.netflix.client com.netflix.niws.client.http.restclient; public class Ribbonmain {public static void main (String [] args) löst eine Ausnahme aus {configurationManager.loadPropertiesfromResources ("Sample-Client.Properties"); System.out.println (configurationManager.getConfiginstance (). RastClient client = (rastClient) clientFactory.getNamedClient ("Sample-Client"); Httprequest request = httprequest.newbuilder (). URI (neuer URI ("/")). Build (); für (int i = 0; i <4; i ++) {httPresponse response = client.executeWithBoLeBalancer (Anfrage); System.out.println ("Status für URI:" + response.getRequesturi () + "ist:" + response.getStatus ()); } ZoneeAwareloadBalancer lb = (ZoneeAwareloadBalancer) Client.getloadBalancer (); System.out.println (lb.getloadBalancerStats ()); ConfigurationManager.getConfiginstance (). SetProperty ("sample-client.ribbon.listofservers", "ccblog.cn:80 ,www.linkedin.com:80"); System.out.println ("Server ändern ..."); Thread.sleep (3000); für (int i = 0; i <3; i ++) {httPesponse response = client.executeWithBalbBalancer (Anfrage); System.out.println ("Status für URI:" + response.getRequesturi () + "ist:" + response.getStatus ()); } System.out.println (lb.getloadBalancerStats ()); }}Code analysieren
Verwenden Sie Archaius configurationManager, um Eigenschaften zu laden.
Verwenden Sie ClientFactory, um Clients zu erstellen und Balancer zu laden.
Verwenden Sie Builder, um HTTP -Anfragen zu erstellen. Beachten Sie, dass wir nur den Pfad des "/" -Teils des URI unterstützen. Sobald der Server vom Lastausgleich ausgewählt wurde, berechnet der Client den vollständigen URI.
API Client.executeWithBalbBalancer () aufzurufen ist nicht die API von Execte ();
Dynamisch den Serverpool in der Konfiguration korrigieren;
Warten Sie, bis die Serverliste aktualisiert wird (das in der Konfigurationsdatei definierte Aktualisierungsintervall beträgt 3 Sekunden).
Drucken Sie die vom Load Balancer aufgezeichneten Serverstatistiken aus.
Sechs: Band in Kombination mit Eureka
Starten Sie zunächst das Projekt Eureka_register_Service (Registrierungszentrum) und Biz-Service-0-Projekt (Service Produzent)
Erstellen Sie ein Maven-Projekt. Eureka_ribbon_Client Dieses Projekt startet und verwandte Konfigurationen hängen von eureka_register_service und biz-service-0 ab
Pom Join
<Ters </GroupId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Parent </artifactid> <version> 1.4.3.Release </Version> <RelativePaths/> <!-SOOKUP-Elternschaft aus der Repository-> </parent> <abhängigkeiten> <abhängigkeiten> <gruppe <gruppy> <gruppe org. <artifactid> Spring-Cloud-Starter-Ribbon </artifactId> </abhängig> <depecing> <GroupId> org.springFramework <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>
Fügen Sie in der Anwendungs -Hauptklasse Erkennungsdienstfunktionen über die @EnablediscoveryClient -Annotation hinzu. Erstellen Sie eine RastTemplate -Instanz und aktivieren Sie das Ausgleich der Belastungskapazität durch die @loadBalanced Annotation.
@SpringBootApplication @enablediscoveryClientPublic Class RibbonApplication {@Bean @LoadBalanced rastTemplate rastTemplate () {return New rastTemplate (); } public static void main (String [] args) {SpringApplication.run (RibbonApplication.Class, args); }}Erstellen Sie einen ConsumerController, um den GetUser-Service von Biz-Service-0 zu konsumieren. Rufen Sie den Dienst durch direkt rastTemplate an
@RestControllerPublic Class ConsumerController {@autowired rastTemplate rastTemplate; @RequestMapping (value = "/getUserInfo", method = requestMethod.get) public String add () {return rastTemplate.getForentity ("http: // biz-service-0/getUser, String.class) .getBody (); }} Konfigurieren Sie das Eureka Service Registration Center in application.Properties
Spring.Application.Name = Ribbon-ConsumerServer.port = 8003eureka.client.serviceurl.defaultZone = http: // localhost: 8000/eureka/
Nach Abschluss können Sie http: // localhost: 8003/getUserinfo öffnen, um die Ergebnisse zu sehen
Zusammenfassung: Das Band ist eigentlich eine Clientkomponente aus Soft Load Balancing. Es kann in Kombination mit anderen erforderlichen Anforderungen verwendet werden. Das Kombinieren mit Eureka ist nur ein Beispiel dafür.
Codeadresse: https://github.com/zhp8341/springclouddemo
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.