Heim >Java >JavaInterview Fragen >Interview-Feedback zur 25-Schuss-Serie von Spring Cloud
Aus besonderen Gründen wurden unsere Interviews vor einiger Zeit reihenweise unterbrochen. Es kam vor, dass ein alter Mann letzte Woche zum Interview ging und nach Spring Cloud gefragt wurde, und dann In Kombination mit seinem Feedback setzen wir heute die SpringCloud-Interviewreihe fort.
Willkommen alle, die mir folgen:
Das Folgende ist ein Spring Cloud-Kernkomponentenbeziehungsdiagramm:
aus diesem Bild können wir tatsächlich viele Informationen entnehmen, und ich hoffe, Sie können es aufmerksam genießen.
Das Folgende ist eine Zusammenfassung der Spring Cloud Netflix
和Spring Cloud Alibaba
Kernkomponenten:
Beginnen wir ohne weitere Umschweife direkt mit der Spring Cloud-Reihe.
Spring Cloud Streaming Application Starter ist eine integrierte Spring-Anwendung auf Basis von Spring Boot, die die Integration mit externen Systemen ermöglicht. Spring Cloud Task, ein kurzlebiges Microservices-Framework zum schnellen Erstellen von Anwendungen, die eine begrenzte Datenverarbeitung durchführen.
Microservice-Architektur ist ein Architekturmuster oder ein Architekturstil. Sie befürwortet die Aufteilung einer einzelnen Anwendung in eine Reihe kleiner Dienste, die sich gegenseitig koordinieren und kooperieren Wert. Dienste verwenden einfache Kommunikationsmechanismen, um miteinander zu kommunizieren (normalerweise RESTful API basierend auf HTTP). Jeder Dienst basiert auf einem bestimmten Unternehmen und kann unabhängig in einer Produktionsumgebung, einer produktionsähnlichen Umgebung usw. erstellt werden. Darüber hinaus sollte ein einheitlicher und zentraler Service-Management-Mechanismus vermieden werden. Für die Koordinierung dieser Services sollten geeignete Sprachen und Tools entsprechend dem Geschäftskontext ausgewählt werden Zum Schreiben der Dienste können verschiedene Sprachen verwendet und unterschiedliche Datenspeicher verwendet werden.
Laienhaft ausgedrückt:
Ein Microservice ist eine unabhängige Serviceanwendung mit einer einzigen Verantwortung. Im Intellij-Ideentool gibt es unabhängige Module, die mit Maven entwickelt wurden. Insbesondere handelt es sich um ein kleines Modul, das mit Springboot entwickelt wurde, um eine einzelne professionelle Geschäftslogik zu verwalten.
Microservices betonen die Größe des Dienstes und konzentrieren sich auf einen bestimmten Punkt, insbesondere auf die Lösung eines bestimmten Problems/die Implementierung einer entsprechenden Dienstanwendung, die als Modul in der Idee betrachtet werden kann.
Bei der Verwendung von Spring Boot zur Entwicklung verteilter Microservices stehen wir vor den folgenden Problemen
Synchronisierte Kommunikation: Dobbo verwendet RPC-Remoteprozeduraufrufe, Springcloud verwendet REST-Schnittstellen-JSON-Aufrufe usw.
Asynchron: Nachrichtenwarteschlange, wie zum Beispiel: RabbitMq
、ActiveM
、Kafka
und andere Nachrichtenwarteschlangen.
Der Schutzschaltermechanismus ist ein Microservice-Link-Schutzmechanismus zur Bewältigung des Lawineneffekts. Wenn ein bestimmter Mikrodienst nicht verfügbar ist oder die Antwortzeit zu lang ist, wird der Dienst beeinträchtigt, wodurch der Aufruf des Mikrodienstes auf dem Knoten unterbrochen wird und schnell „Fehler“-Antwortinformationen zurückgegeben werden. Wenn festgestellt wird, dass die Microservice-Anrufantwort des Knotens normal ist, wird die Anrufverbindung wiederhergestellt. Im Spring Cloud-Framework wird der Circuit-Breaker-Mechanismus über Hystrix implementiert. Wenn fehlgeschlagene Anrufe einen bestimmten Schwellenwert erreichen, ist der Circuit-Breaker-Mechanismus standardmäßig 20 wird aktiviert.
Service-Downgrade wird grundsätzlich von der Gesamtlast berücksichtigt. Das heißt, wenn ein Dienst getrennt wird, wird der Server nicht mehr aufgerufen. Zu diesem Zeitpunkt kann der Client einen lokalen Fallback-Rückruf vorbereiten und einen Standardwert zurückgeben. Auf diese Weise ist das Level zwar reduziert, aber immer noch verwendbar, was besser ist, als direkt zu sterben.
Hystrix
相关注解@EnableHystrix
:开启熔断 @HystrixCommand(fallbackMethod=”XXX”)
,声明一个失败回滚处理函数XXX
,当被注解的方法执行超时(默认是1000毫秒),就会执行fallback
Funktion, gibt eine Fehlermeldung zurück.
Zookeeper garantiert CP und Eureka garantiert AP.
A: Hohe Verfügbarkeit
C: Konsistenz
P: Partitionsfehlertoleranz
1. Wenn wir das Registrierungscenter nach einer Serviceliste abfragen, können wir tolerieren, dass das Registrierungscenter Informationen von vor ein paar Minuten zurückgibt, aber wir Kann nicht direkt heruntergefahren werden und ist nicht verfügbar. Mit anderen Worten, die Dienstregistrierungsfunktion stellt relativ hohe Anforderungen an die Hochverfügbarkeit, aber es kommt zu einer Situation, in der der Masterknoten aufgrund eines Netzwerkausfalls den Kontakt zu anderen Knoten verliert und die verbleibenden Knoten den Anführer erneut wählen. Das Problem besteht darin, dass die Leader-Auswahlzeit zu lang ist (30 bis 120 Sekunden) und der ZK-Cluster während des Auswahlzeitraums nicht verfügbar ist, was dazu führt, dass der Registrierungsdienst während des Auswahlzeitraums lahmgelegt wird. In einer Cloud-Bereitstellungsumgebung besteht eine hohe Wahrscheinlichkeit, dass der ZK-Cluster aufgrund von Netzwerkproblemen den Masterknoten verliert. Der Dienst kann zwar wiederhergestellt werden, die durch die lange Auswahlzeit verursachte langfristige Nichtverfügbarkeit der Registrierung ist jedoch nicht tolerierbar.
2. Eureka garantiert die gleiche Verfügbarkeit. Der Ausfall mehrerer Knoten hat keinen Einfluss auf die Arbeit der normalen Knoten. Wenn ein Verbindungsfehler auftritt, wenn der Eureka-Client einen bestimmten Eureka registriert oder entdeckt, wechselt er automatisch zu anderen Knoten. Solange noch ein Eureka verfügbar ist, kann garantiert werden, dass der Registrierungsdienst verfügbar ist, die gefundenen Informationen jedoch möglicherweise nicht das Neueste. Darüber hinaus verfügt Eureka auch über einen Selbstschutzmechanismus. Wenn mehr als 85 % der Knoten innerhalb von 15 Minuten keinen normalen Herzschlag haben, geht Eureka davon aus, dass zu diesem Zeitpunkt ein Netzwerkfehler aufgetreten ist , werden die folgenden Situationen auftreten:
①. Dienste, die ablaufen sollten, weil sie seit längerem keine Heartbeats erhalten haben, werden nicht mehr aus der Registrierungsliste entfernt.
②. Eureka kann weiterhin Registrierungs- und Abfrageanfragen für neue Dienste annehmen, wird jedoch nicht mit anderen Knoten synchronisiert (d. h. es wird sichergestellt, dass der aktuelle Knoten weiterhin verfügbar ist)
③ Wenn das Netzwerk stabil ist, werden die neuen Registrierungsinformationen der aktuellen Instanz mit anderen Knoten synchronisiert.
Deshalb kann Eureka die Situation gut bewältigen, in der einige Knoten aufgrund eines Netzwerkausfalls den Kontakt verlieren, und legt nicht den gesamten Mikrodienst wie Zookeeper lahm.
SpringBoot konzentriert sich auf die schnelle und einfache Entwicklung individueller Microservices.
SpringCloud ist ein Microservice-Koordinations- und Governance-Framework, das sich auf die Gesamtsituation konzentriert. Es integriert und verwaltet einzelne von SpringBoot entwickelte Microservices, Serviceerkennung, Leistungsschalter und Routing. Ereignisbus, globale Sperre, Entscheidungswahl, verteilte Sitzung und andere integrierte Dienste
SpringBoot kann unabhängig ohne SpringCloud für Entwicklungsprojekte verwendet werden, aber SpringCloud kann nicht von SpringBoot getrennt werden und ist eine Abhängigkeitsbeziehung.
SpringBoot konzentriert sich auf Schnelligkeit Praktisch für die Entwicklung einzelner Microservices, und SpringCloud konzentriert sich auf das globale Service-Governance-Framework.
Normalerweise sind bei Systemen, die mithilfe einer Microservice-Architektur entwickelt werden, viele Microservices beteiligt. Diese Microservices arbeiten miteinander zusammen.
Denken Sie über den folgenden Microservice nach:
Mit zunehmender Anzahl an Microservices wird dieses Problem komplexer. Die Anzahl der Microservices kann bis zu 1000 betragen. Hier kommt Hystrix ins Spiel. In diesem Fall verwenden wir die Fallback-Methodenfunktion von Hystrix. Wir haben zwei Dienste: Mitarbeiter-Verbraucher, die Dienste nutzen, die vom Mitarbeiter-Verbraucher bereitgestellt werden.
Das vereinfachte Diagramm ist unten dargestellt
Angenommen, der von „employee-producer“ bereitgestellte Dienst löst aus irgendeinem Grund eine Ausnahme aus. In diesem Fall haben wir eine Fallback-Methode mit Hystrix definiert. Diese Fallback-Methode sollte denselben Rückgabetyp wie der öffentliche Dienst haben. Wenn im bereitgestellten Dienst eine Ausnahme auftritt, gibt die Fallback-Methode einen Wert zurück.
Aus bestimmten Gründen löst der öffentliche Dienst Arbeitnehmer-Verbraucher eine Ausnahme aus. Mit Hystrix definieren wir in diesem Fall eine Fallback-Methode. Wenn im bereitgestellten Dienst eine Ausnahme auftritt, gibt die Fallback-Methode einen Standardwert zurück.
Wenn die Ausnahme in der Methode firstPage() weiterhin auftritt, wird die Hystrix-Schaltung unterbrochen und der Mitarbeiter-Consumer überspringt die Methode firtsPage insgesamt und ruft die Fallback-Methode direkt auf. Der Zweck des Leistungsschalters besteht darin, der Methode der ersten Seite oder anderen Methoden, die die Methode der ersten Seite möglicherweise aufruft, Zeit zu geben und eine Ausnahmewiederherstellung zu veranlassen. Möglicherweise besteht bei geringerer Auslastung eine bessere Chance auf eine Wiederherstellung des Problems, das die Ausnahme verursacht hat.
Zunächst gibt es ein Modul, das die Netzwerkverbindungskommunikation verwaltet und für den Verbindungsaufbau, die Verwaltung und die Nachrichtenübertragung verantwortlich ist Übertragung. Zweitens ist ein Codierungs- und Decodierungsmodul erforderlich, da es sich bei der Netzwerkkommunikation ausschließlich um übertragene Bytecodes handelt und die von uns verwendeten Objekte serialisiert und deserialisiert werden müssen. Der Rest besteht aus den Client- und Serverteilen. Der Server stellt die zu öffnende Dienstschnittstelle bereit. Diese Proxy-Implementierung ist für das Sammeln von Daten, die Codierung und die Übertragung an den Server verantwortlich die Ergebnisse, die zurückgegeben werden sollen.
Wenn der Eureka-Server-Knoten in kurzer Zeit Verbindungen zu zu vielen Instanzen verliert (z. B. durch Netzwerkausfall oder häufiges Starten und Herunterfahren von Clients) Der Knoten wechselt in den Selbstschutzmodus, schützt die Registrierungsinformationen, löscht keine Registrierungsdaten mehr und verlässt den Selbstschutzmodus automatisch, wenn eine Fehlerbehebung erfolgt.
ribbon ist ein Lastausgleichs-Client, der einige Verhaltensweisen von http und tcp gut steuern kann. feign默认集成了ribbon
。
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序。
Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其稳定性。
特点:
使用方式
@EnableFeignClients
@FeignClient(name=“xxx”)
@EnableFeignClients
🎜🎜@FeignClient(name="xxx")
Geben Sie an, welcher Dienst aufgerufen werden soll 🎜🎜🎜🎜🎜🎜15. Was ist der Unterschied zwischen Ribbon und Feign? 🎜🎜🎜🎜1. Ribbon ruft andere Dienste auf, jedoch auf unterschiedliche Weise. 2. Die Annotationen der Startklasse sind unterschiedlich. Ribbon ist @RibbonClient und feign ist @EnableFeignClients.
3. Der angegebene Speicherort des Dienstes ist unterschiedlich. Ribbon wird in der Annotation @RibbonClient deklariert, während Feign mithilfe von @FeignClient in der Schnittstelle deklariert wird, die die abstrakte Methode definiert. 4. Die aufrufenden Methoden sind unterschiedlich. Ribbon muss die http-Anfrage selbst erstellen und die http-Anfrage simulieren. 🎜SpringBoot konzentriert sich auf die schnelle und bequeme Entwicklung von ein einzelner einzelner Microservice
: Einfach und allgemein, da kein Middleware-Proxy vorhanden ist, ist das System einfacher
Nachteile: Es unterstützt nur den Anforderungs-/Antwortmodus und unterstützt keine anderen, wie Benachrichtigung, Anforderung/asynchrone Antwort, Publish/Subscribe, Publish/asynchrone Antworten reduzieren die Verfügbarkeit, da sowohl der Client als auch der Server während der Anfrage verfügbar sein müssen.
Verwenden Sie asynchrone Nachrichten für die Kommunikation zwischen Diensten. Dienste kommunizieren durch den Austausch von Nachrichten über Nachrichtenpipes.
Vorteile: Entkoppeln Sie Client und Server, lockern Sie die Kopplung und verbessern Sie die Benutzerfreundlichkeit, da die Nachrichten-Middleware die Nachricht zwischenspeichert, bis der Verbraucher sie konsumieren kann, und viele Kommunikationsmechanismen wie Benachrichtigungen, Anfragen/asynchrone Antworten, Freigaben/Abonnements unterstützt , veröffentlichen/asynchrone Antwort.
Nachteile: Nachrichten-Middleware weist zusätzliche Komplexität auf.
Geben Sie bei der Veröffentlichung des Dienstes den entsprechenden Dienstnamen an und registrieren Sie den Dienst im Registrierungscenter (Eureka, Zookeeper)
. Eureka 、Zookeeper)
。
注册中心加@EnableEurekaServer
,服务用@EnableDiscoveryClient
@EnableDiscoveryClient
, dann verwenden Sie Ribbon oder Feign Führen Sie eine direkte Serviceanruferkennung durch. Diese Frage ist praktischer. Es hängt davon ab, ob Sie die Interviewfragen auswendig gelernt haben. Wer sie nicht geübt hat, wird es nicht wissen. Wenn der Eureka-Server-Knoten in kurzer Zeit die Verbindung zu zu vielen Instanzen verliert (z. B. aufgrund eines Netzwerkausfalls oder häufiges Starten und Herunterfahren von Clients), wechselt der Knoten in den Selbstschutzmodus, um die Registrierungsinformationen zu schützen und nicht mehr zu löschen Registrierungsdaten und die Wiederherstellung nach Fehlern beendet automatisch den Selbstschutzmodus.
Spring Cloud Bus verbindet verteilte Knoten mit einem einfachen Nachrichtenbroker. Es kann auch für die Übertragung von Konfigurationsdateiänderungen verwendet werden Überwachung. Wenn die Konfigurationsdatei geändert wird und eine Anfrage gesendet wird, lesen alle Clients die Konfigurationsdatei erneut.
Wenn ein Dienst aus Netzwerkgründen oder aus eigenen Gründen ein Problem aufweist, wartet der Anrufer auf die Antwort des Angerufenen Mehr Dienste Das Anfordern dieser Ressourcen führt dazu, dass mehr Anforderungen warten, was zu einem Ketteneffekt (Lawineneffekt) führt. Wenn innerhalb eines Zeitraums eine bestimmte Anzahl von Malen kein Aufruf möglich ist und auch nach mehrfacher Überwachung keine Anzeichen einer Wiederherstellung vorliegen, ist der Leistungsschalter vollständig geöffnet und der Dienst wird beim nächsten Mal nicht angefordert.
Halb offen: Es gibt Anzeichen einer Wiederherstellung in kurzer Zeit. Der Leistungsschalter sendet einige Anfragen an den Service. Bei einem normalen Anruf ist der Leistungsschalter geschlossen. Geschlossen: Wenn sich der Dienst immer in einem normalen Zustand befindet und normal aufgerufen werden kann.
In einem verteilten System ist aufgrund der großen Anzahl von Diensten ein verteiltes Konfigurationszentrum erforderlich, um eine einheitliche Verwaltung und Aktualisierung der Dienstkonfigurationsdateien in Echtzeit zu ermöglichen Komponente benötigt wird. In Spring Cloud gibt es eine verteilte Konfigurationscenter-KomponenteSpring Cloud Config
,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。
在Spring Cloud Config
Anwendung: 🎜
ADD POM -Abhängigkeit
Add Relevante Konfiguration zur Konfigurationsdatei Cloud Gateway ist das von Spring Cloud offiziell eingeführte Gateway-Framework der zweiten Generation und ersetzt das Zuul-Gateway. Als Verkehrscontroller spielen Gateways eine sehr wichtige Rolle in Microservice-Systemen. Zu den allgemeinen Funktionen von Gateways gehören Routing und Weiterleitung, Berechtigungsüberprüfung und Strombegrenzungskontrolle. Eine RouteLocatorBuilder-Bean wird zum Erstellen von Routen verwendet. RouteLocatorBuilder ermöglicht Ihnen, verschiedene Prädikate und Filter hinzuzufügen. Wie der Name schon sagt, besteht die Bedeutung von Prädikaten-Assertionen darin, von bestimmten Routen gemäß bestimmten Anforderungsregeln verarbeitet zu werden Filter sind jeweils ein Filter, der verwendet wird, um verschiedene Beurteilungen und Änderungen an Anfragen vorzunehmen. Referenz; http://1pgqu.cn/M0NZo
Spring Cloud ist derzeit sehr beliebt und gehört fast zu den notwendigen Fähigkeiten für Java-Entwickler. Es ist normal, dass diese Frage während des Vorstellungsgesprächs gestellt wird. Viele Menschen haben sie vielleicht schon lange verwendet, sind aber im Vorstellungsgespräch durchgefallen, ohne die Prinzipien zu verstehen. Das Auswendiglernen von Testfragen ist im Großen und Ganzen immer noch sehr nützlich. Langfristig gesehen hoffe ich jedoch, dass jeder auf einer tieferen Ebene lernt und übt. Erst wenn man es wirklich beherrscht, kann man es NB nennen.
Das obige ist der detaillierte Inhalt vonInterview-Feedback zur 25-Schuss-Serie von Spring Cloud. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!