Otimizando o desempenho de reprodução de cópia de transação com base no modelo Ractor

1. Fundo

Quando o banco de dados de espera reproduz transações, múltiplas transações independentes umas das outras podem ser reproduzidas simultaneamente. Este método é usado principalmente para resolver o problema de reprodução simultânea de múltiplas transações que podem ser reproduzidas simultaneamente. Por meio de vários threads de varredura simultâneos, a fila de reprodução de itens é varrida simultaneamente, vários itens que podem ser reproduzidos simultaneamente são gerados e o thread de reprodução é notificado sobre reprodução simultânea.

2. Projeto de estrutura de dados

Os dados de transação do banco de dados standby são segmentados e armazenados na fila de dados de transação do banco de dados standby de acordo com o ID da transação. Consulte a Figura 1 abaixo. De acordo com a natureza completamente desordenada do UUID do ID da transação, o UUID pode ser verificado simultaneamente. por segmentos de ID de transação. Depois de segmentar o UUID do ID da coisa, ele é entregue a várias corrotinas de thread de varredura. Cada thread de varredura é responsável por uma determinada partição UUID para conduzir a varredura simultânea por vários threads de varredura e verificar coisas que podem ser reproduzidas.

3. Ciclo de vida do fio

Quando o thread de varredura encontrar algo que pode ser reproduzido, ele adicionará o ID da coisa ao txnList e executará a operação de enfileiramento. Depois de adicionar o ID da coisa, o thread de varredura executará a operação de notificação e ativará o thread de reprodução adormecido para executar a operação. operação de reprodução de transação. Para obter um diagrama esquemático, consulte a Figura 2 abaixo.

O ciclo de vida da corrotina do thread de reprodução é mostrado na Figura 3. O thread de reprodução está em estado de suspensão logo após ser iniciado. Quando houver reprodução de transação, ele será ativado aleatoriamente. A rotina de thread de repetição despertada executará tarefas de repetição de transação e limpará dependências de transação.

Quando uma transação reproduzível for encontrada, se o número de transações reproduzíveis for igual a 1, a corrotina atual executará a reprodução para reduzir o custo de uma troca de CPU. Quando mais de uma transação reproduzível for encontrada, a corrotina de thread de reprodução irá; remova o primeiro Para uma transação reproduzível, adicione txnList para ativar outras corrotinas para reprodução de transação para obter melhor desempenho de simultaneidade de reprodução.

4. Problema de comutação simultânea

Quando a limpeza simultânea é adotada, devido ao problema de troca de CPU, é necessário processar as transações reproduzíveis que são descobertas repetidamente e realizar o processamento de idempotência defensiva para o mesmo ID de transação que é descoberto repetidamente, conforme mostrado na Figura 4 abaixo. Portanto, é necessário introduzir txnIDSet para cada transação reproduzível para processamento idempotente.

5. Como avaliar se a reprodução terminou

Como a varredura simultânea e a reprodução simultânea são adotadas, o processo de reprodução precisa terminar após a conclusão da reprodução de todas as transações reproduzíveis. A definição de final de reprodução é dada aqui.

Quando todas as transações reproduzíveis tiverem sido reproduzidas, a reprodução será considerada encerrada. As transações reproduzíveis são divididas em três categorias: transações reproduzíveis descobertas no passado/transações reproduzíveis descobertas agora/transações reproduzíveis descobertas no futuro.

As transações reproduzíveis descobertas no passado serão adicionadas ao txnList. As transações reproduzíveis descobertas agora estão sendo reproduzidas pelo encadeamento de reprodução descobertas no futuro são descobertas pelos UUIDs de varredura do thread.

  • A condição para encerrar a reprodução de transações descobertas no passado é que txnList esteja vazio;
  • A condição encontrada agora para o final da reprodução da transação é que a soma de todos os workersStatus seja 0;
  • A condição para o fim da reprodução de transações descobertas no futuro é que todos os threads de varredura não possam ser descobertos pela varredura do GatherAll em busca de transações reproduzíveis.

6. Ajuste de desempenho

De acordo com o número de CPUs, o número de corrotinas de reprodução do thread de varredura e do thread de reprodução pode ser ajustado dinamicamente para distribuir razoavelmente a carga das duas corrotinas. Isso aproveita ao máximo o desempenho dos processadores multi-core e melhora o rendimento e a capacidade de resposta do sistema.

Decidi desistir do software industrial de código aberto . Grandes eventos - OGG 1.0 foi lançado, a Huawei contribuiu com todo o código-fonte do Ubuntu 24.04 LTS foi oficialmente demitido . ". O Fedora Linux 40 foi lançado oficialmente. Uma conhecida empresa de jogos lançou novos regulamentos: os presentes de casamento dos funcionários não devem exceder 100.000 yuans. A China Unicom lança a primeira versão chinesa Llama3 8B do mundo do modelo de código aberto. Pinduoduo é condenado a compensar 5 milhões de yuans por concorrência desleal Método de entrada na nuvem doméstica - apenas a Huawei não tem problemas de segurança de upload de dados na nuvem.
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/5148943/blog/11045388
Recomendado
Clasificación