TiKV - banco de dados de valor-chave distribuído para nuvem nativa



Em 28 de agosto, o CNCF (Cloud Native Computing Foundation), por trás do Kubernetes, Prometheus e outros projetos de código aberto para aplicativos modernos em nuvem, anunciou a adoção de um novo produto em sua sandbox - TiKV .

Esse banco de dados transacional distribuído e com valor-chave nasceu como uma adição ao TiDB , um sistema de gerenciamento de banco de dados distribuído que oferece recursos OLTP e OLAP e oferece compatibilidade com o protocolo MySQL ... Mas vamos falar sobre isso um após o outro.

TiDB como pai


Vamos começar com o projeto TiDB "pai", criado pela empresa chinesa PingCAP Inc.



O primeiro grande lançamento público deste DBMS - 1.0 - ocorreu menos de um ano atrás. Suas principais características são “hibridismo”, combinando processamento de dados transacionais e analíticos (processamento transacional / analítico híbrido, HTAP), bem como a compatibilidade já mencionada com o protocolo MySQL. Uma imagem mais completa do TiDB surge ao mencionar outros recursos que já são comuns para novos DBMSs, como escalabilidade horizontal, alta disponibilidade e conformidade estrita com o ACID.

A arquitetura geral do TiDB é a seguinte:



Como o TiDB oferece escalabilidade NoSQL e garantias ACID, ele é classificado como NewSQL . Os autores não escondem o fato de terem criado o produto sob a inspiração de outros representantes do NewSQL: Google Spanner e F1 . No entanto, os desenvolvedores chineses insistiram em "suas melhores práticas e soluções ao escolher a tecnologia". Em particular, eles escolheram um algoritmo para resolver problemas de consenso do Raft (em vez do Paxos , que é usado no Spanner), armazenamento RocksDB (em vez de um sistema de arquivos distribuído) e Go (e Rust) como linguagem de programação.

Muitos detalhes sobre o dispositivo TiDB podem ser encontrados no relatório “ How build build TiDB ” do co-fundador e CEO da PingCAP - Max Liu - e retornaremos a alguns deles intimamente relacionados ao TiKV. O código-fonte TiDB é distribuído sob a Licença Apache gratuita v2. Entre seus principais usuários , Lenovo, Meizu, Banco de Pequim, Banco Industrial e Comercial da China, etc. são mencionados.

O que é o TiKV e qual o papel do TiDB (e não apenas) no mundo?

Arquitetura e recursos do TiKV


Vamos voltar à arquitetura geral do TiDB, em uma apresentação ligeiramente diferente:



Você pode ver que o próprio TiDB fornece implementação SQL e compatibilidade com MySQL *, enquanto o restante do trabalho é atribuído ao cluster TiKV. O que é esse "resto do trabalho"? Aqui está um diagrama mais detalhado:



* Em duas fotos sobre a camada de compatibilidade com o MySQL no TiDB.
A conversão de tabelas em valor-chave ocorre para que, a partir das consultas:

INSERT INTO user VALUES (1, "bob", "huang@pingcap.com"); INSERT INTO user VALUES (2, "tom", "tom@pingcap.com"); 

... acontece:



Os índices no TiDB são pares comuns, cujos valores indicam uma linha de dados:



Explicações para o esquema TiKV:

  • API KV - um conjunto de interfaces de programa para gravação / leitura de dados;
  • Coprocessador - uma estrutura de coprocessador para suportar computação distribuída (comparada com a mesma para o HBase);
  • Transação - um modelo de transação semelhante ao Google Percolator (protocolo de confirmação em 2 fases; usa alocador de carimbo de data / hora; veja também comparação com o Spanner );
  • MVCC (MultiVersion Concurrency Control) para leitura sem bloqueios e transações ACID (os dados são marcados com versões; quaisquer alterações feitas na transação atual não são visíveis para outras transações até o momento da confirmação);
  • Raft KV - o já mencionado algoritmo Raft usado para dimensionamento horizontal e consistência dos dados; sua implementação no Rust é portada do etcd (verificada por exploração extensiva); A propósito, os autores do TiKV declararam "escalabilidade simples para mais de 100 TB de dados";
  • RocksDB - armazenamento local do tipo de valor-chave, também já bem estabelecido em projetos de produção em larga escala (Facebook);
  • Driver de posicionamento - o "cérebro" do cluster, criado de acordo com o conceito do Google Spanner e responsável por armazenar metadados sobre as regiões, suportando o número necessário de réplicas e até a distribuição de carga (usando o Raft).



Se generalizarmos as interconexões dos componentes principais, obtemos o seguinte:

  • Cada nó do cluster TiKV possui um ou mais repositórios (RocksDB).
  • Cada repositório tem muitas regiões .
  • Uma região é uma "unidade básica de movimentação de dados com valores-chave", é replicada (usando o Raft) para muitos nós. Esses conjuntos de réplicas formam grupos de jangada .
  • Por fim, o Placement Driver que gerencia esse cluster, como você pode ver, é um cluster.

Instalação e teste de TiKV


A base de código TiKV é escrita principalmente no Rust, mas também possui vários componentes de terceiros em outros idiomas (RocksDB em C ++ e gRPC no Go). Distribuído sob a mesma licença gratuita do Apache v2.

Conforme mencionado no início do artigo, o TiKV apareceu inicialmente como um componente importante do TiDB, mas hoje pode ser operado dentro deste DBMS e separadamente. (Mas, em qualquer caso, sua operação requer um driver de posicionamento escrito em Go e distribuído como um componente separado).

A instrução mais curta para iniciar o TiKV junto com o DBMS do TiDB requer Git, Docker (17.03+), Docker Compose (1.6.0+), MySQL Client e se resume ao seguinte:

 git clone https://github.com/pingcap/tidb-docker-compose.git cd tidb-docker-compose && docker-compose pull docker-compose up -d 

O resultado desses comandos será a implantação de um cluster TiDB, que por padrão consiste nos seguintes componentes:

  • 1 cópia do TiDB real;
  • 3 cópias de TiKV;
  • 3 instâncias do driver de posicionamento;
  • Prometeu e Grafana (para monitoramento e gráficos) ;
  • 2 cópias (master + slave) TiSpark (camada para iniciar o Apache Spark em cima do TiDB / TiKV para executar solicitações OLAP complexas) ;
  • 1 instância do TiDB-Vision (para visualização do driver de posicionamento) .

Trabalho adicional com o DBMS expandido:

  • conexão via cliente MySQL: mysql -h 127.0.0.1 -P 4000 -u root ;
  • Interface da web da Grafana para exibir o status do cluster - http://localhost:3000 em admin / admin;
  • Interface da web TiDB-Vision para obter informações sobre balanceamento de carga em um cluster e migração de dados por nós - http://localhost:8010 ;
  • Interface da web do Spark - http://localhost:8080 (acesso ao TiSpark - através do spark://127.0.0.1:7077 ).

Se você deseja um cluster TiDB não muito padrão (ou seja, redimensioná-lo, as imagens do Docker usadas, portas etc.), depois de clonar o repositório tidb-docker-compose , você pode editar a configuração do Docker Compose:

 $ cd tidb-docker-compose $ vi compose/values.yaml $ helm template compose > generated-docker-compose.yaml $ docker-compose -f generated-docker-compose.yaml pull $ docker-compose -f generated-docker-compose.yaml up -d 

Para obter ainda mais personalização, consulte “ Personalizar o TiDB Cluster ” para obter informações sobre de onde vêm as configurações do TiDB, TiKV, Placement Driver e outras especificações.

Para uma implantação conveniente do TiDB no cluster Kubernetes, o operador com o mesmo nome foi preparado - Operador TiDB . Está nos gráficos do Helm, portanto, a instalação pode ser reduzida aos seguintes comandos (slide da apresentação no TiDB DevConf 2018):



A propósito, a mesma apresentação fala sobre as opiniões dos desenvolvedores de TiDB sobre o monitoramento desse DBMS. Infelizmente, a descrição do texto está em chinês, mas uma idéia geral pode ser obtida nesses slides:




Retornando ao tópico diretamente TiKV - este projeto publicou seus guias de lançamento para fins de teste:


E para a implantação do TiKV na produção, há desenvolvimentos prontos com o Ansible - novamente, com e sem o TiDB .

Finalmente, como as interfaces para trabalhar com o TiKV são oferecidas:


Os planos dos desenvolvedores também incluem a criação de um cliente no Rust.

Sumário


Tendo surgido como um componente de um projeto maior de código aberto de uma empresa chinesa, a TiKV já conseguiu ganhar fama em círculos bastante amplos. As estatísticas do GitHub mostram não apenas mais de 3600 estrelas, mas também quase 500 garfos e quase 100 colaboradores (embora apenas duas dúzias deles tenham feito mais de 10 confirmações).

Associar a TiKV ao número de projetos CNCF e o fato de este ser o primeiro projeto desse tipo também indica claramente o reconhecimento do produto pela comunidade nativa da nuvem ... e deve incentivar o desenvolvimento mais ativo de sua base de códigos por terceiros (ou seja, fora da empresa-mãe e do DBMS ) por especialistas.

PS


Leia também em nosso blog:

Source: https://habr.com/ru/post/pt421903/


All Articles