Ideen für Software-Architektur (gitlab, docker, js/ts)?
Hallo, .. wahrscheinlich ist das hier die Falsche Stelle um die Frage zu stellen aber ich versuche es trotzdem.
Ich habe mir ein Biotop aus Progammen (hier Serivces) in auf NodeJs geschaffen, von welchen jeder einzelne in seinem eigenen Docker-Container läuft. Damit die Services ihre Arbeit tun können, müssen sie auf Datenbanken, FTP-Server, etc. zugreifen.
Ich habe also hierfür eine Zentrale DB, wo die Konfigurationen (Eigenschaften, Zugangsdaten, etc.) für die einzelnen Ausprägungen der Services gespeichert sind. So ein Service-Container holt sich bei seiner Initialisierung den für seine Zwecke zugewiesene Konfiguration. Wenn nun Service1 irgendwas von Service2 anfragt, muss Service1 dem angefragten Service2 mitteilen, z.b. mit welcher DB Service2 arbeiten soll. Derzeit übergibt Service1 nun seine Konfiguration (wozu dann natürlich die Zugangsdaten gehören) an Service2.
Dies funktioniert soweit ganz gut.. nur macht es mir Bauchweh, wenn die Services die ganze Zeit Zugangsdaten bei jedem Request mitsenden müssen.
Wie könnte ich das besser machen? ich habe nun darüber nachgedacht, nur eine Referenz-ID mitzugeben und dann würde Service2 sich bei jedem Request die Zugangsdaten aus einer DB holen. Würde auch funktionieren mit geringen Performance-Einbußen. Nur finde ich irgendwie, ist das auch nicht das Gelbe vom Ei.
Nun meine Frage: Wie könnte ich das besser machen? Kann mir nur schwerlich vorstellen, dass keiner vor mir vor diesem Problem stand? Hat jemand Ideen?
Sind die Zugangsdaten im Klartext? Oder werden die encrypted übertragen?
Man könnte das sonst verschlüsseln und die informationen zum decrypten aus einer db holen.
hmmmm.. das wäre eine Idee .. darauf bin ich garnicht gekommen.. besten Dank :)
1 Antwort
Klingt nach einem wilden Mischmasch von Diensten, die alle kreuz und quer aufeinander zugreifen, aber die selben Datenbanken nutzen?
Sorry, aber sowas würde ich neu entwickeln :D
Ich kenne dein Vorhaben nicht, aber wenn Du unbedingt viele Dienste brauchst oder willst, dann klingt das für mich sehr nach einer Services-Architektur (z.B. Microservices). Bedenke aber, dass sowas alles andere als einfach ist und eine monolithische Architektur auch besser sein kann.
Entscheidend dabei ist aber, dass diese Services voneinander unabhängig sein, sie reden nicht miteinander und greifen auch nicht auf die selbe Datenbank zu. Stattdessen hat jeder Service eine eigene Datenbank (also auch kein Passwort-Problem) und kommuniziert wird über ein MessageBus, wenn ein Service Daten für einen anderen Service verfügbar machen soll, teil der diese Daten über den MessageBus mit und jeder Service, der sie braucht, legt sie in der eigenen Datenbank ab.
Aber wenn Du unbedingt so weiter machen willst: Sende die Daten verschlüsselt.
Auch dafür wäre ein MessageBus ein Blick wert, die sammeln die Nachrichten und beliebig viele Dienste bedienen sich daraus und verarbeiten sie. Auf diese Weise können viele Requests gesammelt und von beliebig vielen Diensten vearbeitet werden. Und wenn mal besonders viel ist, wird einfach ein weiterer Dienst dazu geschaltet, das ist das schöne an so einem Aufbau: Es läuft out of the box. Im Grunde also eine Art LoadBalancing.
In dem Aufbau würde aber wieder kein Dienst miteinander reden, der MessageBus übernimmt die Kommunikation, sowohl Request als auch Response laufen da durch, dadurch kann jeder Dienst vollständig unabhängig agieren und Du kannst auch mal einen Dienst dazu oder weg nehmen, ohne dass es die Anderen stört.
jain :) also der Dienst1 hat nichts mit Dienst2 zu tun, erledigt halt gänzlich andere aufgaben, der eine ist z.b. ein Server der Requestst aufbereitet und dann an die entsprechend andern anfragt, diese Responses der angefragten Dienste sammelt und zu dann zu einem Response zusammen-packt der dann letztendlich an den anfragenden client weiterleitet.. vereinfacht gesagt.
die dienste habe ich so gedacht, dass die "neutral" sind, sprich auf keine explizite DB schauen, da ich nicht für jede DB einen seperaten Dienst instanzieeren wollte.
Ich schau mir das mit dem MessageBus mal an. Vielen Dank schonmal :)