Multiprocessing mit shared resources

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Hi alle zusammen,

ich habe eine Art Smart Home Projekt. Bisher habe ich den größten Teil async programmiert und nur wenige kritischen Stellen mit Threads versehen. Je nachdem was ausgeführt werden muss komme ich jedoch in Performance Probleme, weil ein Kern leider nicht mehr ausreicht. Das System lässt sich in etwa 6 Teile sinnvoll unterteilen, welche aber teilweise miteinander kommunizieren müssen. Das bedeutet, dass manchmal ein Service eine Art Notification an einen anderen sendet, dass etwas passiert ist und manchmal muss etwas auf einem anderen Microservice berechnet werden und nur das Ergebnis soll zurückgegeben werden. Daher überlege ich aktuell eine Art Microservices zu implementieren, wobei jeder von den 6 Teilen über nen ProcessPool einen eigenen Process bekommt. Wie würdet ihr die Kommunikation unter den Microservices handlen? Wichtig anzumerken ist, dass die einzelnen Microservices auf dem selben Gerät laufen werden und dieses Konzept nicht aus Skalierungsgründen gewählt werden würde.

Vielen Dank für Eure Vorschläge!

LG
Jakob
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde erstmal in Frage stellen, was eine Heimautomation so sehr an die Grenze bringt. Rechnest du da CNNs sowas durch? Wenn nicht, ist das eher ein Bug, und sollte gefixt werden.

Unter der Annahme, dass das alles so seine Richtigkeit hat: microservices sind mit an Sicherheit grenzender Wahrscheinlichkeit die falsche Vorgehensweise. Die bringen einem zwei Dinge: operationelle Unabhängigkeit, und organisatorische Unabhängigkeit. Ersteres hast du selbst schon ausgeschlossen - heir werden keine weiteren Server Instanzen hochgefahren, Hand deployments können und werden auch gleichzeitig stattfinden. Und organisatorisch betrachtet bist du ein ein-Mann-Team. Da muss also auch nichts entkoppelt werden.

Wenn es geht, reicht also das Modul multiprocessing. Eine persistente Queue wie RabbitMQ könnte ggf zum Einsatz kommen, wenn Aufgaben Crash/Neustart-sicher sein müssen. Wäre aber auch eher ungewöhnlich.
Antworten