Was ist service discovery, und warum brauchen Sie es?
Soweit ich sagen kann, "service discovery" bedeutet eine Möglichkeit für einen Kunden, um herauszufinden, über einen server (oder cluster von Servern), dass er eine Verbindung herstellen will.
Habe ich gebaut, web-Anwendungen, die Kommunikation mit anderen back-end-Prozesse mithilfe von Protokollen wie HTTP und AMQP. In diesen, jeder client hat eine config-Datei, die enthält einen host-Namen oder was auch immer Informationen, die es braucht, um mit dem server verbinden, welche festgelegt wird, zum Zeitpunkt der Bereitstellung über ein Konfigurations-tool wie Ansible. Das ist einfach und scheint ziemlich gut zu funktionieren.
Ist service discovery eine alternative zu nur setzen, die server-Informationen in einem client-config-Datei? Wenn dem so ist, warum ist es besser? Wenn nicht, welches problem damit gelöst werden?
- Nicht Ihre Nutzung der microservices beantworten Sie diese Frage für Sie?
- Nein, ich verstehe nicht, was service-discovery ist, und wenn es ist, was ich denke, es ist, ich weiß nicht, warum microservices würde es brauchen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beginnen wir, indem wir überprüfen, was service-Entdeckung - hier ist eine gute Erklärung: https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/
(dieser link sollte so ziemlich Klärung der Frage gebeten)
Und hier ist ein Beispiel, wie es in der Praxis verwendet wird:
Angenommen, Sie haben service B was von service A. der Service B (wie die meisten Dienste in SOA) ist eigentlich ein cluster von Anwendungen des Typs B. Ein Service erfordert die Verwendung eines Knoten-cluster B, doch ist die cluster-B Knoten ist dynamische. d.h. B werden Knoten erstellt und beendet, abhängig von der Last auf die Gesamt-B-service. Nun möchten wir Ein service für die Kommunikation mit einem live-B-Knoten jedes mal, wenn Sie es braucht, der service B. um dies zu tun, verwenden wir die service-discovery-tool, um uns, jederzeit, eine Adresse von einer der live-B-Knoten.
So, der Versuch einer Antwort auf deine oben genannten Fragen, indem das Ende-Punkt-server-Informationen (speziell die Endpunkt-Adresse) als statische Konfiguration in config-Datei, die gelesen wird beim Start des service Ein, nicht geben Ihnen die Dynamik Sie möchten, wenn service B Endpunkte können sich ständig ändern.
Die cloud-server-Architektur verändert die Art, wie wir bauen web-Applikationen, dass wir Weg von einem einzigen großen Monolithen zu brechen Sie in kleinere und kleinere, individuell einsetzbaren services genannt microservice bilden zusammen die große Anwendung.
Betrachten wir das Szenario, wenn ein service kommunizieren will, mit anderen service-sagen wir mal-Service-Ein muss für die Kommunikation mit Dienst-B.-Dienst-Ein muss, zu wissen, die IP-Adresse und Port-Nummer des Dienstes-B. Die einfachste Lösung des Problems ist durch die Aufrechterhaltung einer Konfigurationsdatei, die enthält die IP-Adresse und port-zu-Dienst-B-Dienst-A. Es gibt mehrere Nachteile bei diesem Ansatz
Betrachten Sie die folgende situation : -
Dieser einfache Ansatz ist zu statisch und friert die cloud-So kommt die neue Lösung
Alternative Lösung: Service Discovery
Service discovery hilft, um das obige problem zu lösen, indem Sie einen Weg
Damit es hilft, nutzen Sie die volle Leistungsfähigkeit der cloud, um dynamisch zu skalieren und verkleinern auf der Grundlage der Anforderungen und auch die Architektur, die lose miteinander gekoppelt sind
Wenn Sie 2 microservices, sagen wir A und B, und Sie wollen Eine Kommunikation mit B, A wird über ein service-discovery-Methode(tool) zu finden B in einer microservice-Architektur.
Nicht nur-client-zu-server-Kommunikation, sondern auch ein 2 microservices, die vielleicht auf dem gleichen server ausgeführt.
Das problem löst Sie ist 2 microservices läuft auf 2 verschiedene Knoten in einem cluster können einander erkennen, ohne service discovery, wäre dies nicht möglich gewesen.
Können Sie sich, wie kurbernetes unterstützt service-discovery-sagen durch DNS mit coreDNS.
https://kubernetes.io/docs/concepts/services-networking/service/
Muss ich zugeben, dass die Methode, die Sie sagte, ist machbar, aber wenn es so viele Dienste, die Komplexität, die Sie verwalten müssen, zu erhöhen, und die manuelle Konfiguration der Dienste-Liste ist zudem sehr fehleranfällig.
Service discovery ist nicht ein einfacher Weg, um die Liste der Dienste aufgerufen werden, in der client-Konfiguration, aber um die Liste zu speichern von Instanzen aller Dienste selbst.
können Sie einfach verstehen, dass wir eine registration service kann automatisch verwalten die Liste der service-Instanzen zugegriffen werden. Wenn Sie einen Dienst hinzufügen oder den Dienst zu schließen, der registration service wird automatisch aktualisieren Sie Ihre service-Liste. Wenn Sie anrufen, erhalten Sie das neueste service-Liste aus der Registrierung center zu nennen. Um nicht auf die Leistung, können Sie auch den Cache in der Liste Dienst auf dem client
In einer cloud-Umgebung, in docker-images werden dynamisch bereitgestellt auf einem beliebigen Rechner oder IP + Port-Kombination, wird es schwierig für die abhängigen Dienste zu aktualisieren, die zur Laufzeit. Service discovery erstellt wird, durch diesen Zweck nur.
Service discovery ist einer der Dienste, die unter microservices-Architektur, die die Register-Einträge von allen Diensten, die unter den service-Netz. Alle Aktionen sind über die REST-API. Also immer dann, wenn die Dienste ausgeführt, die einzelne Dienste registriert, sich zur service discovery und service discovery services unterhält Herzschlag, um sicherzustellen, dass diese Dienste am Leben. Das dient auch dem Zweck der überwachung der Dienstleistungen. Service discovery hilft auch bei der Verteilung von Anfragen über bereitgestellte services in einer fairen Art und Weise.