- PVSM.RU - https://www.pvsm.ru -
28 августа организация CNCF (Cloud Native Computing Foundation), стоящая за Kubernetes, Prometheus и другими Open Source-проектами для современных облачных приложений, объявила [1] о принятии нового продукта в свою «песочницу» — TiKV [2].
Эта распределённая, транзакционная база данных типа ключ-значение зародилась как дополнение к TiDB [3] — распределённой СУБД, которая предлагает возможности OLTP и OLAP и обеспечивает совместимость с протоколом MySQL… Но давайте обо всём по порядку.
Начнём с «родительского» проекта TiDB, созданного китайской компанией PingCAP Inc.
Первый крупный публичный релиз этой СУБД — 1.0 — состоялся [4] меньше года назад. Главные её особенности — «гибридность», совмещающая транзакционную и аналитическую обработку данных (Hybrid Transactional/Analytical Processing, HTAP), а также уже упомянутая совместимость с протоколом MySQL. Более полная картина TiDB возникает при упоминании других — уже обыденных для новых СУБД — фич, таких как горизонтальная масштабируемость, высокая доступность и строгое соответствие ACID.
Общая архитектура TiDB представляется следующим образом:
Поскольку TiDB предлагает масштабируемость NoSQL и гарантии по ACID, её относят к категории NewSQL. Авторы не скрывают, что создавали продукт под вдохновением от других представителей NewSQL: Google Spanner [5] и F1 [6]. Однако китайские разработчики настаивали на «своих лучших практиках и решениях при выборе технологий». В частности, они выбрали алгоритм для решения задач консенсуса Raft [7] (вместо Paxos [8], что используется в Spanner), хранилище RocksDB [9] (вместо распределённой файловой системы), а в качестве языка программирования — Go (и Rust).
Многие подробности об устройстве TiDB можно найти в докладе «How we build TiDB [10]» от соучредителя и генерального директора PingCAP — Max Liu, — а к некоторым из них, тесно связанным с TiKV, мы ещё вернёмся. Исходный код TiDB распространяется [3] под свободной лицензией Apache License v2. Среди её крупных пользователей [11] упоминаются Lenovo, Meizu, Bank of Beijing, Industrial and Commercial Bank of China и др.
Что же такое TiKV и какую роль играет в мире TiDB (и не только)?
Вернёмся к общей архитектуре TiDB, в чуть ином её представлении:
Можно увидеть, что сама TiDB обеспечивает реализацию SQL и совместимость с MySQL*, а остальную работу поручает кластеру TiKV. Что же это за «остальная работа»? Вот более подробная схема:
INSERT INTO user VALUES (1, "bob", "huang@pingcap.com");
INSERT INTO user VALUES (2, "tom", "tom@pingcap.com");
… получаются:
Индексы в TiDB — обычные пары, значения в которых указывают на строку с данными:
Пояснения к схеме TiKV:
Если обобщить взаимосвязи основных компонентов, то получится следующее:
Кодовая база TiKV написана преимущественно на Rust, но имеет и несколько сторонних компонентов на других языках (RocksDB на C++ и gRPC на Go). Распространяется [2] под той же свободной лицензией Apache License v2.
Как уже говорилось в начале статьи, TiKV изначально появился как важная составляющая TiDB, но на сегодняшний день может эксплуатироваться как в рамках этой СУБД, так и отдельно. (Но в любом случае для её работы потребуется Placement Driver [14], написанный на Go и распространяемый как отдельный компонент).
Самая короткая инструкция [15] для запуска TiKV вместе с СУБД TiDB требует наличия Git, Docker (17.03+), Docker Compose (1.6.0+), MySQL Client и сводится к следующей:
git clone https://github.com/pingcap/tidb-docker-compose.git
cd tidb-docker-compose && docker-compose pull
docker-compose up -d
Результатом выполнения этих команд станет развёртывание кластера TiDB, по умолчанию состоящего из следующих компонентов:
Дальнейшая работа с развёрнутой СУБД:
mysql -h 127.0.0.1 -P 4000 -u root
;http://localhost:3000
под admin/admin;http://localhost:8010
;http://localhost:8080
(доступ к TiSpark — через spark://127.0.0.1:7077
).Если же хочется не совсем стандартного кластера TiDB (т.е. изменить его размеры, используемые Docker-образы, порты и т.п.), то после клонирования репозитория tidb-docker-compose [18] можно отредактировать конфиг для 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
Для ещё большей кастомизации — см. «Customize TiDB Cluster [19]», где описана информация, откуда берутся конфиги для TiDB, TiKV, Placement Driver и другая специфика.
Для удобного деплоя TiDB в кластер Kubernetes подготовлен одноимённый оператор — TiDB Operator [20]. Он есть в Helm-чартах, поэтому установка может быть сведена к следующим командам (слайд из презентации [21] на TiDB DevConf 2018):
К слову, в той же презентации говорится о взгляде разработчиков TiDB на мониторинг этой СУБД. Текстовое описание, к сожалению, на китайском языке, но общее представление можно получить из этих слайдов:
Возвращаясь же к теме непосредственно TiKV — у этого проекты опубликованы свои руководства по запуску для тестовых целей:
А для деплоя TiKV в production есть готовые наработки с Ansible — опять же, с TiDB [26] и без неё [27].
Наконец, в качестве интерфейсов для работы с TiKV предлагаются:
В планах разработчиков [31] также значится создание клиента на Rust.
Зародившись как компонент более крупного Open Source-проекта китайской компании, TiKV уже успел завоевать известность в достаточно широких кругах. Статистика GitHub [32] свидетельствует не только о 3600+ звёздах, но и почти 500 форках, и почти 100 контрибьюторах (хотя более 10 коммитов сделали лишь два десятка из них).
Присоединение TiKV к числу проектов CNCF [33] и тот факт, что это первый проект подобного типа, тоже однозначно указывают на признание продукта сообществом cloud native… и должно придать импульс более активному развитию его кодовой базы сторонними (т.е. вне компании-основателя и её СУБД) специалистами.
Читайте также в нашем блоге:
Автор: shurup
Источник [39]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/291629
Ссылки в тексте:
[1] объявила: https://www.cncf.io/blog/2018/08/28/cncf-to-host-tikv-in-the-sandbox/
[2] TiKV: https://github.com/tikv/tikv
[3] TiDB: https://github.com/pingcap/tidb
[4] состоялся: https://www.nixp.ru/news/14205.html
[5] Google Spanner: https://en.wikipedia.org/wiki/Spanner_(database)
[6] F1: https://ai.google/research/pubs/pub38125
[7] Raft: https://raft.github.io/
[8] Paxos: https://en.wikipedia.org/wiki/Paxos_(computer_science)
[9] RocksDB: https://rocksdb.org/
[10] How we build TiDB: https://pingcap.com/blog/2016-10-17-how-we-build-tidb/
[11] крупных пользователей: https://github.com/pingcap/docs/blob/master/adopters.md
[12] Google Percolator: https://ai.google/research/pubs/pub36726
[13] сравнение со Spanner: https://blog.yugabyte.com/implementing-distributed-transactions-the-google-way-percolator-vs-spanner/
[14] Placement Driver: https://github.com/pingcap/pd
[15] инструкция: https://pingcap.com/docs/QUICKSTART/
[16] TiSpark: https://github.com/pingcap/tispark
[17] TiDB-Vision: https://github.com/pingcap/tidb-vision
[18] tidb-docker-compose: https://github.com/pingcap/tidb-docker-compose
[19] Customize TiDB Cluster: https://github.com/pingcap/tidb-docker-compose#customize-tidb-cluster
[20] TiDB Operator: https://github.com/pingcap/tidb-operator
[21] презентации: https://zhuanlan.zhihu.com/p/35048966
[22] вместе с TiDB: https://www.pingcap.com/docs/op-guide/docker-compose/
[23] с Docker Compose: https://www.pingcap.com/docs/tikv/deploy-tikv-docker-compose/
[24] с Docker: https://www.pingcap.com/docs/tikv/deploy-tikv-using-docker/
[25] как бинарник: https://www.pingcap.com/docs/tikv/deploy-tikv-using-binary/
[26] с TiDB: https://www.pingcap.com/docs/op-guide/ansible-deployment/
[27] без неё: https://www.pingcap.com/docs/tikv/deploy-tikv-using-ansible/
[28] клиент TiDB на Go: https://github.com/pingcap/tidb/tree/master/store/tikv
[29] Java-клиент TiSpark: https://github.com/pingcap/tispark/tree/master/tikv-client/src/main/java/com/pingcap/tikv
[30] два типа API для Go: https://www.pingcap.com/docs/tikv/go-client-api/
[31] планах разработчиков: https://github.com/tikv/tikv/blob/master/docs/ROADMAP.md
[32] Статистика GitHub: https://github.com/tikv/tikv/pulse
[33] проектов CNCF: https://www.cncf.io/projects/
[34] Знакомство с СУБД CockroachDB и создание отказоустойчивого кластера с ней на Ubuntu 16.04: https://habr.com/company/flant/blog/327640/
[35] Rook — „самообслуживаемое“ хранилище данных для Kubernetes: https://habr.com/company/flant/blog/348044/
[36] Ускоряем bootstrap больших баз данных с помощью Kubernetes: https://habr.com/company/flant/blog/417509/
[37] Путеводитель CNCF по решениям Open Source (и не только) для cloud native: https://habr.com/company/flant/blog/350928/
[38] Операторы для Kubernetes: как запускать stateful-приложения: https://habr.com/company/flant/blog/326414/
[39] Источник: https://habr.com/post/421903/?utm_campaign=421903
Нажмите здесь для печати.