NJay
Rear Admiral
- Registriert
- Aug. 2013
- Beiträge
- 5.941
Hallo,
ich habe aktuell ein recht kompliziertes Problem vor mir und aktuell keine Lösung. Arbeite an der Uni und da ist man als Junior oft faktisch der Senior, kann also niemanden Fragen, der mehr Ahnung hat als ich.
Wir haben hier mehrere Anwendungen, die wir selbst entwickeln. Diese Anwendungen sind in mehreren Git Repos verteilt (in einer GitLab-Instanz). Teilweise konnten stark voneinander abhängige Komponenten in Monorepos zusammen legen, doch alles in ein Repo ist (aktuell) leider nicht möglich, da gewisse Projektpartner manche Komponenten aktuell noch "geheim" halten wollen, wir den rest aber Open-Source haben möchten.
Um das ganze zu betreiben startet man nun also Komponente A, B, C und Komponente D. Komponente D kann nun aber 2 bis N mal gestartet werden, in beliebigen Topologien. Es handelt sich hier um ein Netzwerk aus Komponente D. Für jede Verbindung von zwei Komponenten D benötigt man nun je mindestens zweimal Komponente E. Es werden also ziemlich viele parallel laufende Komponenten. Zum laufen lassen in eienr lokalen Umgebung dank docker absolut kein Problem.
Jetzt haben wir natürlich hin und wieder mal Bugs drinnen. Bisher wurde vor allem mit log-debugging gearbeitet, aber das stößt natürlich langsam an seine Grenzen.
Doch wie baut man jetzt ein gutes debug-setup? Im klassischen Monorepo und einer kleinen Webanwendung ist das kein Problem. Alles im selben Repo, jeder Code wird genau einmal parallel aufgerufen.
Ich habe schon etwas gebastelt und es würde erstmal reichen, die skalierbare Komponente D genau zweimal zu haben. Außerdem kann man andere Komponenten einfach ohne debugger in Docker laufen lassen, da sie sehr stabil sind und nahezu nie für Probleme sorgen. Aber es gibt eben mindestens zwei Komponenten, die im debugger laufen sollten.
Weiteres Problem: Das Setup sollte Robust und einfach bedienbar sein. Ich hatte (als das setup noch kleiner war) schon zweimal Debug-Setups gebaut, aber durch Configdrift und schnelle Entwicklung war es so schnell veraltet, da das Setup zu selten genutzt wurde. Außerdem sollte es nicht zu kompliziert sein, wenn man erst 5 Seiten Doku durchlesen muss will es wieder keiner nutzen (außer er muss) und es passiert das selbe.
Meine bisher beste Idee wäre es, Tracing z.B. mit OpenTelemitry einzubauen um unsere soliden Logausgaben zu Bundeln und immerhin den Flow in den Anwendungen nachvollziehbar zu machen. Ist kein debugger, aber besser als nichts, skaliert und wäre auch für deployments (die wir aktuell noch nicht haben) auch gut.
Hat jemand Ideen? Es geht mir nicht um ganz genaue Tips, aber Schlagwörter zum recherchieren oder Links zu guten Blogartikeln wären gut.
Tech-Stack und Setup zusammengefasst:
Vielen Dank!
ich habe aktuell ein recht kompliziertes Problem vor mir und aktuell keine Lösung. Arbeite an der Uni und da ist man als Junior oft faktisch der Senior, kann also niemanden Fragen, der mehr Ahnung hat als ich.
Wir haben hier mehrere Anwendungen, die wir selbst entwickeln. Diese Anwendungen sind in mehreren Git Repos verteilt (in einer GitLab-Instanz). Teilweise konnten stark voneinander abhängige Komponenten in Monorepos zusammen legen, doch alles in ein Repo ist (aktuell) leider nicht möglich, da gewisse Projektpartner manche Komponenten aktuell noch "geheim" halten wollen, wir den rest aber Open-Source haben möchten.
Um das ganze zu betreiben startet man nun also Komponente A, B, C und Komponente D. Komponente D kann nun aber 2 bis N mal gestartet werden, in beliebigen Topologien. Es handelt sich hier um ein Netzwerk aus Komponente D. Für jede Verbindung von zwei Komponenten D benötigt man nun je mindestens zweimal Komponente E. Es werden also ziemlich viele parallel laufende Komponenten. Zum laufen lassen in eienr lokalen Umgebung dank docker absolut kein Problem.
Jetzt haben wir natürlich hin und wieder mal Bugs drinnen. Bisher wurde vor allem mit log-debugging gearbeitet, aber das stößt natürlich langsam an seine Grenzen.
Doch wie baut man jetzt ein gutes debug-setup? Im klassischen Monorepo und einer kleinen Webanwendung ist das kein Problem. Alles im selben Repo, jeder Code wird genau einmal parallel aufgerufen.
Ich habe schon etwas gebastelt und es würde erstmal reichen, die skalierbare Komponente D genau zweimal zu haben. Außerdem kann man andere Komponenten einfach ohne debugger in Docker laufen lassen, da sie sehr stabil sind und nahezu nie für Probleme sorgen. Aber es gibt eben mindestens zwei Komponenten, die im debugger laufen sollten.
Weiteres Problem: Das Setup sollte Robust und einfach bedienbar sein. Ich hatte (als das setup noch kleiner war) schon zweimal Debug-Setups gebaut, aber durch Configdrift und schnelle Entwicklung war es so schnell veraltet, da das Setup zu selten genutzt wurde. Außerdem sollte es nicht zu kompliziert sein, wenn man erst 5 Seiten Doku durchlesen muss will es wieder keiner nutzen (außer er muss) und es passiert das selbe.
Meine bisher beste Idee wäre es, Tracing z.B. mit OpenTelemitry einzubauen um unsere soliden Logausgaben zu Bundeln und immerhin den Flow in den Anwendungen nachvollziehbar zu machen. Ist kein debugger, aber besser als nichts, skaliert und wäre auch für deployments (die wir aktuell noch nicht haben) auch gut.
Hat jemand Ideen? Es geht mir nicht um ganz genaue Tips, aber Schlagwörter zum recherchieren oder Links zu guten Blogartikeln wären gut.
Tech-Stack und Setup zusammengefasst:
- Golang
- gRPC
- Viele docker-container
- Mehrere parallele Repos
Vielen Dank!