Microservices mit Spring Boot. Teil 1. Erste Schritte

Dies ist der erste Teil einer Artikelserie zu den Grundlagen von Microservice-Architekturen.

Darin machen Sie sich mit dem Konzept der Mikrodienste vertraut und lernen, wie Sie mit Spring Boot und Spring Cloud Mikrodienste erstellen.

In diesem Handbuch lernen Sie die Grundlagen der Mikroservice-Architekturen kennen. Wir werden uns auch mit der grundlegenden Implementierung von Mikroservices mit Spring Boot befassen.

Wir werden ein Paar von Mikrodiensten erstellen und diese über die Eureka-Nameserver (Eureka Naming Server) und die Ribbon-Nameserver miteinander kommunizieren lassen, um die Belastung auf der Clientseite auszugleichen.

Dieser Artikel ist Teil der Spring Boot Microservices-Reihe:


Du wirst lernen


  • Was ist ein Monolith?
  • Was ist ein Microservice?
  • Was sind die Probleme mit Microservices?
  • Wie erleichtern Spring Boot und Spring Cloud die Entwicklung von Microservices?
  • Wie implementiere ich clientseitigen Lastausgleich mit Ribbon?
  • Wie implementiere ich einen Nameserver (Eureka Naming Server)?
  • Wie verbinde ich Microservices mit einem Nameserver und Ribbon?

Ressourcenübersicht


In diesem Lernprogramm erstellen wir eine Ressource für Schüler, die drei Dienste mit den entsprechenden URIs und HTTP-Methoden bereitstellt:

  • Liste aller Schüler abrufen - @GetMapping ("/ students")
  • Informationen zu einem bestimmten Schüler abrufen - @GetMapping ("/ students / {id}")
  • Schülerinformationen löschen - @DeleteMapping ("/ students / {id}")
  • Neuen Schülereintrag erstellen - @PostMapping ("/ students")
  • Schülerinformationen aktualisieren - @PutMapping ("/ students / {id}")

Microservices im Überblick - das große Ganze


In dieser Artikelserie werden wir zwei Microservices erstellen:

  • Forex Service - kurz FS
  • Währungsumrechnungsservice - kurz CCS

Mach dir keine Sorgen, wenn dir einige Dinge nicht klar sind. Die Idee ist, Ihnen den Überblick zu geben, bevor wir mit der Entwicklung beginnen und Schritt für Schritt Mikrodienste entwickeln.

Forex Service


Forex Service (FS, Forex Service) ist ein Dienstleister. Es bietet Wechselkurse für verschiedene Währungen. Nehmen wir an, dass er mit Forex Exchange kommuniziert und den aktuellen Wert des Wechsels zwischen Währungen bereitstellt. Ein Beispiel für eine Anfrage und eine Antwort ist unten dargestellt:

GET to http://localhost:8000/currency-exchange/from/EUR/to/INR 

 { id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, port: 8000, } 

Die Antwort auf die Anfrage oben ist der Wechselkurs von Euro zu INR. Die Antwort von ConversionMultiple lautet 75.
Wir werden etwas später über das Portfeld sprechen.

Währungsumrechnungsservice


Der Währungsumrechnungsdienst (CCS) kann viele Währungen in eine andere Währung umrechnen. Es verwendet den Forex-Dienst, um die aktuellen Währungsumrechnungswerte abzurufen. CCS ist ein Konsument von Dienstleistungen. Ein Beispiel für eine Anfrage und eine Antwort ist unten dargestellt:

 GET to http://localhost:8100/currency-converter/from/EUR/to/INR/quantity/10000 

 { id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, quantity: 10000, totalCalculatedAmount: 750000, port: 8000, } 

Mit der obigen Anfrage können Sie den Wert von 10.000 Euro in indischen Rupien ermitteln.
TotalCalculatedAmount beträgt 750.000 INR. Das folgende Diagramm zeigt die Beziehung zwischen CCS und FS.



Eureka Naming Server und Ribbon


Je nach Auslastung verfügen wir möglicherweise über mehrere Exemplare des Währungsumrechnungsdienstes und des Forex-Dienstes.



Die Anzahl der Instanzen für jeden Dienst kann sich im Laufe der Zeit ändern. Die folgende Abbildung zeigt ein spezielles Beispiel, in dem 5 Instanzen des Forex-Dienstes erstellt werden.



In der obigen Situation sollte die Last gleichmäßig auf diese 5 Instanzen verteilt werden.



In dieser Artikelserie verwenden wir Ribbon für den Lastenausgleich und den Eureka-Nameserver für die Registrierung aller Microservices.



Was ist eine monolithische Anwendung?


Haben Sie jemals in einem Projekt gearbeitet ...

  • Die alle paar Monate produziert (in Produktion gebracht) wird
  • Welches hat eine breite Palette von Funktionen und Fähigkeiten.
  • In dem ein Team von mehr als 50 Personen arbeitet
  • Wo Debugging-Probleme ein großes Problem sind
  • Wo die Einführung neuer Technologien und neuer Prozesse fast unmöglich ist

Dies sind typische Merkmale von monolithischen Anwendungen.

Monolithische Anwendungen sind normalerweise riesig - über 100.000 Codezeilen. In einigen Fällen sogar mehr als eine Million Codezeilen.

Monolithen zeichnen sich durch Folgendes aus:

  • Große Anwendungsgröße
  • Lange Release-Zyklen
  • Große Teams

Typische Probleme sind:

  • Probleme mit der Skalierbarkeit
  • Übernahme neuer Technologien
  • Neue Prozesse - agil?
  • Schwer zu automatisierende Tests
  • Es ist schwierig, sich an die aktuellen Entwicklungspraktiken anzupassen
  • Es ist schwierig, sich an das schnelle Wachstum eines Projekts anzupassen

Microservices


Microservice-Architekturen wurden entwickelt, um den Herausforderungen der Skalierbarkeit und Innovation mit monolithischen Architekturen zu begegnen. Es gibt eine Reihe von Definitionen für Microservices.
Kleine, eigenständige Dienste, die zusammenarbeiten - Sam Newman
Entwicklung einer separaten Anwendung in Form einer Reihe kleiner Dienste, von denen jeder in einem eigenen Prozess arbeitet und mit einfachen Mechanismen, häufig der HTTP-Ressourcen-API, interagiert. Diese Services basieren auf Geschäftsmöglichkeiten und können mithilfe eines vollautomatisierten Bereitstellungsmechanismus unabhängig voneinander bereitgestellt werden. Es gibt ein Mindestmaß an zentraler Verwaltung dieser Dienste, die in verschiedenen Programmiersprachen geschrieben werden können und unterschiedliche Speichertechnologien verwenden - James Lewis und Martin Fowler

Obwohl es keine einheitliche Definition für Mikrodienstleistungen gibt, gibt es mehrere wichtige Merkmale:

  • REST - basiert auf REST-reichen Ressourcen. Die Kommunikation zwischen Diensten kann auf Ereignissen oder dem HTTP-Protokoll basieren.
  • Kleine, gut ausgewählte Deployable-Blöcke - begrenzter Kontext
  • Cloud-Funktionen - Dynamische Skalierung

Wie sieht die Microservice-Architektur aus?


So wird der Monolith aussehen. Eine App für alles.



Dies sieht bei der Entwicklung mit Microservices Architecture wie die gleiche Anwendung aus.



Microservice-Architekturen enthalten mehrere kleine, gut gestaltete Messaging-Komponenten.



Vorteile von Microservices


Vorteile:

  • Der Einsatz neuer Technologien und Anpassungsprozesse wird einfacher. Mit den neuen Microservices, die wir erstellen, können Sie neue Technologien ausprobieren.
  • Schnellere Release-Zyklen
  • Cloud-Skalierung

Probleme mit der Microservice-Architektur


Die Entwicklung einiger kleiner Komponenten mag zwar einfach erscheinen, mit Mikroservice-Architekturen sind jedoch eine Reihe von Schwierigkeiten verbunden.

Schauen wir uns einige der Probleme an:

  • Schnelle Einrichtung erforderlich : Sie können nicht einen Monat damit verbringen, jeden Microservice einzurichten. Sie sollten in der Lage sein, schnell Microservices zu erstellen.
  • Automatisierung : Da es anstelle des Monolithen eine Reihe kleinerer Komponenten gibt, müssen Sie alles automatisieren - Baugruppen, Bereitstellung, Überwachung usw.
  • Sichtbarkeit : Sie haben jetzt mehrere kleine Komponenten für die Bereitstellung und Wartung. Möglicherweise 100 oder 1000 Komponenten. Sie sollten in der Lage sein, Probleme automatisch zu verfolgen und zu identifizieren. Sie benötigen eine hervorragende Sicht auf alle Komponenten.
  • Begrenzter Kontext : Das Definieren der Grenzen eines Mikrodienstes ist keine leichte Aufgabe. Der eingeschränkte Kontext des Domain-Designs ist ein guter Ausgangspunkt. Ihr Verständnis der Domäne entwickelt sich über einen bestimmten Zeitraum. Sie müssen sicherstellen, dass sich die Grenzen des Mikrodienstes ändern.
  • Konfigurationsmanagement : Sie müssen Konfigurationen für Hunderte von Komponenten in verschiedenen Umgebungen verwalten. Sie benötigen eine Konfigurationsmanagementlösung
  • Dynamische Zunahme und Abnahme : Die Vorteile von Microservices werden nur dann genutzt, wenn sich Ihre Anwendungen problemlos in der Cloud skalieren lassen.
  • Kartenstapel : Wenn der Mikrodienst am Ende der Anrufkette ausfällt, kann er alle anderen Mikrodienste beeinträchtigen. Microservices müssen fehlertolerant sein.
  • Debugging : Wenn ein Problem auftritt, das behoben werden muss, müssen Sie möglicherweise mehrere Dienste in verschiedenen Komponenten untersuchen. Zentralisierte Protokollierung und Dashboards sind erforderlich, um die Fehlerbehebung zu vereinfachen.
  • Konsistenz : Sie können nicht über eine Vielzahl von Tools verfügen, die das gleiche Problem lösen. Es ist wichtig, Innovationen voranzutreiben, aber es ist auch wichtig, dass Sprachen, Plattformen, Technologien und Tools, die zur Implementierung / Bereitstellung / Überwachung von Mikrodiensten verwendet werden, dezentral verwaltet werden.

Microservice-Architekturlösungen


Spring Boot


Mit Spring Boot können Sie schnell vorgefertigte Anwendungen erstellen und bieten die folgenden nicht funktionalen Funktionen:

  • Embedded Server (einfache Bereitstellung mithilfe von Containern)
  • Metriküberwachung
  • Gesundheitsüberwachung
  • externe Konfiguration

Frühlingswolke


Spring Cloud bietet Cloud-Aktivierungslösungen für Ihre Microservices. Es nutzt und baut auf einigen der von Netflix (Netflix OSS) entwickelten Cloud-Lösungen auf.

Wichtige Spring Cloud Module


  • Dynamische Vergrößerung und Verkleinerung. Verwenden Sie eine Kombination aus:

- Eureka-Nameserver
- Ribbon (Lastverteilung auf der Client-Seite)
- Feign (vereinfacht die Entwicklung von REST-Clients)

  • Sichtbarkeit und Überwachung mit:

- Distributed Zipkin Trace
- Netflix API Gateway

  • Konfigurationsverwaltung mit Spring Cloud Config Server
  • Fehlertoleranz bei Hystrix

In dieser Artikelserie werden wir zwei Microservices erstellen:
Hinweis perev. Der Autor wiederholt weiterhin teilweise das Gesagte. Gespeicherte Originalausgabe (ohne Wiederholungen zu löschen)

  • Forex Service - kurz FS
  • Währungsumrechnungsservice - kurz CCS

Das folgende Diagramm zeigt die Beziehung zwischen CCS und FS. Wir werden eine Verbindung zwischen diesen beiden Komponenten herstellen.



Wir möchten in der Lage sein, die Anzahl der Instanzen jedes dieser Dienste dynamisch zu erhöhen und zu verringern.



Die Anzahl der Instanzen für jeden Dienst kann sich im Laufe der Zeit ändern. Die folgende Abbildung zeigt ein spezielles Beispiel, in dem 5 Instanzen des Forex-Dienstes erstellt werden.



Für die Implementierung einer Lösung für die dynamische Vergrößerung und Verkleinerung müssen zwei Fragen beantwortet werden:

  • Wie ermittelt der Currency Conversion Service (CCS), wie viele Forex Service (FS) -Instanzen aktiv sind?
  • Wie verteilt der Currency Conversion Service (CCS) die Last auf aktive Instanzen?

Da dies dynamisch sein soll, können URLs in FS-Diensten nicht in CCS fest codiert werden. Aus diesem Grund führen wir einen Nameserver ein.

Alle Komponenteninstanzen (CCS und FS) sind auf dem Eureka-Nameserver registriert. Wenn FS CCS anrufen muss, fordert es Eureka Naming Server zu aktiven Instanzen an. Wir werden Ribbon verwenden, um die Last auf der Clientseite zwischen verschiedenen FS-Instanzen zu verteilen.

Nachfolgend finden Sie ein übergeordnetes Sequenzdiagramm, das zeigt, was bei einer Anforderung von CCS an FS geschieht.



Weiter in dieser Artikelserie:


  • Erstellen eines Forex-Microservice. Wir werden einen einfachen REST-Service erstellen, der auf dem Spring Boot Starter Web und Spring Boot Started JPA basiert. Wir werden Hibernate verwenden, um JPA zu implementieren und eine Verbindung zur H2-Datenbank herzustellen.
  • Erstellung eines CCS-Währungsumrechnungsdienstes. Wir erstellen einen einfachen REST-Service mit Feign, um den Forex-Microservice aufzurufen.
  • Verwenden Sie die Multifunktionsleiste zum Lastenausgleich.
  • Implementieren Sie den Eureka Naming Service und verbinden Sie FS und CCS über Eureka.

Source: https://habr.com/ru/post/de484130/


All Articles