
Le 28 août, la CNCF (Cloud Native Computing Foundation), derrière Kubernetes, Prometheus, et d'autres projets Open Source pour des applications cloud modernes, a
annoncé l'adoption d'un nouveau produit dans son bac à sable -
TiKV .
Cette base de données transactionnelle distribuée à valeur-clé est née en complément de
TiDB , un système de gestion de base de données distribuée qui offre des capacités OLTP et OLAP et offre une compatibilité avec le protocole MySQL ... Mais parlons-en les uns après les autres.
TiDB en tant que parent
Commençons par le projet TiDB «parent» créé par la société chinoise PingCAP Inc.

La première version publique majeure de ce SGBD - 1.0 - a
eu lieu il y a moins d'un an. Ses principales caractéristiques sont «l'hybridité», combinant le traitement transactionnel et analytique des données (Hybrid Transactional / Analytical Processing, HTAP), ainsi que la compatibilité déjà mentionnée avec le protocole MySQL. Une image plus complète de TiDB apparaît lorsque l'on mentionne d'autres fonctionnalités - déjà courantes pour les nouveaux SGBD -, telles que l'évolutivité horizontale, la haute disponibilité et la stricte conformité ACID.
L'architecture générale de TiDB est la suivante:

Parce que TiDB offre une évolutivité NoSQL et des garanties ACID, il est classé comme
NewSQL . Les auteurs ne cachent pas le fait qu'ils ont créé le produit sous l'inspiration d'autres représentants de NewSQL:
Google Spanner et
F1 . Cependant, les développeurs chinois ont insisté sur "leurs meilleures pratiques et solutions lors du choix de la technologie". En particulier, ils ont choisi un algorithme pour résoudre les problèmes de consensus
Raft (au lieu de
Paxos , qui est utilisé dans Spanner), le stockage
RocksDB (au lieu d'un système de fichiers distribué) et Go (et Rust) comme langage de programmation.
De nombreux détails sur l'appareil TiDB peuvent être trouvés dans le rapport «
Comment nous construisons TiDB » du co-fondateur et PDG de PingCAP - Max Liu - et nous reviendrons sur certains d'entre eux étroitement liés à TiKV. Le code source de TiDB est
distribué sous la licence gratuite Apache v2. Parmi ses
principaux utilisateurs , Lenovo, Meizu, Bank of Beijing, Industrial and Commercial Bank of China, etc. sont mentionnés.
Qu'est-ce que TiKV et quel rôle joue TiDB (et pas seulement) dans le monde?
Architecture et fonctionnalités de TiKV
Revenons à l'architecture générale de TiDB, dans une présentation légèrement différente:

Vous pouvez voir que TiDB lui-même fournit l'implémentation SQL et la compatibilité MySQL *, tandis que le reste du travail est affecté au cluster TiKV. Qu'est-ce que ce «reste de travail»? Voici un schéma plus détaillé:

* En deux images sur la couche de compatibilité avec MySQL dans TiDB.La conversion des tables en valeur-clé se produit de sorte qu'à partir des requêtes:
INSERT INTO user VALUES (1, "bob", "huang@pingcap.com"); INSERT INTO user VALUES (2, "tom", "tom@pingcap.com");
... il s'avère:

Les index dans TiDB sont des paires ordinaires, dont les valeurs indiquent une ligne de données:

Explications pour le schéma TiKV:
- API KV - un ensemble d'interfaces de programme pour écrire / lire des données;
- Coprocesseur - un cadre de coprocesseur pour prendre en charge l'informatique distribuée (par rapport à la même chose pour HBase);
- Transaction - un modèle de transaction similaire à Google Percolator (protocole de validation en 2 phases; utilise l'allocateur d'horodatage; voir également la comparaison avec Spanner );
- MVCC (MultiVersion Concurrency Control) pour la lecture sans verrous et transactions ACID (les données sont étiquetées avec les versions; toutes les modifications apportées à la transaction en cours ne sont pas visibles par les autres transactions jusqu'au moment de la validation);
- Raft KV - l'algorithme Raft déjà mentionné utilisé pour la mise à l'échelle horizontale et la cohérence des données; son implémentation dans Rust est portée depuis etcd (vérifiée par une exploitation extensive); Soit dit en passant, les auteurs de TiKV ont déclaré "une évolutivité simple à plus de 100 To de données";
- RocksDB - stockage local de type valeur-clé, également déjà bien implanté dans des projets à grande échelle en production (Facebook);
- Placement Driver - le «cerveau» du cluster, créé selon le concept de Google Spanner et responsable du stockage des métadonnées sur les régions, prenant en charge le nombre requis de répliques, même la distribution de la charge (à l'aide de Raft).

Si nous généralisons les interconnexions des principaux composants, nous obtenons ce qui suit:
- Chaque nœud de cluster TiKV possède un ou plusieurs référentiels (RocksDB).
- Chaque référentiel possède de nombreuses régions .
- Une région est une «unité de base de mouvement de données de valeur-clé», elle est répliquée (à l'aide de Raft) sur de nombreux nœuds. Ces ensembles de répliques forment des groupes de radeaux .
- Enfin, le pilote de placement gérant ce cluster, comme vous pouvez le voir, est lui-même un cluster.
Installation et test de TiKV
La base de code TiKV est écrite principalement en Rust, mais possède également plusieurs composants tiers dans d'autres langages (RocksDB en C ++ et gRPC en Go).
Distribué sous la même licence Apache gratuite v2.
Comme mentionné au début de l'article, TiKV est initialement apparu comme un composant important de TiDB, mais aujourd'hui, il peut être utilisé à la fois dans ce SGBD et séparément. (Mais dans tous les cas, son fonctionnement nécessite un
pilote de placement écrit en Go et distribué en tant que composant distinct).
L'
instruction la plus courte pour
démarrer TiKV avec le SGBD TiDB nécessite Git, Docker (17.03+), Docker Compose (1.6.0+), MySQL Client et se résume à ce qui suit:
git clone https://github.com/pingcap/tidb-docker-compose.git cd tidb-docker-compose && docker-compose pull docker-compose up -d
Le résultat de ces commandes sera le déploiement d'un cluster TiDB, qui se compose par défaut des composants suivants:
- 1 copie de la TiDB réelle;
- 3 copies de TiKV;
- 3 instances de pilote de placement;
- Prométhée et Grafana (pour la surveillance et les graphiques) ;
- 2 copies (maître + esclave) de TiSpark (couche pour lancer Apache Spark au-dessus de TiDB / TiKV pour effectuer des requêtes OLAP complexes) ;
- 1 instance de TiDB-Vision (pour la visualisation du pilote de placement) .
Poursuite du travail avec le SGBD étendu:
- connexion via le client MySQL:
mysql -h 127.0.0.1 -P 4000 -u root
; - Interface Web Grafana pour afficher l'état du cluster -
http://localhost:3000
sous admin / admin; - Interface Web TiDB-Vision pour des informations sur l'équilibrage de charge dans un cluster et la migration des données sur les nœuds -
http://localhost:8010
; - Interface Web Spark -
http://localhost:8080
(accès à TiSpark - via spark://127.0.0.1:7077
).
Si vous souhaitez un
cluster TiDB pas tout à fait standard (c'est-à-dire changer sa taille, les images Docker utilisées, les ports, etc.), après avoir cloné le
référentiel tidb-docker-compose , vous pouvez modifier la configuration de 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
Pour encore plus de personnalisation, voir «
Personnaliser le cluster TiDB » pour plus d'informations sur l'origine des configurations pour TiDB, TiKV, le pilote de placement et d'autres spécificités.
Pour un
déploiement pratique
de TiDB sur le cluster Kubernetes, l' opérateur du même nom a été préparé -
TiDB Operator . Il est dans les graphiques Helm, donc l'installation peut être réduite aux commandes suivantes (diapositive de la
présentation à TiDB DevConf 2018):

Soit dit en passant, la même présentation parle des vues des développeurs TiDB sur la surveillance de ce SGBD. La description textuelle, malheureusement, est en chinois, mais une idée générale peut être obtenue à partir de ces diapositives:


Revenant directement au sujet TiKV - ce projet a publié ses guides de lancement à des fins de test:
Et pour le
déploiement de TiKV en production, il y a des développements prêts à l'emploi avec Ansible - encore une fois,
avec et
sans TiDB .
Enfin, comme des interfaces pour travailler avec TiKV sont proposées:
Les
plans des développeurs incluent également la création d'un client sur Rust.
Résumé
Ayant vu le jour dans le cadre d'un projet Open Source plus vaste d'une entreprise chinoise, TiKV a déjà réussi à se faire connaître dans des cercles assez larges.
Les statistiques GitHub montrent non seulement plus de 3600 étoiles, mais aussi près de 500 fourchettes et près de 100 contributeurs (bien que seulement deux douzaines d'entre elles aient fait plus de 10 commits).
Rejoindre TiKV au nombre
de projets CNCF et le fait qu'il
s'agisse du premier projet de ce type indique également clairement la reconnaissance du produit par la communauté native du cloud ... et devrait donner une impulsion au développement plus actif de sa base de code par des tiers (c'est-à-dire en dehors de la maison mère et de son SGBD) ) par des spécialistes.
PS
Lisez aussi dans notre blog: