Technologieaustausch

SpringCloud

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Was sind Microservices?

1. Grundkonzepte

Microservices sind einarchitektonischer Stil(Im Gegensatz zur monolithischen Architektur, vertikalen Architektur, verteilten Architektur und SOA-Architektur) sind Anwendungen in kleinere, prozessgesteuerte Dienste unterteilt.

2. Merkmale von Microservices

  1. Leicht: Komplexe Systeme oder Dienste werden vertikal aufgeteilt, und jeder Mikrodienst konzentriert sich auf die Lösung spezieller Probleme.
  2. Geringe Kopplung: Jeder Split-Dienst ist in Bezug auf Code, Ressourcen und Umgebung unabhängig voneinander und kann unabhängig entwickelt, getestet, bereitgestellt und gewartet werden, was sich positiv auf die Stabilität des Systems auswirkt (bei Problemen werden die Auswirkungen verringert). auftreten) und Erweiterung (Ausweitung der Ressourcen) Die Ressourcenbewertung ist bequemer und weniger riskant.
  3. Plattformübergreifend: Verschiedene Microservices können unterschiedliche Entwicklungssprachen verwenden und in unterschiedlichen Umgebungen ausgeführt werden.

2. Was ist SpringCloud?

1. Grundkonzepte:

Spring Cloud ist einMicroservices-Framework , das eine Reihe verteilter Systemlösungen anbietet. Bietet Funktionen wie die Entwicklung und Bereitstellung von Microservices, die Registrierung und Erkennung von Diensten, die Verwaltung von Diensten sowie den Betrieb und die Wartung von Diensten durch Komponentisierung.

2. Häufig verwendete Komponenten:

1)Spring Cloud Netflix:

Eureka: Registrierungszentrum

Multifunktionsleiste: Lastausgleich

Vortäuschen: Fernanruf

Hystrix: Service-Leistungsschalter

Zuul/Gateway: Gateway

2)Spring Cloud Config: Zentralisiertes Konfigurationsverwaltungstool, externe Speicherung der Anwendungskonfiguration, kann für Spring- oder Nicht-Spring-Anwendungen verwendet werden.

3)Spring Cloud Bus: Ereignis- und Nachrichtenbus, der zur Weitergabe von Statusänderungen oder Konfigurationsänderungsereignissen im Cluster verwendet wird.

4)Spring Cloud Consul: Diensterkennungs- und Konfigurationstool, nahtlos integriert in Docker-Container.

5)Spring Cloud Security: Ein Sicherheits-Toolkit, das Unterstützung für Anwendungssicherheit und Authentifizierung bietet.

6)Spring Cloud Sleuth: Verteilte Anrufkettenverfolgung, kompatibel mit Zipkin-, HTrace- und ELK-Tracing.

7)Spring Cloud Cluster: Wahl des Anführers, implementiert durch Abstraktion von Zookeeper, Redis und Consul.

8)Spring Cloud Data Flow: Microservice-Orchestrierung, einfach zu verwenden über Drag-and-Drop-Schnittstelle oder REST-API.

9)Spring Cloud Stream: Ein leichtes, ereignisgesteuertes Microservice-Framework zum schnellen Erstellen von Anwendungen, die eine Verbindung zu externen Systemen herstellen.

10)Spring Cloud Task: Ein kurzfristiges Microservice-Framework zum schnellen Erstellen von Anwendungen, die Batch-Datenverarbeitungsaufgaben ausführen.

3. Schritte zur Verwendung von SpringCloud-Komponenten

Springcloud-Tutorial – 3. Microservice-Leistungsschaltermechanismus, detaillierte Erklärung der Verwendung des Leistungsschalters hystrix_So konfigurieren Sie den Java-Leistungsschalter – CSDN-Blog

Springcloud-Tutorial – 4. Detaillierte Erklärung der Verwendung des Gateways zuul_zuul-Nutzungs-Tutorial – CSDN-Blog

1. Hystrix (Sicherung, Downgrade, Strombegrenzung)

1) Was macht es?

existierenin verteilten Systemen Wenn ein Dienstknoten ausfällt oder eine Netzwerkanomalie auftritt, kann der Anrufer blockiert werden und warten. Wenn das Zeitlimit auf einen langen Zeitraum eingestellt ist, sind die Ressourcen des Anrufers möglicherweise erschöpft.Dies wiederum führt zu einer Ressourcenerschöpfung im Upstream-System des Aufrufers, was letztendlich zu …Systemlawine . Leistungsschalter können Betriebslawinen wirksam verhindern.

Wenn Sie einen plötzlichen Anstieg des Verkehrs feststellen, besteht die allgemeine Vorgehensweise darin, Folgendes zu tun:Nicht zum Kerngeschäft gehörende FunktionenEs werden Dienstverschlechterungsmaßnahmen ergriffen, um den normalen Dienst der Kerngeschäftsfunktionen zu schützen, während für Kernfunktionsdienste aktuelle Begrenzungsmaßnahmen ergriffen werden müssen.

2) Geschieht es auf der Client-Seite oder auf der Server-Seite?

Service-Leistungsschalter:allgemein Es tritt auf der Serverseite auf (der Zweck besteht darin, dem Aufrufer einen schnellen Ausfall zu ermöglichen oder einen Fehler zu verursachen, der eine Sicherung verursacht, ähnlich einer Sicherung im wirklichen Leben). (Manchmal kann es auch auf dem Client so konfiguriert werden, dass es schnell fehlschlägt, wenn beim Aufrufen eines bestimmten Dienstes eine Ausnahme gefunden wird.)
Dienstverschlechterung: Tritt im Allgemeinen auf der Clientseite auf, wenn ein Dienst getrennt oder heruntergefahren wird (manchmal kann er auch auf der Serverseite konfiguriert werden). Plötzlicher Datenverkehr führt dazu, dass die Kernfunktionen herabgestuft werden, um die Kernfunktionen zu schützen.

Strombegrenzung: Tritt normalerweise serverseitig auf;

3) Verwendung

  • Kernschmelze:

@EnableCircuitBreaker: bei Anwendung aktiviertSicherung

@HistrixCommand(fallbackMethod="xxxFallback",commandProperties = {
}): Die Fusionsanmerkung wird zur Herabstufungsanmerkung hinzugefügt. Geben Sie die Fusionsbedingungen in commandProperties = {} ein.HystrixPropertiesManagerÜberprüfen.

  1. @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
  2. //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
  3. // 条件一: 请求数量达到3个
  4. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
  5. // 条件二: 每20秒一个判断单位
  6. @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
  7. // 条件三: 失败率30%
  8. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
  9. // 结果: 熔断后, 30秒内不再请求远程服务
  10. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
  11. })
  • Downgrade:

Erstellen Sie eine neue xxxFallbackFactory-Klasse, um FallbackFactory zu implementieren und die Create-Methode zu überschreiben. Die Downgrade-Methode wird in Create definiert.

@FeignCliend(fallbackFactory=xxxFallbackFactory.class): Histrix ist in Feign integriert

Oder geben Sie die Fallback-Methode direkt in der Methode an: @HistrixCommand(fallbackMethod="xxxFallback")

  • Einschränkung:

        1、Aktuelle Begrenzungsstrategie:

1), Semaphor-Strombegrenzung

Semaphor wird verwendet, um die Anzahl gleichzeitiger Threads zu steuern. Geben Sie die Anzahl der internen virtuellen Lizenzen über den Konstruktor an.

Wenn die Semaphor-Isolationstechnologie verwendet wird, ruft der eigene Thread des Dienstes den abhängigen Dienst direkt auf. Nachdem jeder Thread den Prüfpunkt passiert hat, wird die Anzahl der Semaphoren um 1 reduziert Ist 0, ist dies nicht mehr der Fall Der Thread darf passieren, aber die Fallback-Logik wird direkt ausgeführt und zurückgegeben. Um es ganz klar auszudrücken: Es handelt sich lediglich um eine aktuelle Grenze.

Ein Semaphor kann als ein verstanden werdenSchalter, zählt der Zähler die Anzahl der aktuell verarbeiteten Anfragen. Wenn der Zählerwert den eingestellten Wert erreicht, werden nachfolgende Anfragen nicht akzeptiert (oder herabgestuft) und Sie müssen warten, bis der Zählerwert unter dem eingestellten Wert liegt, bevor nachfolgende Anfragen verarbeitet werden können wird verarbeitet.

  1. @HystrixCommand(
  2. commandProperties= {
  3. @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
  4. @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
  5. },
  6. fallbackMethod = "errMethod"
  7. )

2), Thread-Pool-Strombegrenzung

  1. @HystrixCommand(
  2. commandProperties = {
  3. @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
  4. },
  5. threadPoolKey = "createOrderThreadPool",
  6. threadPoolProperties = {
  7. @HystrixProperty(name = "coreSize", value = "20"),
  8. @HystrixProperty(name = "maxQueueSize", value = "100"),
  9. @HystrixProperty(name = "maximumSize", value = "30"),
  10. @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
  11. },
  12. fallbackMethod = "errMethod"
  13. )

Hinweis hier: injavaWenn die Anzahl der Threads im Thread-Pool überschritten wirdcoreSize, Thread-Erstellungsanforderungen werden zuerst in die Warteschlange gestellt. Wenn die Warteschlange voll ist, werden weiterhin Threads erstellt, bis die Anzahl der Threads erreicht istmaximumSize , und übernehmen Sie dann die Ablehnungsstrategie.Es gibt jedoch einen zusätzlichen Parameter im von hystrix konfigurierten Thread-PoolqueueSizeRejectionThreshold,WennqueueSizeRejectionThreshold < maxQueueSize, die Anzahl der Warteschlangen erreichtqueueSizeRejectionThresholdwird die Ablehnungsstrategie übernehmen, alsomaximumSize fehlgeschlagen.WennqueueSizeRejectionThreshold > maxQueueSize, die Anzahl der Warteschlangen erreichtmaxQueueSizeStunde,maximumSizegültig ist, erstellt das System weiterhin Threads, bis die Anzahl erreicht istmaximumSize

      2. Der Unterschied zwischen der Semaphor-Strombegrenzung und der Thread-Pool-Strombegrenzung:

1) Leistungsniveau: Das Semaphor verwendet den Original-Thread und weist einen geringen Leistungsverbrauch auf.

2) Systemstabilitätsniveau: Thread-Pools sind isoliert und Probleme allein wirken sich nicht auf andere Thread-Pools aus.

3) Synchron und asynchron: Da das Semaphor der ursprünglich verwendete Thread ist, ist es synchron und blockierend.

        3. Aktuelle Nutzungsszenarien der Begrenzungsstrategie:

Wenn die Anzahl der Anfragen sehr hoch ist und der Overhead der Thread-Isolation relativ hoch ist, wird empfohlen, Semaphoren zu verwenden, um die Last zu reduzieren. Diese Situation wird normalerweise zur Bearbeitung von Nicht-Netzwerk-Anfragen (ohne Aufruf externer Dienste) verwendet. In anderen Szenarien wird empfohlen, die Thread-Pool-Methode zu verwenden.

4) Was ist der Unterschied zwischen den dreien?

Bei der Strombegrenzung handelt es sich lediglich um eine Strombegrenzung. Solange das Verkehrslimit nicht überschritten wird, ist der Dienst weiterhin verfügbar (im Gegensatz zum Leistungsschalter) und muss nicht herabgestuft werden (die Ausnahme für das Überschreiten des Verkehrslimits kann auch für den Anrufer ausgelöst werden). von allein). Sprechen wir also einfach über den Unterschied zwischen Leistungsschalter und Downgrade:

  • verschiedene Konzepte

Ein Leistungsschalter bedeutet, dass der Dienst als Ganzes nicht verfügbar ist (mit Schwerpunkt auf dem Selbstschutz), ein Downgrade bedeutet, dass die nächstbeste Option gewählt wird (mit Schwerpunkt auf dem Schutz des Endergebnisses), und eine Strombegrenzung bezieht sich auf die Menge an Datenverkehr, die nicht überschritten werden darf.

  • Verschiedene Auslösemechanismen

Wenn hystrix innerhalb von 10 Sekunden feststellt, dass die Anforderungsfehlerrate 50 % überschreitet, löst es standardmäßig den Schutzschaltermechanismus aus. Danach wird die Anfrage an den Microservice alle 5 Sekunden wiederholt. Wenn der Microservice nicht antworten kann, wird der Schutzschaltermechanismus fortgesetzt. Wenn der Microservice erreichbar ist, wird der Schutzschaltermechanismus ausgeschaltet und normale Anfragen werden wiederhergestellt.

Standardmäßig löst hystrix den Downgrade-Mechanismus unter den folgenden 4 Bedingungen aus:

  1. Die Methode löst eine HystrixBadRequestException aus
  2. Zeitüberschreitung beim Methodenaufruf
  3. Schalten Sie den Schutzschalter ein, um den Anruf abzufangen
  4. Der Thread-Pool oder die Warteschlange oder das Semaphor ist voll
  • Unterschiedliche Eigentumsverhältnisse

Der Downgrade-Mechanismus kann während des Leistungsschalters aufgerufen werden, der Leistungsschalter-Mechanismus wird jedoch normalerweise nicht während des Downgrades aufgerufen.Denn Leistungsschalter gehen von der Gesamtperspektive aus und deaktivieren Dienste, um die Systemstabilität zu gewährleisten, während ein Downgrade die nächstbeste Lösung ist und eine garantierte Lösung bietet, sodass ihre Eigentumsverhältnisse unterschiedlich sind (Leistungsschalter &gt; Downgrade).

2. Feign und RestTemplate

Zusammenfassung des Linkinhalts:

  1. Starterabhängigkeit hinzufügen;
  2. Anmerkung hinzufügen: @EnableFeignClients;
  3. Feign-Schnittstelle erstellen:

@FeignClient(name="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)

Springcloud-Tutorial – 1. Erstellen Sie schnell eine Demo für Einsteiger, lesen Sie einfach diesen Artikel_Ye Juyan-GitCode Open Source CommunityFolgen Sie mir ohne weitere Umschweife und starten Sie Ihr erstes Spring Cloud-Erlebnis. Sehen Sie sich zunächst die grundlegenden Komponenten von Microservices an: [Bild hier] Produzent: Dienst bereitstellen Verbraucher: Dienst konsumieren Service-Registrierungs-/Erkennungscenter: Service-Registrierung, Erkennung, Überwachung Also zuerst Verstehen Sie die architektonischen Grundlagen von Springcloud-Microservices: Produzent (Client), Verbraucher (Client), Service-Registrierungs-/Erkennungszentrum (Server) Ye Juyan GitCode Open Source Communityicon-default.png?t=N7T8https://gitcode.csdn.net/65e840841a836825ed78b9d0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzI1MTQ3NiwiZXhwIjoxNzIxMTM0MjcwLCJpYXQiOjE3MjA1Mjk0NzAsInVzZXJuYW1lIjoicXFfMTk5NTIwMjkifQ.7co5oRDfDrxtdqIsV-9AjJacdbURh-cikj5Rtxt7Z1c

3. Verwendung von Zuul

beziehen auf:

Praktische Implementierung der SpringBoot-Projektarchitektur „Gateway zuul construction“-CSDN-Blog

4. Nutzung des Registrierungszentrums Eureka

beziehen auf:

SpringBoot-Projektarchitektur, tatsächlicher Kampf „Bau des übergeordneten Projekts und Aufbau des Registrierungszentrums“_Java-Konstruktion, Start des übergeordneten Springboot-Projekts – CSDN-Blog

4. Wie SpringCloud funktioniert

1. Eureka-Funktionsprinzip:

  1. Dienstregistrierung: Wenn der Dienstanbieter startet, sendet er eine Registrierungsanfrage an den Eureka-Server, einschließlich der IP-Adresse des Dienstes, der Portnummer, des Dienstnamens und anderer Informationen. Nach Erhalt der Registrierungsanfrage speichert der Eureka-Server die Serviceinformationen im Speicher und stellt eine Abfragefunktion für externe Serviceregistrierungsinformationen bereit.

  2. Diensterkennung: Wenn ein Dienstkonsument andere Dienste aufrufen muss, sendet er eine Diensterkennungsanforderung an den Eureka-Server, um eine Liste der Instanzen der erforderlichen Dienste zu erhalten. Nach Erhalt der Anfrage gibt der Eureka-Server eine Liste der Instanzen des entsprechenden Dienstes zurück, einschließlich der IP-Adresse, der Portnummer und anderer Informationen des Dienstes. Der Dienstkonsument wählt basierend auf der zurückgegebenen Instanzliste eine der aufzurufenden Dienstinstanzen aus (Lastausgleich).

  3. Heartbeat-Gesundheitsprüfung: Der Dienstanbieter sendet regelmäßig Heartbeat-Pakete an den Eureka-Server, um nachzuweisen, dass sein Dienst im Normalbetrieb ist. Wenn der Eureka-Server innerhalb eines bestimmten Zeitraums kein Heartbeat-Paket von einer Dienstinstanz erhält, betrachtet er die Dienstinstanz als ausgefallen und entfernt sie aus der Dienstliste.

5. SpringCloud zugrunde liegender Quellcode

1. Gateway Zuul-Quellcode

Praktische Implementierung der SpringBoot-Projektarchitektur „Gateway zuul construction“-CSDN-Blog Der Artikel wurde 227 Mal aufgerufen und gelesen. Kapitel 3 Gateway Zuul-Konstruktion Vorwort: 1. Hauptfunktionen Zuul bietet hauptsächlich dynamisches Routing (integrierte Ribbon-Implementierung) und Filterung (kann als einheitlicher Authentifizierungsfilter, Graustufen-Veröffentlichungsfilter, Black- und Whitelist-IP-Filter, Dienststrombegrenzungsfilter verwendet werden). (Kann mit Sentinel implementiert werden)) Funktion 2. Der Unterschied zu Spring Cloud GateWay besteht darin, dass es sich um eine Gateway-Lösung handelt, die von zwei verschiedenen Open-Source-Organisationen bereitgestellt wird. Spring Cloud GateWay verwendet eine nicht blockierende API, einen integrierten Strombegrenzungsfilter, unterstützt lange Verbindungen (z. B. WebSockets) und ist in Szenarien mit hoher Parallelität und langsamer Back-End-Service-Reaktion besser als Zuul ...https://blog.csdn.net/qq_19952029/article/details/124285479

2. Eureka-Quellcode des Registrierungszentrums

3. Quellcode des Leistungsschalters Histrix

4. Konfigurationscenter-Konfigurationsquellcode

5. Load-Balancing-Ribbon-Quellcode

6. Microservice ruft Feign-Quellcode auf

6. Wie SpringCloud verteilte Transaktionen implementiert

Übung zum Seata TCC-Modus (Teil 2) – Alibaba Cloud Developer CommunityTatsächlicher Kampf im Seata TCC-Modus (Teil 2)icon-default.png?t=N7T8https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9Der obige Blogbeitrag löst das Federungsproblem nicht, was anhand verschiedener Statusindikatoren beurteilt werden kann.

https://www.cnblogs.com/lilpig/p/16613226.htmlicon-default.png?t=N7T8https://www.cnblogs.com/lilpig/p/16613226.html

1. Rolle im TCC-Modus

TM: Transaktionsmanager, generiert mit der Annotation @GlobalTransaction.

TC: Koordinator

RM: Teilnehmer

Der gesamte Prozess ist:

TM leitet Ihre globalen Transaktionen weiter und registriert sich bei TC, bevor mit der Ausführung begonnen wird
TM beginnt mit der Ausführung jeder Zweigtransaktion in der globalen Transaktion, und RM registriert und meldet Zweigtransaktionen und Ausführungsstatus an TC
Nachdem die Ausführung der Verzweigungstransaktion abgeschlossen ist, initiiert TM eine Anfrage an TC, um die globale Transaktion festzuschreiben oder zurückzusetzen.

2. Die Bedeutung von TCC-Ressourcenreservierung, -Übermittlung und -Rollback.

Reservierung bedeutet, die Datenbankressource zu sperren und auf einen Zwischenstatus zu aktualisieren und sie dann in den effektiven Status zu ändern, wenn nach der Bestätigung die Festschreibung der zweiten Stufe durchgeführt wird.Also die Reservierungsphase und die Commit-Rollback-PhaseBei allen geht es um den Betrieb von DatenbankenDaher kann es auch zu Bestätigungs- und Rollback-Fehlern kommen, die eine manuelle Verarbeitung erfordern. Dies kann durch Aufzeichnen von Protokollen, Kompensieren von Wiederholungsversuchen usw. behoben werden.

3. Vor- und Nachteile von TCC

Vorteile des TCC-Modus

  1. Direkte Übermittlung in einer Phase, keine DB-Sperre, keine anderen Sperren, gute Leistung
  2. Die Reservierungs- und Wiederherstellungslogik wird von Ihnen selbst geschrieben und ist nicht von der Datenbank abhängig. Sie kann in nicht-transaktionalen Datenbanken verwendet werden.

Nachteile des TCC-Modus

  1. Codierung ist komplex
  2. Schwach konsistent
  3. WeilConfirmUndCancelMöglicherweise schlägt es auch fehl und Sie müssen sich mit diesem Prozess befassen
  4. Einige Unternehmen sind für das TCC-Modell nicht geeignet. Zum Beispiel ist das Aufgeben einer Bestellung ein Vorgang, bei dem eine neue Zeile hinzugefügt wird. Es gibt keine Möglichkeit oder Notwendigkeit, TCC zu verwenden.

4. XA-Modus

Starke Konsistenz durch Koordination, wann lokale Transaktionen jedes Teilnehmers festgeschrieben und zurückgesetzt werden.

Vorteile des XA-Modus

  1. Da die meisten Datenbanken bereits XA-Transaktionen unterstützen, ist die Implementierung einfach und Seata muss lediglich eine einfache Paketierung durchführen
  2. starke Konsistenz

Nachteile des XA-Modus

  1. Jede Transaktion muss warten, bis die gesamte Transaktionsverarbeitung abgeschlossen ist, wodurch Datenbanksperren belegt werden, was zu schlechter Leistung und geringer Verfügbarkeit führt.
  2. Es kann nicht verwendet werden, wenn die Datenbank keine XA-Transaktionen unterstützt

5. AT-Modus

schwache Konsistenz