o grommunio melhora o desempenho da caixa de correio
Já está incluído na versão da comunidade e em breve será empacotado e disponibilizado a todos os clientes da grommunio: Graças a uma alteração na forma como o grommunio lida com as bases de dados das caixas de correio eletrónico, as equipas irão beneficiar de um desempenho significativamente melhorado das caixas de correio.
O problema é complexo, mas generalizado: No passado, podia acontecer que os utilizadores ficassem com tempos de espera mais longos quando muitos clientes acediam a caixas de correio individuais ao mesmo tempo, por exemplo, quando vários utilizadores efectuavam consultas de pesquisa mais longas numa caixa de correio ao mesmo tempo, como quando se preparavam para uma reunião. A razão para isso é o desejo de consistência dos dados: apenas um cliente de cada vez pode aceder aos dados de uma caixa de correio e fazer alterações, após o que é a vez do cliente seguinte - caso contrário, existe o risco de inconsistências. Este acesso “em série” (ou seja, um após o outro) pode demorar muito tempo, especialmente com conjuntos de dados maiores (e com vários clientes a quererem aceder ao mesmo tempo). O problema não se limita ao grommunio, mas aplica-se, em princípio, a todos os serviços Web e de correio eletrónico: Se quiser dados consistentes, tem de processar os acessos um após o outro; se quiser um desempenho elevado, tem de paralelizar os acessos. Mas há soluções inteligentes que podem ajudar a resolver este dilema. O grommunio implementou uma delas e conseguiu assim um grande aumento de desempenho.
Escrita e somente leitura: serial ou paralelo?
A solução para o problema: É feita uma distinção entre o acesso de escrita e o acesso apenas de leitura. O acesso só de leitura (por exemplo, por um cliente de correio eletrónico que actualiza uma pasta partilhada) pode ser permitido pelo servidor em paralelo por vários clientes ao mesmo tempo, sendo também possível o armazenamento em cache. Só é necessária uma “fonte única de verdade” para a escrita, ou seja, para o acesso exclusivo de um cliente - caso contrário, podem ocorrer dados inconsistentes ou um cliente pode substituir as alterações efectuadas por outro.
A implementação desta técnica requer alguma compreensão do funcionamento do grommunio (ou de qualquer outro servidor de correio eletrónico e base de dados). No grommunio, existe uma base de dados MySQL central para os metadados e caches para os metadados do utilizador, ou seja, uma grande tabela com todos os dados, incluindo, por exemplo, o índice de informações sobre os utilizadores e a atribuição do local exato onde se encontra a caixa de correio de um utilizador.
Existe também uma base de dados SQLite para cada utilizador, que contém os dados específicos do utilizador, incluindo todos os e-mails. Para o utilizador individual, é também o componente central da caixa de correio, mas também pode ser um estrangulamento se chegarem vários pedidos ao mesmo tempo. No entanto, o sistema é flexível e tem provas dadas, pode ser dimensionado conforme necessário e é uma parte importante do elevado desempenho da caixa de correio da grommunio.
No entanto, se um cliente efetuar uma pesquisa numa caixa de correio maior, por exemplo, esta é bloqueada para outros pedidos até que o pedido de pesquisa tenha sido totalmente processado. No lado do servidor, isto é implementado através de um Mutex, os outros clientes têm de esperar e, no pior dos casos, deparam-se com um timeout - o que significa uma mensagem de erro para o utilizador.

Problema com o mutex típico do servidor exmdb: A thread 1 bloqueia o mutex e trabalha com o recurso partilhado, enquanto a thread 2 é bloqueada pelo mutex e tem de esperar.
Aumento do desempenho da caixa de correio graças a um servidor de gerenciamento que toma decisões situacionais
Uma vez que o Mutex não faz realmente sentido para consultas de pesquisa ou acessos semelhantes apenas de leitura, uma vez que a base de dados não é alterada, os criadores do grommunio implementaram uma solução que elimina este estrangulamento. Os criadores adaptaram o [servidor de gestão (exmdb)] (https://docs.grommunio.com/man/exmdb_provider.4gx.html) para este efeito. É complexo e já coordenou o acesso com as suas mais de 120 funções. Para incorporar a paralelização do acesso só de leitura, os criadores tiveram de adaptar mais de 18 000 linhas de código. Enquanto anteriormente um Mutex por caixa de correio evitava conflitos, mas também causava ocasionalmente congestionamento, o novo sistema gere sem um “grande” mutex, inspeccionando em vez disso cada pedido e decidindo numa base situacional se pode ser paralelizado com segurança.
fluxo de acesso à caixa de correio - servidor adaptado](/img/posts/24-06-19_Mailbox-Access-Flow-adapted_server.png)
Melhoria com o servidor exmdb adaptado: A Thread 1 e a Thread 2 recebem uma resposta mais rápida do recurso partilhado.
“Esta abordagem provou ser significativamente mais rápida, mais flexível e é percetível para todas as equipas que trabalham com caixas de correio partilhadas, especialmente no trabalho diário. Um exemplo típico é a preparação conjunta de uma reunião de equipa, em que todos os participantes pretendem atualizar-se rapidamente nas horas que antecedem a reunião. Mas este é apenas um exemplo, os utilizadores falam-nos com entusiasmo de outras situações que foram agora significativamente aceleradas pela mudança. ”, afirma o diretor técnico da grommunio, Michael Kromer.
Saiba mais sobre outras funcionalidades da grommunio.