TiKV - database nilai kunci terdistribusi untuk cloud asli



Pada 28 Agustus, CNCF (Cloud Native Computing Foundation), di belakang Kubernetes, Prometheus, dan proyek Open Source lainnya untuk aplikasi cloud modern, mengumumkan adopsi produk baru di kotak pasirnya - TiKV .

Basis data transaksi nilai kunci yang terdistribusi ini lahir sebagai tambahan TiDB , sistem manajemen basis data terdistribusi yang menawarkan kemampuan OLTP dan OLAP dan menyediakan kompatibilitas dengan protokol MySQL ... Tetapi mari kita bicarakan satu per satu.

TiDB sebagai orangtua


Mari kita mulai dengan proyek "induk" TiDB yang dibuat oleh perusahaan China PingCAP Inc.



Rilis publik besar pertama dari DBMS ini - 1.0 - berlangsung kurang dari setahun yang lalu. Fitur utamanya adalah "hibriditas", menggabungkan pemrosesan data transaksional dan analitik (Hybrid Transactional / Analytical Processing, HTAP), serta kompatibilitas yang sudah disebutkan dengan protokol MySQL. Gambaran TiDB yang lebih lengkap muncul ketika menyebutkan fitur lain yang sudah biasa untuk DBMS baru, seperti skalabilitas horizontal, ketersediaan tinggi, dan kepatuhan ACID yang ketat.

Arsitektur umum TiDB adalah sebagai berikut:



Karena TiDB menawarkan skalabilitas NoSQL dan jaminan ACID, itu dikategorikan sebagai NewSQL . Para penulis tidak menyembunyikan fakta bahwa mereka menciptakan produk di bawah inspirasi dari perwakilan NewSQL lainnya: Google Spanner dan F1 . Namun, pengembang China bersikeras "praktik terbaik dan solusi mereka ketika memilih teknologi." Secara khusus, mereka memilih algoritma untuk memecahkan masalah konsensus Raft (bukan Paxos , yang digunakan dalam Spanner), penyimpanan RocksDB (bukan sistem file terdistribusi), dan Go (dan Rust) sebagai bahasa pemrograman.

Banyak detail tentang perangkat TiDB dapat ditemukan dalam laporan " Bagaimana kami membangun TiDB " dari salah satu pendiri dan CEO PingCAP - Max Liu - dan kami akan kembali ke beberapa dari mereka yang terkait erat dengan TiKV. Kode sumber TiDB didistribusikan di bawah Lisensi Apache v2 gratis. Di antara pengguna utamanya , Lenovo, Meizu, Bank Beijing, Bank Industri dan Komersial China, dll. Disebutkan.

Apa itu TiKV dan peran apa yang dimainkan TiDB (dan tidak hanya) di dunia?

Arsitektur dan Fitur TiKV


Mari kita kembali ke arsitektur umum TiDB, dalam presentasi yang sedikit berbeda:



Anda dapat melihat bahwa TiDB itu sendiri menyediakan implementasi SQL dan kompatibilitas MySQL *, sementara sisa pekerjaan ditugaskan ke cluster TiKV. Apa "sisa pekerjaan" ini? Berikut adalah diagram yang lebih rinci:



* Dalam dua gambar tentang lapisan kompatibilitas dengan MySQL di TiDB.
Konversi tabel ke nilai kunci terjadi sehingga dari kueri:

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

... ternyata:



Indeks dalam TiDB adalah pasangan biasa, nilai-nilainya menunjukkan garis data:



Penjelasan untuk skema TiKV:

  • KV API - satu set antarmuka program untuk menulis / membaca data;
  • Coprocessor - kerangka kerja coprocessor untuk mendukung komputasi terdistribusi (dibandingkan dengan HBase yang sama);
  • Transaction - model transaksi yang mirip dengan Google Percolator (komit protokol dalam 2 fase; gunakan alokasi timestamp; lihat juga perbandingan dengan Spanner );
  • MVCC (MultiVersion Concurrency Control) untuk membaca tanpa kunci dan transaksi ACID (data ditandai dengan versi; setiap perubahan yang dibuat dalam transaksi saat ini tidak dapat dilihat oleh transaksi lain sampai waktu komit);
  • Raft KV - algoritma Raft yang telah disebutkan digunakan untuk penskalaan horizontal dan konsistensi data; implementasinya di Rust porting dari etcd (diverifikasi oleh eksploitasi yang luas); Omong-omong, penulis TiKV menyatakan "skalabilitas sederhana hingga 100+ TB data";
  • RocksDB - penyimpanan lokal tipe kunci-nilai, juga sudah mapan dalam proyek-proyek berskala besar dalam produksi (Facebook);
  • Penempatan Driver - "otak" dari cluster, dibuat sesuai dengan konsep Google Spanner dan bertanggung jawab untuk menyimpan metadata tentang daerah, mendukung jumlah replika yang diperlukan, bahkan memuat distribusi (menggunakan Rakit).



Jika kita menggeneralisasi interkoneksi dari komponen utama, kita mendapatkan yang berikut:

  • Setiap node kluster TiKV memiliki satu atau lebih repositori (RocksDB).
  • Setiap repositori memiliki banyak wilayah .
  • Suatu wilayah adalah "unit dasar dari pergerakan data nilai-kunci", ini direplikasi (menggunakan Raft) ke banyak node. Set replika tersebut membentuk grup Raft .
  • Akhirnya, Pengemudi Penempatan yang mengelola kluster ini, seperti yang Anda lihat, adalah kluster itu sendiri.

Instalasi dan pengujian TiKV


Basis kode TiKV ditulis terutama dalam Rust, tetapi juga memiliki beberapa komponen pihak ketiga dalam bahasa lain (RocksDB dalam C ++ dan gRPC in Go). Didistribusikan di bawah Apache License v2 gratis yang sama.

Seperti yang disebutkan di awal artikel, TiKV awalnya muncul sebagai komponen penting dari TiDB, tetapi hari ini dapat dioperasikan baik dalam DBMS ini dan secara terpisah. (Tetapi dalam hal apa pun, operasinya memerlukan Driver Penempatan yang ditulis dalam Go dan didistribusikan sebagai komponen terpisah).

Instruksi terpendek untuk memulai TiKV bersama dengan TiMS DBMS membutuhkan Git, Docker (17.03+), Docker Compose (1.6.0+), Klien MySQL dan turun ke berikut ini:

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

Hasil dari perintah ini akan menjadi penyebaran cluster TiDB, yang secara default terdiri dari komponen-komponen berikut:

  • 1 salinan TiDB yang sebenarnya;
  • 3 salinan TiKV;
  • 3 contoh Driver Penempatan;
  • Prometheus dan Grafana (untuk pemantauan dan grafik) ;
  • 2 salinan (master + slave) dari TiSpark (lapisan untuk meluncurkan Apache Spark di atas TiDB / TiKV untuk melakukan permintaan OLAP yang kompleks) ;
  • 1 instance TiDB-Vision (untuk visualisasi Driver Penempatan) .

Pekerjaan lebih lanjut dengan DBMS yang diperluas:

  • koneksi melalui klien MySQL: mysql -h 127.0.0.1 -P 4000 -u root ;
  • Antarmuka web Grafana untuk melihat status kluster - http://localhost:3000 bawah admin / admin;
  • Antarmuka web TiDB-Vision untuk informasi tentang penyeimbangan beban dalam sebuah cluster dan migrasi data melalui node - http://localhost:8010 ;
  • Antarmuka web Spark - http://localhost:8080 (akses ke TiSpark - melalui spark://127.0.0.1:7077 ).

Jika Anda menginginkan kluster TiDB yang tidak terlalu standar (mis. Mengubah ukurannya, gambar Docker yang digunakan, port, dll.), Kemudian setelah kloning repositori tidb-docker-compose , Anda dapat mengedit konfigurasi untuk 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 

Untuk penyesuaian lebih lanjut, lihat β€œ Kustomisasi TiDB Cluster ” untuk informasi di mana konfigurasi untuk TiDB, TiKV, Driver Penempatan, dan spesifik lainnya berasal.

Untuk penyebaran TiDB yang nyaman ke kluster Kubernetes, operator dengan nama yang sama telah disiapkan - Operator TiDB . Itu ada di grafik Helm, sehingga instalasi dapat dikurangi menjadi perintah berikut (slide dari presentasi di TiDB DevConf 2018):



Omong-omong, presentasi yang sama berbicara tentang pandangan pengembang TiDB tentang pemantauan DBMS ini. Deskripsi teks, sayangnya, dalam bahasa Cina, tetapi ide umum dapat diperoleh dari slide ini:




Kembali ke topik langsung TiKV - proyek ini telah menerbitkan panduan peluncurannya untuk tujuan pengujian:


Dan untuk penyebaran TiKV dalam produksi, ada pengembangan siap pakai dengan Ansible - lagi, dengan dan tanpa TiDB .

Akhirnya, sebagai antarmuka untuk bekerja dengan TiKV ditawarkan:


Rencana pengembang juga termasuk membuat klien di Rust.

Ringkasan


Setelah muncul sebagai komponen proyek Open Source yang lebih besar dari perusahaan Cina, TiKV telah berhasil mendapatkan ketenaran di kalangan yang cukup luas. Statistik GitHub menunjukkan tidak hanya 3600+ bintang, tetapi juga hampir 500 fork, dan hampir 100 kontributor (walaupun hanya dua lusin dari mereka membuat lebih dari 10 komitmen).

Bergabungnya TiKV dengan jumlah proyek CNCF dan fakta bahwa ini adalah proyek pertama dari jenis ini juga jelas menunjukkan pengakuan produk oleh komunitas asli cloud ... dan harus memberikan dorongan untuk pengembangan yang lebih aktif dari basis kode oleh orang luar (mis. Di luar perusahaan induk dan DBMS-nya ) oleh spesialis.

PS


Baca juga di blog kami:

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


All Articles