20K QPS no Rockset | Conjunto de foguetes


Escalabilidade, desempenho e eficiência são as principais considerações por trás do design e da arquitetura do Rockset. Hoje, temos o prazer de partilhar um marco notável numa destas dimensões. Uma carga de trabalho de cliente atingiu 20 mil consultas por segundo (QPS) com uma latência de consulta (p95) inferior a 200 ms, enquanto ingeria continuamente dados de streaming, marcando uma demonstração significativa da escalabilidade de nossos sistemas. Este weblog técnico destaca a arquitetura que abriu caminho para essa conquista.

Noções básicas sobre cargas de trabalho em tempo actual

Um QPS alto costuma ser essential para organizações que exigem processamento em tempo actual ou quase em tempo actual de um quantity significativo de consultas. Eles podem variar desde mercados on-line que precisam lidar com um grande número de consultas de clientes e pesquisas de produtos até plataformas de varejo que precisam de QPS elevados para fornecer recomendações personalizadas em tempo actual. Na maioria desses casos de uso em tempo actual, novos dados nunca param de chegar e as consultas também nunca param. Um banco de dados que atende consultas analíticas em tempo actual precisa processar leituras e gravações simultaneamente.

  1. Escalabilidade: Para atender ao alto quantity de consultas recebidas, é importante ser capaz de distribuir a carga de trabalho entre vários nós e dimensionar horizontalmente conforme necessário.
  2. Isolamento de carga de trabalho: Quando a ingestão de dados em tempo actual e as cargas de trabalho de consulta são executadas nas mesmas unidades de computação, elas competem diretamente por recursos. Quando a ingestão de dados tem um momento de inundação repentina, suas consultas ficam mais lentas ou atingem o tempo limite, tornando seu aplicativo instável. Quando você tem uma explosão repentina e inesperada de consultas, seus dados ficarão atrasados, fazendo com que seu aplicativo não seja mais tão em tempo actual.
  3. Otimização de consulta: Quando os tamanhos dos dados são grandes, você não pode se dar ao luxo de verificar grandes porções de seus dados para responder a consultas, especialmente quando o QPS também é alto. As consultas precisam aproveitar fortemente os índices subjacentes para reduzir a quantidade de computação necessária por consulta.
  4. Simultaneidade: Altas taxas de consulta podem levar à disputa por bloqueios, causando gargalos de desempenho ou impasses. A implementação de mecanismos eficazes de controle de simultaneidade é necessária para manter a consistência dos dados e evitar a degradação do desempenho.
  5. Fragmentação e distribuição de dados: A fragmentação e distribuição eficiente de dados entre vários nós é essencial para o processamento paralelo e o balanceamento de carga.

Vamos discutir cada um dos pontos acima com mais detalhes e analisar como a arquitetura Rockset ajuda.

Como a arquitetura Rockset permite o escalonamento de QPS

Escala: Rockset separa computação do armazenamento. Uma Instância Digital Rockset (VI) é um cluster de recursos de computação e cache. É completamente separado da camada de armazenamento quente, um sistema de armazenamento distribuído baseado em SSD que armazena o conjunto de dados do usuário. Ele atende solicitações de blocos de dados do software program em execução na Instância Digital. O requisito crítico é que múltiplas Instâncias Virtuais possam atualizar e ler o mesmo conjunto de dados residente no HotStorage. Uma atualização de dados feita a partir de uma Instância Digital fica visível nas outras Instâncias Virtuais em alguns milissegundos.


20K QPS no Rockset | Conjunto de foguetes

Agora, você pode imaginar como é fácil aumentar ou diminuir o sistema. Quando o quantity de consultas estiver baixo, basta usar uma Instância Digital para atender as consultas. Quando o quantity de consulta aumentar, crie uma nova Instância Digital e distribua a carga de consulta para todas as Instâncias Virtuais existentes. Essas instâncias virtuais não precisam de uma nova cópia dos dados; em vez disso, todas usam a camada de armazenamento quente para buscar dados. O fato de não ser necessário fazer réplicas de dados significa que a expansão é rápida e rápida.

Isolamento de carga de trabalho: Cada Instância Digital no Rockset é completamente isolada de qualquer outra Instância Digital. Você pode ter uma Instância Digital processando novas gravações e atualizando o armazenamento ativo, enquanto uma Instância Digital diferente pode processar todas as consultas. A vantagem disso é que um sistema de gravação intermitente não afeta as latências de consulta. Esse é um dos motivos pelos quais as latências de consulta p95 são mantidas baixas. Este padrão de projeto é chamado Separação computação-computação.


20k-qps-2

Otimização de consulta: Rockset usa um Índice Convergente para restringir a consulta para processar a menor porção de dados necessária para essa consulta. Isso reduz a quantidade de computação necessária por consulta, melhorando assim o QPS. Ele usa o mecanismo de armazenamento de código aberto chamado RochasDB para armazenar e acessar o Índice Convergido.

Simultaneidade: Rockset emprega consulta controle de admissão para manter a estabilidade sob carga pesada, para que o sistema não tente executar muitas coisas simultaneamente e piorar em todas elas. Ele impõe isso por meio do que é chamado de Limite de Execução de Consulta Simultânea, que especifica o número whole de consultas que podem ser processadas simultaneamente, e Limite de Consulta Simultânea, que determine quantas consultas que ultrapassam o limite de execução podem ser enfileiradas para execução.

Isto é especialmente importante quando o QPS está na casa dos milhares; se processarmos todas as consultas recebidas simultaneamente, o número de trocas de contexto e outras sobrecargas farão com que todas as consultas demorem mais. Uma abordagem melhor é processar simultaneamente apenas quantas consultas forem necessárias para manter todas as CPUs em plena aceleração e enfileirar todas as consultas restantes até que haja CPU disponível. As configurações de Limite de Execução de Consulta Simultânea e Limite de Consulta Simultânea do Rockset permitem que você ajuste essas filas com base em sua carga de trabalho.

Fragmentação de dados: Rockset usa fragmentação de documentos para espalhar seus dados em vários nós em uma instância digital. A consulta única pode aproveitar a computação de todos os nós em uma Instância Digital. Isso ajuda no balanceamento de carga simplificado, na localidade dos dados e no desempenho aprimorado das consultas.

Uma olhada na carga de trabalho do cliente

Dados e consultas: O conjunto de dados deste cliente tinha 4,5 TB e um whole de 750 milhões de linhas. O tamanho médio do documento period de aproximadamente 9 KB com tipos mistos e alguns campos profundamente aninhados. A carga de trabalho consiste em dois tipos de consultas:

choose * from collection_name the place processBy = :processBy
choose * from collection_name the place array_contains(emails, :e mail)

O predicado da consulta é parametrizado para que cada execução escolha um valor diferente para o parâmetro no momento da consulta.

Uma Instância Digital Rockset é um cluster de computação e cache e vem em tamanhos de camisetas. Nesse caso, a carga de trabalho usa diversas instâncias de instâncias virtuais de tamanho 8XL para consultas e uma única instância digital XL para processar atualizações simultâneas. Um 8XL possui 256 vCPUs, enquanto um XL possui 32 vCPUs.

Aqui está um documento de amostra. Observe os níveis profundos de aninhamento nesses documentos. Ao contrário de outros bancos de dados OLAP, não precisamos nivelar esses documentos quando você os armazena no Rockset. E a consulta pode acessar qualquer campo do documento aninhado sem afetar o QPS.

Atualizações: Um fluxo contínuo de atualizações de registros existentes flui a cerca de 10 MB/s. Este fluxo de atualização é processado continuamente por uma instância digital XL. As atualizações ficam visíveis para todas as instâncias virtuais nesta configuração em alguns milissegundos. Um conjunto separado de instâncias virtuais é usado para processar a carga de consulta conforme descrito abaixo.

Demonstrando o escalonamento QPS linearmente com recursos de computação

Um gerador de consultas distribuídas baseado em Gafanhoto foi usado para gerar até 20 mil QPS no conjunto de dados do cliente. Começando com uma única instância digital 8XL, observamos que ela sustentava cerca de 2.700 QPS com latência de consulta p95 abaixo de 200 ms.


20k-qps-3

Depois de expandir para quatro instâncias virtuais 8XL, observamos que ela sustentava cerca de 10 mil QPS com latência de consulta p95 abaixo de 200 ms.


20k-qps-4

E depois de escalar para oito instâncias virtuais 8XL, observamos que ela continuou a escalar linearmente e manteve cerca de 19 mil QPS em menos de 200 ms p95!!


20k-qps-5

Atualização de dados

As atualizações de dados estão ocorrendo em uma Instância Digital e as consultas estão ocorrendo em oito Instâncias Virtuais diferentes. Portanto, a questão pure que surge é: “As atualizações são visíveis em todas as Instâncias Virtuais e, em caso afirmativo, quanto tempo leva para que as atualizações fiquem visíveis nas consultas?”

A métrica de atualização de dados, também chamada de latência de dados, em todas as instâncias virtuais está em milissegundos de um dígito, conforme mostrado no gráfico acima. Esta é uma medida verdadeira da característica em tempo actual do Rockset em altas gravações e altos QPS!


20k-qps-6

Conclusões

Os resultados mostram que o Rockset pode atingir um aumento de QPS quase linear: é tão fácil quanto criar novas Instâncias Virtuais e distribuir a carga de consulta para todas as Instâncias Virtuais. Não há necessidade de fazer réplicas de dados. E, ao mesmo tempo, o Rockset continua a processar atualizações simultaneamente. Estamos entusiasmados com as possibilidades que temos pela frente à medida que continuamos a ultrapassar os limites do que é possível com QPS elevados.



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *