grommunio poprawia wydajność skrzynki pocztowej
Jest on już zawarty w wydaniu społecznościowym, a wkrótce zostanie spakowany i udostępniony wszystkim klientom grommunio: Dzięki zmianie w sposobie, w jaki grommunio obsługuje bazy danych skrzynek e-mail, zespoły skorzystają ze znacznie lepszej wydajności skrzynek pocztowych.
Problem jest złożony, ale powszechny: W przeszłości mogło się zdarzyć, że użytkownicy doświadczali dłuższego czasu oczekiwania, gdy wielu klientów uzyskiwało dostęp do poszczególnych skrzynek pocztowych w tym samym czasie, na przykład gdy kilku użytkowników wykonywało dłuższe zapytania wyszukiwania na skrzynce pocztowej w tym samym czasie, np. podczas przygotowywania się do spotkania. Powodem tego jest chęć zachowania spójności danych: tylko jeden klient na raz może uzyskać dostęp do danych w skrzynce pocztowej i wprowadzić zmiany, po czym przychodzi kolej na następnego klienta - w przeciwnym razie istnieje ryzyko niespójności. Taki “seryjny” dostęp (tj. jeden po drugim) może zająć dużo czasu, zwłaszcza w przypadku większych zestawów danych (i wielu klientów chcących uzyskać dostęp w tym samym czasie). Problem ten nie ogranicza się do grommunio, ale dotyczy w zasadzie wszystkich usług internetowych i pocztowych: Jeśli chcesz spójnych danych, musisz przetwarzać dostępy jeden po drugim; jeśli chcesz wysokiej wydajności, musisz zrównoleglić dostępy. Istnieją jednak inteligentne rozwiązania, które mogą pomóc w rozwiązaniu tego dylematu. grommunio wdrożyło jedno z nich i w ten sposób osiągnęło znaczny wzrost wydajności.
Tylko do zapisu i odczytu: szeregowo czy równolegle?
Rozwiązanie problemu: Rozróżnia się dostęp tylko do zapisu i tylko do odczytu. Dostęp tylko do odczytu (np. przez klienta pocztowego aktualizującego udostępniony folder) może być dozwolony przez serwer równolegle przez kilku klientów w tym samym czasie, a buforowanie jest również możliwe. “Pojedyncze źródło prawdy” jest wymagane tylko do zapisu, tj. wyłącznego dostępu przez jednego klienta - w przeciwnym razie mogą wystąpić niespójne dane lub jeden klient może nadpisać zmiany wprowadzone przez innego.
Wdrożenie tego technicznie wymaga pewnego zrozumienia, jak działa grommunio (lub jakikolwiek inny serwer poczty i bazy danych). W grommunio istnieje centralna baza danych MySQL dla metadanych i pamięci podręcznych dla metadanych użytkownika, tj. duża tabela ze wszystkimi danymi, w tym na przykład spis treści dla informacji o użytkownikach i przypisanie, gdzie dokładnie można znaleźć skrzynkę pocztową użytkownika.
Istnieje również baza danych SQLite dla każdego użytkownika, która zawiera konkretne dane użytkownika, w tym wszystkie wiadomości e-mail. Dla indywidualnego użytkownika jest to również centralny element skrzynki pocztowej, ale może być również wąskim gardłem, jeśli w tym samym czasie przychodzi wiele żądań. Niemniej jednak system jest elastyczny i sprawdził się, można go skalować zgodnie z wymaganiami i jest ważną częścią wysokiej wydajności skrzynki pocztowej grommunio.
Jednakże, jeśli klient wykonuje wyszukiwanie w większej skrzynce pocztowej, na przykład, jest ona blokowana dla innych żądań, dopóki żądanie wyszukiwania nie zostanie w pełni przetworzone. Po stronie serwera jest to zaimplementowane poprzez Mutex, inni klienci muszą czekać, a w najgorszym przypadku napotkać limit czasu - co oznacza komunikat o błędzie dla użytkownika.

Problem z typowym muteksem serwera exmdb: Wątek 1 blokuje muteks i pracuje ze współdzielonym zasobem, podczas gdy wątek 2 jest blokowany przez muteks i musi czekać.
Zwiększona wydajność skrzynki pocztowej dzięki serwerowi zarządzania, który podejmuje decyzje sytuacyjne
Ponieważ muteks tak naprawdę nie ma sensu w przypadku zapytań wyszukiwania lub podobnych dostępów tylko do odczytu, ponieważ baza danych nie jest zmieniana, twórcy grommunio wdrożyli rozwiązanie, które usuwa to wąskie gardło. Deweloperzy zaadaptowali do tego celu serwer zarządzania (exmdb). Jest on złożony i ma już skoordynowany dostęp do ponad 120 funkcji. Aby włączyć zrównoleglenie dostępu tylko do odczytu, programiści musieli dostosować ponad 18 000 linii kodu. Tam, gdzie wcześniej jeden muteks na skrzynkę pocztową zapobiegał konfliktom, ale także czasami powodował zatory, nowy system zarządza bez “dużego” muteksu, zamiast tego sprawdzając każde żądanie i decydując na podstawie sytuacji, czy można je bezpiecznie zrównoleglić.
przepływ dostępu do skrzynki pocztowej - dostosowany serwer](/img/posts/24-06-19_Mailbox-Access-Flow-adapted_server.png)
Ulepszenie z dostosowanym serwerem exmdb: Wątek 1 i wątek 2 otrzymują szybszą odpowiedź ze współdzielonego zasobu.
“To podejście okazało się znacznie szybsze, bardziej elastyczne i jest zauważalne dla każdego zespołu, który pracuje ze współdzielonymi skrzynkami pocztowymi, szczególnie w codziennej pracy. Typowym przykładem jest wspólne przygotowanie spotkania zespołu, gdzie wszyscy uczestnicy chcą szybko zaktualizować się nawzajem na kilka godzin przed spotkaniem. Ale to tylko jeden przykład, użytkownicy mówią nam z entuzjazmem o innych sytuacjach, które zostały teraz znacznie przyspieszone dzięki zmianie. ”, mówi CTO grommunio Michael Kromer.
Dowiedz się więcej o innych funkcjach grommunio.