Zum Inhalt

ERPNext Performance-Optimierung

  • 3 min read

Notizen aus unserem Arbeitsalltag…

Gunicorn-Konfiguration für Skalierbarkeit

ERPNext ist eine umfassende Open-Source-ERP-Lösung, basierend auf dem Python-basierten Frappe Framework. Für eine optimale Performance unter Last ist die effiziente Verarbeitung von Webanfragen entscheidend. Gunicorn (Green Unicorn) dient hier als zentraler WSGI-HTTP-Server, um die Skalierbarkeit zu gewährleisten.

Herausforderung der Konkurrenzfähigkeit in Python-Webanwendungen

Python-Webanwendungen, die über das Web Server Gateway Interface (WSGI) bereitgestellt werden, können bei steigender Anzahl gleichzeitiger Anfragen oder rechenintensiven Prozessen an Performance-Grenzen stossen. Dies liegt unter anderem an der sequenziellen Natur der Standard-Request-Verarbeitung und dem Global Interpreter Lock (GIL), das die echte Parallelität von CPU-gebundenen Threads in Python begrenzt.

Gunicorn adressiert diese Limitationen, indem es als effizienter Vermittler zwischen dem Webserver (z.B. Nginx) und der ERPNext-Anwendung agiert. Gunicorn startet mehrere Worker-Prozesse, die parallel Anfragen entgegennehmen und verarbeiten können. Dies erhöht die Konkurrenzfähigkeit und Reaktionsfähigkeit der Anwendung erheblich.

Kernparameter der Gunicorn-Optimierung für ERPNext

Die Performance von Gunicorn hängt massgeblich von der korrekten Konfiguration ab. Folgende Parameter sind zentral:

  1. workers (Anzahl der Worker-Prozesse):
    • Dieser Parameter definiert die Anzahl der gleichzeitig aktiven Worker. Ein gängiger Startwert ist (2 * CPU-Kerne) + 1.
    • Die optimale Anzahl variiert je nach Server-Hardware (CPU-Kerne, verfügbarer RAM) und dem Workload-Profil (CPU- vs. I/O-intensive Operationen). Eine präzise Abstimmung erfordert Monitoring der Systemauslastung.
  2. timeout (Worker-Timeout):
    • Definiert die maximale Bearbeitungszeit (in Sekunden) für eine Anfrage. Überschreitet ein Worker diese Zeit, wird er beendet und neu gestartet.
    • Für langlaufende ERPNext-Operationen (z.B. komplexe Berichte, Datenimporte) kann der Standard-Timeout zu kurz sein. Eine Erhöhung auf 60, 120 oder 300 Sekunden kann notwendig sein.
  3. max_requests (Maximale Anfragen pro Worker):
    • Gibt an, wie viele Anfragen ein Worker verarbeitet, bevor er automatisch neu startet.
    • Dieser Mechanismus dient der Vorbeugung von potenziellen Speicherlecks, die sich über längere Betriebszeiten in Python-Anwendungen ansammeln können. Ein Wert zwischen 1000 und 2000 ist oft ein guter Ausgangspunkt.
  4. bind (Listen-Adresse):
    • Legt die IP-Adresse und den Port fest, auf dem Gunicorn auf Anfragen lauscht (z.B. 0.0.0.0:8000). Dieser Port wird dann vom Reverse-Proxy angesprochen.

Integration und Ökosystem

ERPNext verwendet das bench CLI-Tool für die Produktionskonfiguration. Befehle wie bench setup production initialisieren und konfigurieren Gunicorn-Parameter, die in den Site-Konfigurationsdateien verwaltet werden.

Gunicorn agiert im Rahmen eines umfassenderen Anwendungsstacks:

  • Nginx: Fungiert als Reverse-Proxy, liefert statische Dateien aus, handhabt SSL-Terminierung und leitet dynamische Anfragen an Gunicorn weiter.
  • Redis: Wird für das Caching und die Verwaltung von Hintergrundaufgaben (Job-Queues) im ERPNext-System eingesetzt.
  • Datenbank: MariaDB oder PostgreSQL bilden das persistente Daten-Backend. Datenbankseitige Optimierungen sind ebenfalls essenziell.
  • Containerisierung (Docker): In containerisierten Umgebungen ist die korrekte Ressourcenzuweisung (CPU, RAM) für jeden Dienst entscheidend.

Best Practices für die Performance-Abstimmung

Die Performance-Optimierung ist ein iterativer Prozess:

  • Monitoring: Kontinuierliche Überwachung der Systemressourcen (CPU, RAM, I/O) sowie der Gunicorn- und ERPNext-Logs zur Identifizierung von Engpässen.
  • Benchmarking: Durchführung von Lasttests, um die Auswirkungen von Konfigurationsänderungen objektiv zu bewerten.
  • Iteratives Tuning: Beginnen Sie mit Referenzwerten und passen Sie die Gunicorn-Parameter schrittweise an die spezifischen Anforderungen Ihrer ERPNext-Umgebung an.

Fazit

Die präzise Konfiguration von Gunicorn ist fundamental für die Skalierbarkeit und Stabilität von ERPNext-Installationen. Eine fundierte Abstimmung der Worker-Parameter und Timeouts ermöglicht eine effiziente Nutzung der Serverressourcen und gewährleistet reaktionsschnelle Geschäftsprozesse unter Last.

Interessiert in ERPNext?

Für eine Beratung zu ERPNext oder Fragen zur Performance-Optimierung kontaktieren Sie uns.