Da die Komplexität von Unternehmensanwendungen weiter zunimmt, beginnen immer mehr Unternehmen, Anwendungen in mehrere Microservices aufzuteilen und den gesamten Geschäftsprozess durch die Zusammenarbeit zwischen Microservices abzuschließen. Dieser Architekturansatz kann Anwendungen stabiler und skalierbarer machen, bringt aber auch einige neue Probleme mit sich, wie z. B. Lastausgleich, Diensterkennung usw. In diesem Artikel wird erläutert, wie Sie mit Spring Cloud das Lastausgleichsproblem unter der Microservice-Architektur lösen können.
Load Balancing bezieht sich auf die Lastverteilung auf mehrere Server, Netzwerkgeräte oder Anwendungen, um eine optimale Ressourcennutzung, maximale Kapazität, schnellste Reaktionsgeschwindigkeit, höchste Zuverlässigkeit und maximale Effizienz zu erreichen und so einen effizienten und zuverlässigen Service zu erreichen.
Wenn ein Anwendungssystem beispielsweise eine große Anzahl von Besuchen hat und ein einzelner Server nicht alle Benutzeranforderungen erfüllen kann, können wir die Last auf mehrere Server verteilen, um die Stabilität, den Durchsatz und die Reaktionszeit des Systems usw. zu verbessern. Da es in der Microservice-Architektur mehrere Microservices und mehrere Serviceinstanzen gibt, ist auch der Lastausgleich unerlässlich.
Lastausgleichsalgorithmen umfassen normalerweise Folgendes:
Der Polling-Algorithmus ist einer der einfachsten Lastausgleichsalgorithmen. Verteilen Sie die Anforderungen der Reihe nach an jede Dienstinstanz in der Reihenfolge der Dienstinstanzliste. Nachdem allen Dienstinstanzen Anforderungen zugewiesen wurden, verteilen Sie sie von Grund auf neu. Der Vorteil des Abfragealgorithmus besteht darin, dass er einfach und für verschiedene Lastszenarien geeignet ist, aber auch seine Nachteile liegen auf der Hand, was dazu führen kann, dass die Last einiger Dienstinstanzen zu hoch ist.
Der Zufallsalgorithmus weist den Dienstinstanzen zufällig Anforderungen zu, wodurch in den meisten Fällen ein Lastungleichgewicht der Dienstinstanzen wirksam verhindert werden kann, es kann jedoch nicht garantiert werden, dass die jeder Dienstinstanz zugewiesenen Anforderungen gleich sind.
Der gewichtete Abfragealgorithmus ist eine Verbesserung, die auf dem Abfragealgorithmus basiert, d Die Gewichte sind proportional. Dieser Algorithmus kann das System flexibler machen und Anfragen entsprechend dem tatsächlichen Fähigkeitsgrad der Dienstinstanz zuweisen.
Der Algorithmus für die geringste Verbindung verteilt Anforderungen basierend auf der tatsächlichen Auslastung der aktuellen Dienstinstanz an die Dienstinstanz mit der geringsten Last. Dieser Algorithmus kann den Lastausgleich für jede Dienstinstanz sicherstellen, weist jedoch auch einige Mängel auf Dies kann beispielsweise dazu führen, dass bestimmte Anforderungen wiederholt auf verschiedenen Dienstinstanzen ausgeführt werden.
Spring Cloud bietet eine Komplettlösung für den Lastausgleich. Eine der Kernkomponenten davon ist Ribbon. Ribbon ist ein clientseitiger Lastenausgleich, der mit verschiedenen HTTP- und TCP-Dienstclients verwendet werden kann, um Clients stabilere und ausgewogenere Lastfunktionen bereitzustellen.
Die Verwendung von Ribbon ist sehr einfach. Sie müssen nur die folgenden Abhängigkeiten in der Spring Boot-Anwendung hinzufügen:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
Und wo der Lastausgleich verwendet werden muss, ändern Sie ihn mit der Annotation @LoadBalanced:
@Autowired @LoadBalanced private RestTemplate restTemplate;
Wenn wir auf einen Rest-Dienst zugreifen müssen, müssen Sie nur den Dienstnamen als Teil des URI im Anforderungspfad der RestTemplate verwenden:
String result = restTemplate.getForObject("http://SERVICE-NAME/path", String.class);
Unter diesen ist SERVICE-NAME der Dienstname und path der Dienstpfad . Zu diesem Zeitpunkt wählt Ribbon automatisch eine verfügbare Dienstinstanz basierend auf dem konfigurierten Lastausgleichsalgorithmus aus und verteilt die Anforderung an die Dienstinstanz. Wenn die Dienstinstanz nicht verfügbar ist, wählt Ribbon automatisch die nächste verfügbare Dienstinstanz aus.
Standardmäßig verwendet Ribbon einen Abfragealgorithmus, um einen Lastausgleich zu erreichen, der auch über die Konfigurationsdatei angegeben werden kann. Im Folgenden sind einige gängige Lastausgleichsstrategien aufgeführt:
ribbon: LoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 随机负载均衡 # LoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule # 轮询负载均衡 # LoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule # 带权重的随机负载均衡 # LoadBalancerRuleClassName: com.netflix.loadbalancer.RepeatableRandomRule # 重试随机负载均衡 # LoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule # 豁免机房、实例挂掉等异常情况负载均衡
In diesem Artikel wird erläutert, wie der Lastausgleich unter einer Microservice-Architektur über Ribbon in Spring Cloud implementiert wird. Die Verwendung von Ribbon ist sehr einfach. Wir müssen es nur mit der Annotation @LoadBalanced ändern, wenn ein Lastausgleich erforderlich ist. Wenn mehrere Dienstinstanzen verfügbar sind, wählt Ribbon automatisch eine verfügbare Dienstinstanz basierend auf der konfigurierten Lastausgleichsrichtlinie aus und verteilt Anforderungen an die Dienstinstanz, um einen Lastausgleich zu erreichen.
Das obige ist der detaillierte Inhalt vonVerwenden Sie Spring Cloud geschickt, um Lastausgleichsprobleme in der Microservice-Architektur zu lösen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!