navegação:
Índice
1. Quatro estratégias básicas de sincronização
1.1 Estratégia de sincronização
1.2 Atualizar cache ou excluir cache?
1.2.1 Vantagens e desvantagens de atualizar o cache
1.2.2 Vantagens e desvantagens de excluir o cache (recomendado)
1.3 Operar o banco de dados primeiro ou excluir o cache primeiro?
1.3.1 Vantagens e desvantagens de primeiro excluir o cache e depois operar o banco de dados
1.4 Estratégia de sincronização ideal: primeiro atualize o banco de dados e depois exclua o cache
2. Exclusão síncrona + esquema de mensagem confiável
3. Dupla exclusão atrasada: uma solução de maior consistência
4. Monitoramento assíncrono + esquema confiável de exclusão de mensagens
5. Múltiplas Garantias: Solução Final Forte Consenso
1. Quatro estratégias básicas de sincronização
1.1 Estratégia de sincronização
Para garantir a consistência de gravação dupla entre o cache e o banco de dados, existem quatro estratégias de sincronização , ou seja, atualizar o cache primeiro e depois atualizar o banco de dados, atualizar o banco de dados primeiro e depois atualizar o cache, excluir o cache primeiro e depois atualizar o banco de dados e atualize o banco de dados primeiro e depois exclua o cache.
- Atualize o cache primeiro e depois atualize o banco de dados: a segunda etapa falha e a biblioteca de cache contém dados sujos
- Atualize o banco de dados primeiro e depois atualize o cache: a segunda etapa falha e a biblioteca de cache contém dados antigos
- Exclua o cache primeiro e depois atualize o banco de dados: a segunda etapa falha e a biblioteca de cache contém dados vazios
- Atualize o banco de dados primeiro e depois exclua o cache (recomendado): a segunda etapa falha e a biblioteca de cache contém dados antigos
1.2 Atualizar cache ou excluir cache?
1.2.1 Vantagens e desvantagens de atualizar o cache
A vantagem de atualizar o cache é que ele pode ser atualizado em tempo hábil sempre que os dados mudam , de modo que a falta de consulta não é fácil de ocorrer, mas esta operação consome muito . Se os dados precisarem ser gravados no cache após cálculos complexos, freqüentes O cache atualizado afetará o desempenho do servidor. Se for um cenário em que os dados são gravados com frequência, o cache pode ser atualizado com frequência, mas não há empresa para ler os dados.
1.2.2 Vantagens e desvantagens de excluir o cache (recomendado)
A vantagem de deletar o cache é que a operação é simples , não importa se a operação de atualização é complexa ou não, os dados do cache são deletados diretamente. A desvantagem dessa abordagem é que, após a exclusão do cache, é provável que ocorra uma falha na próxima vez e, em seguida, o banco de dados precisará ser lido novamente.
Por outro lado, excluir o cache é sem dúvida a melhor escolha .
1.3 Operar o banco de dados primeiro ou excluir o cache primeiro?
1.3.1 Vantagens e desvantagens de primeiro excluir o cache e depois operar o banco de dados
Caso 1: o banco de dados e o conteúdo do cache são inconsistentes
Quando o thread 1 exclui o cache e não teve tempo de atualizar o banco de dados, o thread 2 lê o cache. Como os dados no cache foram limpos pelo thread 1, o thread 2 precisa ler os dados do banco de dados e, em seguida, salvar o leia os resultados no cache. Neste momento, o thread 1 atualiza e atualiza o banco de dados com sucesso. Haverá inconsistências entre o banco de dados e o conteúdo do cache.
Caso 2: quebra de cache, banco de dados travado
Quando o thread 1 exclui o cache e não teve tempo de atualizar o banco de dados, um grande número de solicitações de leitura chega. Como não há dados no cache, a quebra do cache acessa diretamente um grande número de solicitações ao banco de dados, fazendo com que o banco de dados travar.
1.3.2 Vantagens e desvantagens de operar primeiro o banco de dados e depois excluir o cache (recomendado)
Problema de dados sujos: Se o banco de dados for operado primeiro, mas o cache não for excluído, os dados antigos sempre permanecerão na biblioteca de cache, enquanto os novos dados serão armazenados em nosso banco de dados.
Solução: mecanismo de nova tentativa assíncrona
Quando os problemas acima ocorrem, geralmente usamos o mecanismo de nova tentativa para resolvê-los.Para evitar que o mecanismo de nova tentativa afete a execução do negócio principal, geralmente é recomendado que o mecanismo de nova tentativa seja executado de maneira assíncrona . Quando adotamos o mecanismo de nova tentativa, devido à existência de simultaneidade, excluir o cache primeiro ainda pode ter dados antigos armazenados no cache, enquanto novos dados são armazenados no banco de dados, e os dois dados são inconsistentes.
1.4 Estratégia de sincronização ideal: primeiro atualize o banco de dados e depois exclua o cache
Assim chegamos à conclusão que atualizar primeiro o banco de dados e depois deletar o cache é uma solução com menor impacto . Se a segunda etapa falhar, um mecanismo de nova tentativa poderá ser usado para resolver o problema.
Esquema de exclusão síncrona: primeiro atualize o banco de dados e depois exclua o cache. Adequado para cenários onde a consistência dos dados não é obrigatória
Processo: primeiro atualize o banco de dados e depois exclua o cache.
pergunta:
- Dados sujos durante a simultaneidade: durante o período entre a consulta do banco de dados e a gravação do cache, outros threads realizam uma atualização e exclusão, resultando nos dados armazenados em cache como dados antigos
- Falha na exclusão do cache: a biblioteca de cache ainda contém dados antigos devido a falha na exclusão
2. Exclusão síncrona + esquema de mensagem confiável
Exclusão síncrona + exclusão confiável de mensagens: adequado para cenários onde a consistência dos dados não é obrigatória
Processo: primeiro atualize o banco de dados e, em seguida, exclua o cache. Se a exclusão falhar, envie um MQ confiável e tente excluir o cache novamente até que a exclusão seja bem-sucedida ou tente novamente 5 vezes.
Problema: O MQ falhou em diversas tentativas, resultando em dados sujos de longo prazo.
3. Dupla exclusão atrasada: uma solução de maior consistência
Esquema de exclusão dupla atrasada: um esquema com maior consistência do que a estratégia de exclusão síncrona.
Processo: primeiro exclua o cache e depois atualize o banco de dados, aproximadamente uma vez após o banco de dados ser atualizado a partir da biblioteca.
Problema: O tempo está fora de controle e não há garantia de que o cache será excluído após a atualização do banco de dados do repositório. Se for excluído antes da atualização do banco de dados escravo, o usuário verificará o banco de dados escravo e gravará os dados sujos no cache antes de atualizar.
4. Monitoramento assíncrono + esquema confiável de exclusão de mensagens
Monitoramento assíncrono + exclusão confiável de mensagens: uma solução que muitos dos principais fabricantes estão usando.
processo:
- Nenhuma operação após atualização do banco de dados;
- Canal e outros componentes monitoram o log binário e enviam MQ confiável para excluir o cache quando encontram uma atualização;
- Se a exclusão do cache falhar, a mensagem será repetida dentro de um número limitado de vezes com base em mecanismos como confirmação manual e nova tentativa.
vantagem:
- Exclusão assíncrona, maior desempenho;
- Mecanismo confiável de nova tentativa de mensagem, múltiplas exclusões garantem uma exclusão bem-sucedida.
Problema: Os componentes de captura do binlog, como o canal, devem estar altamente disponíveis. Se o canal falhar, resultarão em dados sujos de longo prazo.
5. Múltiplas Garantias: Solução Final Forte Consenso
Vários esquemas de garantia: exclusão síncrona + monitoramento assíncrono + exclusão confiável de mensagens, definir tempo de expiração durante o armazenamento em cache e forçar a verificação da biblioteca principal durante a consulta; adequado para situações em que a consistência dos dados é obrigatória
- Exclusão síncrona: primeiro atualize o banco de dados e depois exclua o cache; após esse link, é proibido verificar os dados novamente, para evitar que os dados antigos do cache sejam encontrados novamente antes que o cache seja excluído.
- Monitoramento de canal: Canal e outros componentes monitoram o log binário e enviam MQ confiável para excluir o cache quando descobrem que há uma atualização; a segunda camada garante que o cache seja excluído com sucesso;
- Consistência de verificação de mensagem atrasada: Canal e outros componentes monitoram o log binário, enviam MQ atrasado e verificam a consistência do cache após N segundos;
- Tempo de expiração do cache: defina o tempo de expiração cada vez que o cache é armazenado em cache, a terceira camada garante o sucesso da exclusão do cache;
- Verificação obrigatória da biblioteca mestre Redis: Ao verificar o cache no futuro, é forçado a verificar a biblioteca principal do cache escravo; porque há um atraso na sincronização mestre-escravo e, ao mesmo tempo, não há necessidade de se preocupar com a pressão na biblioteca principal por causa do mecanismo de cluster de fragmentação.