TiDB: um banco de dados HTAP baseado em Raft
Título original: TiDB: A Raft-based HTAP Database
PublicadoProceedings of the VLDB Endowment
Saiu em uma revista, congresso ou livro, que normalmente avaliam o trabalho antes de aceitar. Mesmo assim, um único estudo nunca é a palavra final.
Resumo
Este paper não tem resumo disponível.
Análise de pesquisa
Escrita pelo Kurz, não pelos autores do paper. O resumo acima é dos próprios autores.
- Última revisão
- Versão
- 1.2
Visão geral
Bancos HTAP (processamento transacional e analítico híbrido) tentam executar transações curtas e consultas analíticas pesadas sobre os mesmos dados. A parte difícil é o isolamento: as consultas analíticas devem ler dados recentes e consistentes sem deixar as transações mais lentas.
Este artigo do VLDB 2020, da PingCAP, apresenta o TiDB, um banco SQL distribuído de código aberto feito para isso. Sua ideia central é estender o Raft, o algoritmo de consenso, para que um mesmo conjunto de dados tenha uma cópia em formato de linhas para transações e uma cópia em formato de colunas para análises, ambas consistentes.
Contribuição
A contribuição central é o papel de learner acrescentado ao Raft. Um learner recebe o log replicado de forma assíncrona, não vota em eleições e não faz parte do quórum, então não acrescenta espera a uma escrita. Os learners transformam linhas em colunas e formam um armazenamento colunar (TiFlash) que pode ser atualizado em tempo real e implantado em recursos separados do armazenamento de linhas (TiKV).
Em volta disso o artigo descreve uma camada SQL sem estado, com um otimizador baseado em custo que pode escolher entre a réplica de linhas e a de colunas para cada consulta, e o TiSpark para conectar ao ecossistema Hadoop.
Metodologia
O sistema tem quatro partes: os servidores SQL do TiDB, o armazenamento de linhas TiKV, o armazenamento colunar TiFlash e o Placement Driver (PD), que gerencia as regiões, balanceia a carga e atua como oráculo de timestamps.
Os dados são divididos em Regions, cada uma um grupo Raft (multi-Raft). As transações usam um commit em duas fases baseado no Percolator, com timestamps de início e de commit pedidos ao PD, e oferecem isolamento por snapshot. As leituras nos líderes do TiKV são linearizáveis, e o artigo descreve read index, lease read e follower read para acelerá-las.
Uma leitura no TiFlash pede ao líder o read index mais recente e espera até o learner ter aplicado aquela posição do log, que é como a consistência é garantida na hora da leitura e não na da escrita. A avaliação usa o CH-benCHmark num cluster de seis servidores (dois processadores Xeon E5-2630 v4 e 188 GB de memória cada).
Resultados
Estes são os resultados relatados pelos autores.
- O atraso de replicação do log entre TiKV e TiFlash ficou abaixo de 300 ms com 10 warehouses, na maior parte abaixo de 100 ms, e na maior parte abaixo de 1.000 ms com 100 warehouses.
- Obter timestamps do PD não é gargalo: os autores medem mais de 600.000 timestamps por segundo por servidor, mais de 100 vezes o que o TPC-C exige.
- Em cargas OLTP, o TiDB teve vazão maior que o CockroachDB na maioria dos casos, principalmente com bloqueio otimista em conjuntos de dados maiores.
- No CH-benCHmark, os autores relatam que o TiDB mantém alto desempenho tanto para o trabalho transacional quanto para o analítico enquanto os dois rodam isolados um do outro. O artigo também compara seu motor analítico com Greenplum, Presto e SparkSQL nas consultas analíticas do benchmark.
Análise crítica
O projeto deixa claro por que replicação assíncrona mais uma verificação na hora da leitura dá frescor e isolamento ao mesmo tempo, e a ideia do learner é simples o bastante para ser reaproveitada.
Pontos para ler com cuidado:
- Os autores são os desenvolvedores do sistema, e os experimentos usam o CH-benCHmark, uma mistura sintética. Como o isolamento se comporta com dados desbalanceados, mudanças de esquema ou varreduras analíticas muito grandes é menos visível.
- O frescor tem uma espera: uma leitura no TiFlash pode precisar esperar a aplicação do log, então o atraso de replicação aparece como latência de leitura sob carga.
- A comparação com o CockroachDB cobre OLTP, e o próprio artigo observa que o CockroachDB oferece serializabilidade, um nível de isolamento mais forte que o isolamento por snapshot do TiDB, e não tem motor analítico dedicado, então os dois não miram a mesma coisa.
- Manter uma cópia em linhas e uma em colunas acrescenta armazenamento e o trabalho de mantê-las em sincronia, um custo a pesar contra um projeto de motor único.
Pesquisas futuras
- Lidar com taxas de escrita maiores e mudanças de esquema na transformação do log em colunas sem aumentar o atraso.
- Posicionar réplicas de linhas e de colunas para equilibrar custo, isolamento e frescor automaticamente.
- Um benchmark HTAP e uma metodologia justos, já que os resultados dependem muito da mistura de cargas.
- Comparar um projeto baseado em learners com sistemas que mantêm um único formato de armazenamento e usam outras técnicas de isolamento.
Discussão · 0
Entre para participar da discussãoNenhum post ainda. Seja o primeiro a iniciar a discussão.