
El 28 de agosto, la CNCF (Cloud Native Computing Foundation), detrás de Kubernetes, Prometheus y otros proyectos de código abierto para aplicaciones modernas en la nube,
anunció la adopción de un nuevo producto en su caja de arena:
TiKV .
Esta base de datos transaccional distribuida y de valor clave nació como una adición a
TiDB , un sistema de administración de bases de datos distribuidas que ofrece capacidades OLTP y OLAP y proporciona compatibilidad con el protocolo MySQL ... Pero hablemos una tras otra.
TiDB como padre
Comencemos con el proyecto TiDB "padre" creado por la compañía china PingCAP Inc.

La primera versión pública importante de este DBMS - 1.0 -
tuvo lugar hace menos de un año. Sus características principales son la "hibridación", que combina el procesamiento de datos transaccionales y analíticos (procesamiento transaccional / analítico híbrido, HTAP), así como la compatibilidad ya mencionada con el protocolo MySQL. Una imagen más completa de TiDB surge cuando se mencionan otras características que ya son comunes para los nuevos DBMS, como la escalabilidad horizontal, la alta disponibilidad y el estricto cumplimiento de ACID.
La arquitectura general de TiDB es la siguiente:

Debido a que TiDB ofrece escalabilidad NoSQL y garantías ACID, se clasifica como
NewSQL . Los autores no ocultan el hecho de que crearon el producto bajo la inspiración de otros representantes de NewSQL:
Google Spanner y
F1 . Sin embargo, los desarrolladores chinos insistieron en "sus mejores prácticas y soluciones al elegir la tecnología". En particular, eligieron un algoritmo para resolver los problemas de consenso de
Raft (en lugar de
Paxos , que se usa en Spanner), el almacenamiento
RocksDB (en lugar de un sistema de archivos distribuido) y Go (y Rust) como lenguaje de programación.
Se pueden encontrar muchos detalles sobre el dispositivo TiDB en el informe "
Cómo construimos TiDB " del cofundador y CEO de PingCAP, Max Liu, y volveremos a algunos de ellos estrechamente relacionados con TiKV. El código fuente de TiDB se
distribuye bajo la licencia gratuita de Apache v2. Entre sus
principales usuarios , se mencionan Lenovo, Meizu, Bank of Beijing, Industrial and Commercial Bank of China, etc.
¿Qué es TiKV y qué papel juega TiDB (y no solo) en el mundo?
Arquitectura y características de TiKV
Volvamos a la arquitectura general de TiDB, en una presentación ligeramente diferente:

Puede ver que TiDB proporciona implementación de SQL y compatibilidad con MySQL *, mientras que el resto del trabajo se asigna al clúster TiKV. ¿Qué es este "resto del trabajo"? Aquí hay un diagrama más detallado:

* En dos imágenes sobre la capa de compatibilidad con MySQL en TiDB.La conversión de tablas a clave-valor ocurre de modo que a partir de las consultas:
INSERT INTO user VALUES (1, "bob", "huang@pingcap.com"); INSERT INTO user VALUES (2, "tom", "tom@pingcap.com");
... resulta que:

Los índices en TiDB son pares ordinarios, cuyos valores indican una línea de datos:

Explicaciones para el esquema TiKV:
- KV API : un conjunto de interfaces de programa para escribir / leer datos;
- Coprocesador : un marco de coprocesador para admitir la informática distribuida (en comparación con el mismo para HBase);
- Transacción : un modelo de transacción similar a Google Percolator (protocolo de confirmación en 2 fases; utiliza un asignador de marca de tiempo; consulte también la comparación con Spanner );
- MVCC (MultiVersion Concurrency Control) para leer sin bloqueos y transacciones ACID (los datos se etiquetan con versiones; los cambios realizados en la transacción actual no son visibles para otras transacciones hasta el momento de la confirmación);
- Raft KV : el algoritmo de Raft ya mencionado que se utiliza para la escala horizontal y la coherencia de datos; su implementación en Rust es portada desde etcd (verificado por una extensa explotación); Por cierto, los autores de TiKV declararon "escalabilidad simple a más de 100 TB de datos";
- RocksDB : almacenamiento local de tipo clave-valor, también bien establecido en proyectos de producción a gran escala (Facebook);
- Controlador de ubicación : el "cerebro" del clúster, creado de acuerdo con el concepto de Google Spanner y responsable de almacenar metadatos sobre las regiones, admitiendo el número requerido de réplicas, incluso la distribución de carga (usando Raft).

Si generalizamos las interconexiones de los componentes principales, obtenemos lo siguiente:
- Cada nodo del clúster TiKV tiene uno o más repositorios (RocksDB).
- Cada repositorio tiene muchas regiones .
- Una región es una "unidad básica de movimiento de datos de valor clave", se replica (usando Raft) en muchos nodos. Tales conjuntos de réplicas forman grupos de balsa .
- Finalmente, el controlador de ubicación que administra este clúster, como puede ver, es en sí mismo un clúster.
Instalación y prueba de TiKV
La base de código TiKV está escrita principalmente en Rust, pero también tiene varios componentes de terceros en otros idiomas (RocksDB en C ++ y gRPC en Go).
Distribuido bajo la misma licencia gratuita de Apache v2.
Como se mencionó al principio del artículo, TiKV apareció inicialmente como un componente importante de TiDB, pero hoy puede funcionar tanto dentro de este DBMS como por separado. (Pero en cualquier caso, su funcionamiento requiere un
controlador de ubicación escrito en Go y distribuido como un componente separado).
La
instrucción más corta para
iniciar TiKV junto con el DBMS TiDB requiere Git, Docker (17.03+), Docker Compose (1.6.0+), MySQL Client y se reduce a lo siguiente:
git clone https://github.com/pingcap/tidb-docker-compose.git cd tidb-docker-compose && docker-compose pull docker-compose up -d
El resultado de estos comandos será la implementación de un clúster TiDB, que por defecto consta de los siguientes componentes:
- 1 copia del TiDB real;
- 3 copias de TiKV;
- 3 instancias de Conductor de colocación;
- Prometeo y Grafana (para monitoreo y gráficos) ;
- 2 copias (maestro + esclavo) de TiSpark (capa para iniciar Apache Spark sobre TiDB / TiKV para realizar solicitudes OLAP complejas) ;
- 1 instancia de TiDB-Vision (para visualización del controlador de ubicación) .
Trabajo adicional con el DBMS ampliado:
- conexión a través del cliente MySQL:
mysql -h 127.0.0.1 -P 4000 -u root
; - Interfaz web de Grafana para ver el estado del clúster:
http://localhost:3000
en admin / admin; - Interfaz web TiDB-Vision para obtener información sobre el equilibrio de carga en un clúster y la migración de datos a través de nodos -
http://localhost:8010
; - Interfaz web de Spark -
http://localhost:8080
(acceso a TiSpark - a través de spark://127.0.0.1:7077
).
Si desea un
clúster TiDB no estándar (es decir, cambiar su tamaño, imágenes Docker utilizadas, puertos, etc.), luego de clonar el
repositorio tidb-docker-compose , puede editar la configuración para 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 obtener aún más personalización, consulte "
Personalizar el clúster de TiDB " para obtener información sobre de dónde provienen las configuraciones para TiDB, TiKV, Placement Driver y otros detalles.
Para una
implementación conveniente
de TiDB en el clúster de Kubernetes, se ha preparado
el operador del mismo nombre:
Operador TiDB . Está en los gráficos de Helm, por lo que la instalación se puede reducir a los siguientes comandos (diapositiva de la
presentación en TiDB DevConf 2018):

Por cierto, la misma presentación habla sobre las opiniones de los desarrolladores de TiDB sobre el monitoreo de este DBMS. La descripción del texto, desafortunadamente, está en chino, pero se puede obtener una idea general de estas diapositivas:


Volviendo al tema directamente TiKV: este proyecto ha publicado sus guías de lanzamiento con fines de prueba:
Y para el
despliegue de TiKV en producción, hay desarrollos listos para
usar con Ansible, nuevamente,
con y
sin TiDB .
Finalmente, como se ofrecen interfaces para trabajar con TiKV:
Los
planes de los desarrolladores también incluyen la creación de un cliente en Rust.
Resumen
Habiendo surgido como un componente de un proyecto Open Source más grande de una compañía china, TiKV ya ha logrado ganar fama en círculos bastante amplios.
Las estadísticas de GitHub muestran no solo más de 3600 estrellas, sino también casi 500 tenedores y casi 100 contribuyentes (aunque solo dos docenas de ellos realizaron más de 10 confirmaciones).
Unirse a TiKV en la cantidad
de proyectos de CNCF y el hecho de que este sea el primer proyecto de este tipo también indica claramente el reconocimiento del producto por parte de la comunidad nativa de la nube ... y debería impulsar un desarrollo más activo de su base de código por parte de personas externas (es decir, fuera de la empresa matriz y su DBMS ) por especialistas.
PS
Lea también en nuestro blog: