15 Punkte von whatsup 2024-08-12 | 1 Kommentare | Auf WhatsApp teilen

Lösung stark ansteigender API-Latenz zum Deployment-Zeitpunkt - ein Fallbeispiel mit Django + Gunicorn

  • Das Backend-System bestand aus Django + Gunicorn.
  • Es wurde ein Problem festgestellt, bei dem die API-Latenz bei jedem Deployment sprunghaft anstieg.
  • Bei der Untersuchung der Funktionsweise von Gunicorn zeigte sich, dass es Bereiche mit Cold Start gab.
  • Bei der Analyse des internen Django-Codes wurde festgestellt, dass beim fork im Master-Worker-Prozess trotz aktivierter preload-Option einige Elemente nicht vorab geladen wurden; dadurch konnte das Problem gelöst werden.

Erkenntnisse

  • Web-Frameworks wie Django, die von sehr vielen Nutzern verwendet werden, vermitteln oft den Eindruck, dass die meisten Abläufe sehr zuverlässig sind, weshalb man leicht annimmt, dass sie auch im eigenen Einsatz genauso funktionieren.
    • Beim Blick in den tatsächlichen Code wurde jedoch problematischer Code gefunden, und daraus ließ sich lernen, dass man dem verwendeten Framework nicht blind vertrauen sollte.
  • Der Prozess zur Lösung des API-Latenzproblems war nicht leicht nachzuvollziehen, weil passende Dokumentation fehlte, ein tiefes Verständnis der internen Struktur und Abläufe fehlte und man häufig davor zurückschreckt, tief in die Codebasis eines Open-Source-Projekts einzutauchen.
    • Hinzu kam, dass mehrere komplexe Probleme miteinander verflochten waren, was die Analyse zusätzlich erschwerte.
    • Letztlich konnte das Problem durch die Untersuchung des internen Django-Codes gelöst werden.
    • Dabei zeigte sich nicht nur ein besseres Verständnis der verwendeten Django-Werkzeuge, sondern auch, dass ein Blick in den internen Code helfen kann, Lösungen für einige schwierige Probleme zu finden.
  • Es ist wichtig, die eigentliche Grundursache eines Problems zu identifizieren.
    • Man hätte die Häufigkeit von API-Latenz erhöhen können, indem man die Erfolgskriterien des Health Checks auf mehr Wiederholungen oder längere Zeiträume anpasst, aber das hätte das grundlegende Problem nicht gelöst.
  • Mit kollektiver Intelligenz lassen sich die entscheidenden Ansatzpunkte und verschiedenes Wissen etwas schneller gewinnen.
    • Das Problem rund um die API-Latenz wurde schnell im Team geteilt, und verschiedene Engineers brachten Vermutungen zu möglichen Ursachen ein.
    • Solche Einschätzungen konnten schnell gesammelt werden, wodurch sich zügig Wissen darüber aufbauen ließ, worauf man den Fokus richten sollte.
  • Es ist wichtig, eine Umgebung einzurichten, in der sich das Problem zur Lösung reproduzieren lässt.
    • Es gelang, dasselbe Problem lokal zu reproduzieren, und dadurch konnte überprüft werden, ob die Lösung tatsächlich funktionierte.
    • Dabei wurde deutlich, wie wichtig die Reproduktion von Symptomen für die Problemlösung ist.

1 Kommentare

 
aer0700 2024-08-12

Als ich dem Link gefolgt bin, habe ich festgestellt, dass der Inhalt des Beitrags wirklich sehr gut ist.