2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Microservices sind einarchitektonischer Stil(Im Gegensatz zur monolithischen Architektur, vertikalen Architektur, verteilten Architektur und SOA-Architektur) sind Anwendungen in kleinere, prozessgesteuerte Dienste unterteilt.
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.
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.
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.
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;
@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.
- @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
- //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
- // 条件一: 请求数量达到3个
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
- // 条件二: 每20秒一个判断单位
- @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
- // 条件三: 失败率30%
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
- // 结果: 熔断后, 30秒内不再请求远程服务
- @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
- })
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")
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.
- @HystrixCommand(
- commandProperties= {
- @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
- @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
- },
- fallbackMethod = "errMethod"
- )
2), Thread-Pool-Strombegrenzung
- @HystrixCommand(
- commandProperties = {
- @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
- },
- threadPoolKey = "createOrderThreadPool",
- threadPoolProperties = {
- @HystrixProperty(name = "coreSize", value = "20"),
- @HystrixProperty(name = "maxQueueSize", value = "100"),
- @HystrixProperty(name = "maximumSize", value = "30"),
- @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
- },
- fallbackMethod = "errMethod"
- )
Hinweis hier: injava
Wenn 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 erreichtqueueSizeRejectionThreshold
wird die Ablehnungsstrategie übernehmen, alsomaximumSize
fehlgeschlagen.WennqueueSizeRejectionThreshold > maxQueueSize
, die Anzahl der Warteschlangen erreichtmaxQueueSize
Stunde,maximumSize
gü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.
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:
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.
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:
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 > Downgrade).
Zusammenfassung des Linkinhalts:
@FeignClient(name="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)
beziehen auf:
Praktische Implementierung der SpringBoot-Projektarchitektur „Gateway zuul construction“-CSDN-Blog
beziehen auf:
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.
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).
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.
Übung zum Seata TCC-Modus (Teil 2) – Alibaba Cloud Developer CommunityTatsächlicher Kampf im Seata TCC-Modus (Teil 2)https://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.htmlhttps://www.cnblogs.com/lilpig/p/16613226.html
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.
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.
Vorteile des TCC-Modus:
Nachteile des TCC-Modus:
Confirm
UndCancel
Möglicherweise schlägt es auch fehl und Sie müssen sich mit diesem Prozess befassenStarke Konsistenz durch Koordination, wann lokale Transaktionen jedes Teilnehmers festgeschrieben und zurückgesetzt werden.
Vorteile des XA-Modus:
Nachteile des XA-Modus:
schwache Konsistenz