Cache Multinível no API Gateway Enfrenta Desafios de Alto Tráfego

January 26, 2024

Technology

À medida que o uso de APIs continua a crescer no desenvolvimento moderno, a demanda por um gateway de API eficiente e confiável também aumentou. O gateway de API serve como o ponto de entrada único para todas as solicitações de API recebidas, permitindo que sejam gerenciadas e distribuídas de forma eficiente entre vários microsserviços. Embora o gateway de API ofereça inúmeros benefícios, ele pode enfrentar desafios ao lidar com cenários de alto tráfego.

Mecanismo de Cache do APISIX

O fluxograma a seguir ilustra o mecanismo de cache eficiente usado pelo APISIX para minimizar a latência e melhorar o desempenho. Ao armazenar respostas em cache em vários níveis, o APISIX pode reduzir efetivamente a carga nos servidores upstream e fornecer uma experiência mais responsiva para os clientes.

Client <-- HTTP Request --> APISIX Worker
    (Verifica o cache LRU no nível do processo)
    (Cache não encontrado)
    (Verifica o cache Shared DICT no nível do plano de dados)
        (Bloqueio não adquirido)
            (Adquire bloqueio, verifica o cache)
                (Cache encontrado)
                (Retorna a resposta em cache, libera bloqueios)
                (Cache não encontrado)
                    (Consulta o Redis)
                        (Adquire Mutex)
                            (Consulta o Redis)
                                (Cache não encontrado)
                                    (Recupera a resposta do upstream)
                                    (Armazena a resposta no cache Shared DICT)
                                    (Retorna a resposta ao cliente)
                                (Cache encontrado)
                                    (Copia a resposta para o cache Shared DICT)
                                    (Retorna a resposta em cache ao cliente)
                                (Libera o Mutex do Redis)
                        (Libera o bloqueio)
    (Cache encontrado)
        (Retorna a resposta em cache)

LRU: Cache de Primeira Camada no Nível de Trabalho Único do APISIX

O cache LRU (Least Recently Used) no nível de trabalho do APISIX é um componente crucial responsável por armazenar em cache dados frequentemente acessados dentro de cada processo de trabalho. Esse sistema de cache emprega o algoritmo de evição LRU, armazenando e recuperando dados de forma eficiente, priorizando o tratamento dos dados menos recentemente usados. Ao armazenar em cache dados frequentemente acessados na memória, o APISIX reduz significativamente a latência e os custos ao consultar fontes de dados externas, como regras de roteamento ou tokens de autenticação, melhorando assim a velocidade de resposta do sistema.

Por meio desse mecanismo de cache inteligente, o APISIX utiliza eficientemente os recursos do sistema ao lidar com um grande volume de solicitações, melhorando o desempenho e a estabilidade geral do sistema. O APISIX, com seu avançado cache LRU, fornece aos desenvolvedores uma solução de gateway de API confiável e eficiente, facilitando a comunicação suave com serviços externos.

Shared Dict: Cache de Segunda Camada no Nível de Nó do APISIX

O dicionário de memória compartilhada (shared dict) entre todos os processos de trabalho em um nó do APISIX. Ele serve como um cache centralizado para dados comumente acessados, incluindo dados de resposta da API ou cabeçalhos de resposta. Vários processos de trabalho podem acessar e atualizar esse cache simultaneamente para garantir a consistência dos dados e evitar duplicação desnecessária de dados.

Esse dicionário de memória compartilhada exibe desempenho excepcional, aproveitando tecnologias avançadas, como bloqueio de memória e estruturas de dados eficientes. Isso permite que ele alcance o objetivo de minimizar a contenção e maximizar a taxa de transferência. Por meio do bloqueio de memória, ele controla efetivamente o acesso concorrente, garantindo consistência durante operações simultâneas de leitura e escrita em vários processos de trabalho. O design eficiente da estrutura de dados permite que o dicionário de memória compartilhada execute operações de recuperação e atualização de dados mais rapidamente, melhorando o desempenho geral.

A introdução do dicionário de memória compartilhada injeta maior desempenho e escalabilidade no plano de dados do APISIX, fornecendo aos desenvolvedores uma ferramenta confiável para se destacar no tratamento de grandes volumes de dados e solicitações.

Mecanismo de Cache Multinível do APISIX

O diagrama abaixo ilustra o mecanismo de cache multinível do APISIX, semelhante ao princípio de um funil. Especificamente, o cache L1 utiliza um cache LRU dentro do trabalhador, o cache L2 é um shared dict entre vários trabalhadores, e o cache L3 é um banco de dados Redis externo ao gateway de API.

Aqui está um exemplo para elucidar: quando 10.000 solicitações de usuários consultam dados por meio do APISIX, assumindo que a taxa de acerto do cache L1 é de 90%, 9.000 solicitações serão retornadas diretamente. As 1.000 solicitações restantes consultarão o cache L2. Supondo que a taxa de acerto do cache L2 também seja de 90%, então 100 solicitações prosseguirão para consultar o cache L3, Redis. Antes que essas 100 solicitações consultem o Redis, elas primeiro consultarão mutex (exclusão mútua) para garantir que apenas uma solicitação consulte o Redis por vez, evitando o Efeito Dogpile.

Mecanismo de Cache Multinível do APISIX

Conclusão

Ao aproveitar as capacidades do cache multinível, o APISIX lida eficientemente com a maioria das solicitações dos clientes sem a necessidade de consultas frequentes a componentes externos de armazenamento de dados, como Redis ou Postgres. Isso não apenas reduz significativamente a latência geral, mas também aumenta a taxa de transferência do gateway de API, fornecendo às empresas uma solução eficiente e robusta que simplifica a comunicação com serviços externos. O design de otimização garante a robustez do sistema, permitindo que o APISIX aborde cenários de alta concorrência de forma flexível e crie um ambiente de desenvolvimento mais confiável e de alto desempenho para os engenheiros.

Share article link