Erstelle einen einfachen Discovery Service auf Basis von Sockets. Die Programmvorlage basiert auf dem Code von https://realpython.com/python-sockets/.
Der Discovery-Service ist ein Python-Skript, welches die Services in unserem verteilten System verwaltet. Die Kommunikation mit diesem Service erfolgt über Sockets.
Das Python-Skript verwaltet die Services in der Klasse Services
.
Diese Klasse enthält eine Liste von Dictionaries.
Für jeden Service wird ein Eintrag in der Liste erstellt.
Key | Value | Datentyp |
---|---|---|
uuid | UUID des Services | String |
type | Die Art des Services | String |
ip | Unter welcher IP-Adresse ist der Service erreichbar | String |
port | Unter welchem Port ist der Service erreichbar | int |
heartbeat | Zeitpunkt des letzten Herzschlags | datetime |
Jeder Service muss sich beim Starten beim Discovery Service registrieren.
Der Discovery-Service erzeugt eine neue UUID für diesen Service und trägt den Service in seine Serviceliste ein.
Als heartbeat
wird der aktuelle Zeitstempel eingetragen.
type
: Die Art des Serviceip
: Unter welcher IP-Adresse ist der Service erreichbarport
: Unter welchem Port ist der Service erreichbarERROR
: Der Service konnte nicht registriert werden.
Jeder Service muss sich in regelmässigen Abständen (z.B. 5 Sekunden) beim Discovery Service melden.
Mit dieser Aktion wird das Attribut heartbeat
der bestehenden Registration aktualisiert.
OK
: Aktualisierung war erfolgreichNOT FOUND
: Die service_uuid
wurde nicht gefunden, der Service muss sich neu registrieren.ERROR
: Es ist ein Fehler aufgetreten.
Ein Client kann eine Liste aller Services für einen bestimmte Art von Service (type
) anfordern.
Der Discovery-Service durchsucht seine Serviceliste nach Services mit dem gewünschten type
.
Entspricht ein Service der gewünschten Art UND der letzte Herzschlag ist weniger als 5 Sekunden alt, so wird dieser Service in die Response aufgenommen.
Jeder Service dessen letzter Herzschlag älter als 5 Sekunden ist, wird aus der Serviceliste entfernt.
type
: Die Art der gesuchten ServicesUm den Discovery-Service zu testen, steht dir im Repository ein einfacher Socket-Client.
py socket_client.py <IP> <PORT>
.