grommunio verbessert Mailbox-Performance

19. Juni 2024 | Neuigkeiten

grommunio verbessert Mailbox-Performance

Im Community-Release ist es bereits enthalten, bald wird es paketiert und ist dann auch für alle grommunio-Kunden verfügbar: Dank einer Änderung in der Art, wie grommunio die Datenbanken der E-Mail-Postfächer behandelt, profitieren Teams von einer deutlich verbesserten Mailbox-Performance.

Das Problem ist komplex, doch verbreitet: In der Vergangenheit konnte es vorkommen, dass bei gleichzeitigen Zugriffen durch viele Clients auf einzelne Mailboxen Benutzer längere Wartezeiten erfuhren, beispielsweise wenn mehrere Benutzer gleichzeitig längere Suchanfragen auf einer Mailbox ausführen, etwa bei der Vorbereitung eines Meetings. Schuld daran ist der Wunsch nach Konsistenz der Daten: Stets darf nur ein Client gleichzeitig auf den Datenbestand in einer Mailbox zugreifen und Änderungen vornehmen, danach ist der nächste Client dran – andernfalls drohen Inkonsistenzen. Vor allem bei größeren Datenbeständen (und zahlreichen Clients, die gleichzeitig zugreifen wollen), konnte dieser „serielle“ Zugriff (also einer nach dem anderen) dauern. Das Problem ist nicht auf grommunio beschränkt, sondern betrifft im Prinzip bei allen Web- und Maildienste: Wer konsistente Daten will, muss Zugriffe nacheinander abarbeiten, wer hohe Performance will, muss Zugriffe parallelisieren. Doch gibt es smarte Lösungen, die bei dem Dilemma helfen können. grommunio hat eine davon implementiert und damit großen Performancezuwachs erreicht.

Schreibend und nur-lesend: seriell oder parallel?

Die Lösung des Problems: Man unterscheidet die Zugriffe nach schreibend (write) und lesend (read-only). Nur lesende Zugriffe (etwa durch einen Mail-Client, der einen geteilten Ordner aktualisiert) kann der Server durchaus parallel durch mehrere Clients gleichzeitig erlauben, auch ein Cachen ist möglich. Nur beim Schreiben braucht es eine „Single Source of Truth“, also den exklusiven Zugriff durch einen Client – weil sonst inkonsistente Daten auftreten können oder ein Client die Änderungen des anderen überschreibt.

Das technisch umzusetzen, erfordert etwas Verständnis der Funktionsweise von grommunio (oder jedes anderen Mail- und Datenbankservers). In grommunio existiert eine zentrale MySQL-Datenbank für die Metadaten und Caches für die Metadaten des Benutzers, also eine große Tabelle mit allen Daten, auch beispielsweise dem Inhaltsverzeichnis für Informationen über Benutzer und die Zuordnung, wo genau die Mailbox eines Benutzers zu finden sind.

Dann gibt es noch eine SQLite-Datenbank pro User, die die spezifischen Benutzerdaten, inklusive aller Mails, beinhaltet. Für den einzelnen Nutzer ist sie gleichzeitig zentraler Baustein der Mailbox, unter Umständen aber auch der Flaschenhals, wenn zahlreiche Anfragen gleichzeitig auf sie einprasseln. Nichtsdestotrotz: Das System ist flexibel und hat sich bewährt, es lässt sich beliebig skalieren und macht einen wichtigen Teil der hohen Mailbox-Performance von grommunio aus.

Wenn aber beispielsweise ein Client eine Suche auf einer größeren Mailbox ausführt, dann ist diese für andere Anfragen gesperrt, bis die Suchanfrage vollständig abgearbeitet ist. Serverseitig implementiert ist das über einen Mutex, andere Clients müssen warten und laufen schlimmstenfalls in einen Timeout – was für den Benutzer eine Fehlermeldung bedeutet.

grommunio verbessert Mailbox-Performance - Mailbox Access Flow mit typischem Mutex
Problem mit typischem exmdb Server Mutex: Thread 1 sperrt Mutex und arbeitet mit geteilter Ressource, während Thread 2 vom Mutex blockiert wird und warten muss.

Erhöhte Mailbox-Performance durch Managementserver, der situativ entscheidet

Weil aber gerade bei Suchanfragen oder ähnlichen nur-lesenden Zugriffen der Mutex eigentlich keinen Sinn macht, schließlich wird der Datenbankbestand nicht geändert, haben die Entwickler von grommunio eine Lösung implementiert, die diesen Flaschenhals entfernt. Dafür haben die Developer den Managementserver (exmdb) angepasst. Der ist komplex und hat mit seinen über 120 Funktionen auch bisher schon die Zugriffe koordiniert. Um die Parallelisierung bei Nur-Lesenden Zugriffen einzubauen, mussten die Entwickler über 18.000 Code-Zeilen anpassen. Wo vorher ein Mutex pro Mailbox Konflikte verhinderte aber eben auch gelegentlich für Stau sorgte, kommt das neue System ohne „großen“ Mutex aus, sondern inspiziert jede Anfrage und entscheidet situativ, ob sie sicher parallelisierbar ist.

grommunio verbessert Mailbox-Performance - Mailbox Access Flow mit adaptiertem Server
Verbesserung mit angepasstem exmdb Server: Thread 1 und Thread 2 erhalten eine schnellere Antwort von der geteilten Ressource.

„Dieser Ansatz erwies sich als deutlich schneller, flexibler und ist für jedes Team spürbar, die mit geteilten Mailboxen arbeiten, gerade in der täglichen Arbeit. Ein typisches Beispiel ist die gemeinsame Vorbereitung eines Team-Meeting, wo alle Teilnehmer in der Stunden vor dem Meeting sich noch mal schnell auf den aktuellen Stand bringen wollen. Aber das ist nur ein Beispiel, Anwender berichten uns begeistert von anderen Situationen, die durch die Änderung jetzt deutlich beschleunigt wurden. “, freut sich grommunio-CTO Michael Kromer.

Lernen Sie weitere grommunio Funktionen kennen.

Archiv