Garnet é um novo tipo de armazenamento remoto em cache desenvolvido pela Microsoft Research que oferece vários benefícios únicos:
- O Garnet toma o popular protocolo de linha RESP como ponto de partida, o que torna possível usar Garnet de clientes Redis não modificados disponíveis na maioria das linguagens de programação atualmente, como o StackExchange.Redis em C#.
- O Garnet oferece melhor throughput e escalabilidade com muitas conexões de clientes e pequenos lotes em comparação com armazenamento em cache open-source comparável, economizando custos para grandes aplicações e serviços.
- A Garnet demonstrou latência extremamente baixa do cliente (tipicamente menos de 300 microssegundos a 99,9%) usando VMs Commodity Cloud (Azure) com TCP acelerado habilitado, o que é fundamental para cenários do mundo real.
- O Garnet é baseado na mais recente tecnologia .NET e é multiplataforma, extensível e moderno. Ele foi projetado para ser fácil de desenvolver e evoluir sem sacrificar o desempenho em situações comuns. Aproveitamos o rico ecossistema de bibliotecas do .NET para expandir a API e oferecer oportunidades de otimização aberta. Graças ao nosso uso cuidadoso do .NET, a Garnet alcança desempenho de ponta tanto no Linux quanto no Windows.
Endereço de Código Aberto:O login do hiperlink está visível. Documentação:O login do hiperlink está visível.
A granada possui os seguintes benefícios principais:
- A taxa de transferência do servidor (operações por segundo) é aumentada em várias ordens de magnitude para pequenos lotes e muitas sessões de cliente em relação ao armazenamento em cache open source comparável.
- Em máquinas em nuvem comum (Azure) com TCP acelerado ativado no Windows e Linux, a latência por operação é extremamente baixa (tipicamente menos de 300 microssegundos a 99,9%).
- À medida que o número de clientes aumenta, uma melhor escalabilidade é alcançada com ou sem lote de clientes.
- Capacidade de usar todos os recursos de CPU/memória de um computador servidor por meio de uma única instância de servidor de memória compartilhada (sem necessidade de clustering intra-nós).
- Suporte para conjuntos de dados maiores que a memória que transbordam para dispositivos de armazenamento local e em nuvem.
- Recursos de banco de dados como checkpoint rápido e recuperação e publicação/assinatura.
- Suporte para particionamento de hash multi-nós (modo "cluster" Rederis), migração de estado e replicação.
- Bem testado com uma suíte de testes abrangente (milhares de testes unitários contra o Garnet e seu nível de armazenamento Tsavorite).
- base de código C# que é fácil de evoluir e expandir.
O Garnet não suporta todos os comandos Rederis, comandos especificamente suportados para visualização:O login do hiperlink está visível. O projeto Garnet inclui uma ferramenta de Benchmark para executar benchmarks de RESP usando diferentes clientes, diferentes cargas de trabalho e diferentes políticas para medir taxa de transferência, desempenho e latência. Endereço:O login do hiperlink está visível. Protocolo RESP:O login do hiperlink está visível.
Este artigo utiliza as ferramentas de benchmarking integradas da Redis para testes simples, e o ambiente de teste é o seguinte:
| cache | Versão | | Redis | Redis 3.0.504 (00000000/0) 64 bits | | Granada | Garnet 1.0.2 64 bits; Modo Standalone |
Benchmarks Redis
Primeiro, inicie o cache Redis usando a linha de comando com o seguinte comando:
O comando de teste é o seguinte:
Os resultados são os seguintes:
====== CONJUNTO ====== 500000 solicitações concluídas em 24,38 segundos 100 clientes paralelos Carga útil de 3 bytes Mantenha Vivo: 1
0,03% <= 1 milissegundo 0,25% <= 2 milissegundos 2,65% <= 3 milissegundos 16,49% <= 4 milissegundos 59,95% <= 5 milissegundos 99,09% <= 6 milissegundos 99,76% <= 7 milissegundos 99,86% <= 8 milissegundos 99,93% <= 9 milissegundos 99,98% <= 10 milissegundos 99,99% <= 11 milissegundos 100,00% <= 12 milissegundos 20512,82 solicitações por segundo
====== SE ====== 500000 solicitações concluídas em 27,41 segundos 100 clientes paralelos Carga útil de 3 bytes Mantenha Vivo: 1
0,03% <= 1 milissegundo 0,19% <= 2 milissegundos 6,44% <= 3 milissegundos 25,82% <= 4 milissegundos 45,65% <= 5 milissegundos 98,79% <= 6 milissegundos 99,98% <= 7 milissegundos 99,98% <= 8 milissegundos 99,98% <= 9 milissegundos 100,00% <= 9 milissegundos 18.238,86 pedidos por segundo
Benchmarks Garnet
Crie um novo projeto de console .NET 8 e primeiro faça referência ao pacote Microsoft.Garnet com o seguinte comando:
O código é o seguinte:
O comando de inicialização é o seguinte:
Usando o mesmo comando de benchmark, o resultado é o seguinte:
====== CONJUNTO ====== 500000 solicitações concluídas em 11,51 segundos 100 clientes paralelos Carga útil de 3 bytes Mantenha Vivo: 1
75,51% <= 1 milissegundo 88,24% <= 2 milissegundos 92,04% <= 3 milissegundos 99,46% <= 4 milissegundos 99,98% <= 5 milissegundos 99,99% <= 6 milissegundos 100,00% <= 12 milissegundos 100,00% <= 12 milissegundos 43448,04 solicitações por segundo
====== SE ====== 500000 solicitações concluídas em 31,50 segundos 100 clientes paralelos Carga útil de 3 bytes Mantenha Vivo: 1
0,01% <= 1 milissegundo 0,90% <= 2 milissegundos 27,25% <= 3 milissegundos 97,65% <= 4 milissegundos 99,82% <= 5 milissegundos 99,94% <= 6 milissegundos 99,98% <= 7 milissegundos 99,98% <= 9 milissegundos 99,98% <= 10 milissegundos 99,99% <= 11 milissegundos 100,00% <= 12 milissegundos 100,00% <= 12 milissegundos 15872,01 solicitações por segundo Devido às ferramentas de teste, versões de software, parâmetros de teste, etc., todos levam a resultados diferentes; os testes são apenas para referência; através dos testes simples neste artigo, pode-se ver que o Garnet tem latência significativamente menor que o Redis.
(Fim) |