Overslaan naar inhoud
News

grommunio verbetert de prestaties van mailboxen

· door grommunio
grommunio verbetert de prestaties van mailboxen

Het is al opgenomen in de community release en zal binnenkort worden verpakt en beschikbaar zijn voor alle grommunio klanten: Dankzij een verandering in de manier waarop grommunio omgaat met e-mail mailbox databases, zullen teams profiteren van aanzienlijk verbeterde mailbox prestaties.

Het probleem is complex, maar wijdverspreid: In het verleden kon het voorkomen dat gebruikers langere wachttijden ondervonden wanneer veel klanten tegelijkertijd toegang hadden tot individuele mailboxen, bijvoorbeeld wanneer meerdere gebruikers tegelijkertijd langere zoekopdrachten uitvoerden op een mailbox, zoals bij de voorbereiding van een vergadering. De reden hiervoor is het streven naar dataconsistentie: slechts één client tegelijk mag de data in een mailbox benaderen en wijzigingen aanbrengen, waarna de volgende client aan de beurt is - anders bestaat het risico op inconsistenties. Deze “seriële” toegang (d.w.z. achter elkaar) kan lang duren, vooral bij grotere gegevenssets (en veel clients die tegelijkertijd toegang willen). Het probleem is niet beperkt tot grommunio, maar geldt in principe voor alle web- en maildiensten: Als je consistente gegevens wilt, moet je de toegang na elkaar verwerken; als je hoge prestaties wilt, moet je de toegang parallelliseren. Maar er zijn slimme oplossingen die kunnen helpen met dit dilemma. grommunio heeft er een geïmplementeerd en daarmee een grote prestatieverbetering bereikt.

Alleen schrijven en alleen lezen: serieel of parallel?

De oplossing voor het probleem: Er wordt onderscheid gemaakt tussen schrijf- en alleen-lezen-toegang. Alleen-lezen toegang (bijv. door een mailclient die een gedeelde map bijwerkt) kan door de server parallel door meerdere clients tegelijk worden toegestaan en caching is ook mogelijk. Een “single source of truth” is alleen nodig voor schrijven, d.w.z. exclusieve toegang door één client - anders kunnen inconsistente gegevens ontstaan of kan de ene client de wijzigingen van een andere overschrijven.

Om dit technisch te implementeren is enig begrip nodig van hoe grommunio (of elke andere mail- en databaseserver) werkt. In grommunio is er een centrale MySQL database voor de metadata en caches voor de metadata van de gebruiker, d.w.z. een grote tabel met alle gegevens, inclusief bijvoorbeeld de inhoudsopgave voor informatie over gebruikers en de toewijzing van waar de mailbox van een gebruiker precies kan worden gevonden.

Er is ook een SQLite-database voor elke gebruiker, die de specifieke gebruikersgegevens bevat, inclusief alle e-mails. Voor de individuele gebruiker is dit ook het centrale onderdeel van de mailbox, maar het kan ook een knelpunt zijn als er veel verzoeken tegelijkertijd binnenkomen. Desondanks is het systeem flexibel en heeft het zichzelf bewezen, het kan naar behoefte worden geschaald en is een belangrijk onderdeel van de hoge mailboxprestaties van grommunio.

Echter, als een client bijvoorbeeld een zoekopdracht uitvoert in een grotere mailbox, wordt deze geblokkeerd voor andere verzoeken totdat het zoekverzoek volledig is verwerkt. Aan de serverkant wordt dit geïmplementeerd via een Mutex, andere clients moeten wachten en lopen in het ergste geval tegen een timeout aan - wat een foutmelding voor de gebruiker betekent.

toegangsstroom tot mailbox - typische server](/img/posts/24-06-19_Mailbox-Access-Flow-typical_server.png)

Probleem met typische exmdb server mutex: Thread 1 vergrendelt mutex en werkt met gedeelde bronnen, terwijl thread 2 wordt geblokkeerd door mutex en moet wachten.

Verbeterde mailboxprestaties dankzij een beheerserver die situationele beslissingen neemt

Omdat de Mutex niet echt zinvol is voor zoekopdrachten of soortgelijke alleen-lezen toegang, omdat de database niet wordt gewijzigd, hebben de ontwikkelaars van grommunio een oplossing geïmplementeerd die dit knelpunt wegneemt. De ontwikkelaars hebben de management server (exmdb) voor dit doel aangepast. Deze is complex en heeft al toegang gecoördineerd met zijn meer dan 120 functies. Om parallellisatie voor alleen-lezen toegang in te bouwen, moesten de ontwikkelaars meer dan 18.000 regels code aanpassen. Waar voorheen één Mutex per mailbox conflicten voorkwam, maar af en toe ook opstoppingen veroorzaakte, beheert het nieuwe systeem zonder een “grote” Mutex, in plaats daarvan inspecteert het elk verzoek en beslist het situationeel of het veilig geparallelliseerd kan worden.

mailbox-toegangsstroom - aangepaste server](/img/posts/24-06-19_Mailbox-toegangsstroom-aangepaste_server.png)

Verbetering met aangepaste exmdb-server: Thread 1 en Thread 2 krijgen een snellere respons van de gedeelde bron.

“Deze aanpak bleek aanzienlijk sneller en flexibeler te zijn en is merkbaar voor elk team dat met gedeelde mailboxen werkt, vooral in het dagelijkse werk. Een typisch voorbeeld is de gezamenlijke voorbereiding van een teamvergadering, waarbij alle deelnemers elkaar snel op de hoogte willen brengen in de uren voor de vergadering. Maar dat is slechts één voorbeeld, gebruikers vertellen ons enthousiast over andere situaties die nu aanzienlijk zijn versneld door de verandering. ”, zegt grommunio CTO Michael Kromer.

Meer informatie over andere grommunio functies.