YugabyteDB est une base de données SQL distribuée transactionnelle hautes performances pour les applications cloud natives , développée par Yugabyte.
Histoire
Yugabyte a été fondée par les anciens ingénieurs de Facebook Kannan Muthukkaruppan, Karthik Ranganathan et Mikhail Bautin. Chez Facebook, ils faisaient partie de l'équipe qui a construit et exploité Cassandra et HBase pour des charges de travail telles que Facebook Messenger et le magasin de données opérationnelles de Facebook .
Les fondateurs se sont réunis en février 2016 pour créer YugabyteDB.
YugabyteDB était initialement disponible en deux éditions : communautaire et entreprise. En juillet 2019, Yugabyte a rendu open source des fonctionnalités auparavant commerciales et a lancé YugabyteDB en open source sous la licence Apache 2.0.
Financement
En octobre 2021, cinq ans après la création de l'entreprise, Yugabyte a clôturé un tour de financement de série C de 188 millions de dollars pour devenir une start-up licorne avec une valorisation de 1,3 milliard de dollars
Architecture
YugabyteDB est une base de données SQL distribuée qui vise à être fortement cohérente sur le plan transactionnel dans toutes les zones de défaillance (c'est-à-dire la conformité ACID ). Les tests Jepsen, la norme industrielle de facto pour vérifier l'exactitude, n'ont jamais été complètement réussis, principalement en raison de conditions de concurrence lors des changements de schéma. En termes de théorème CAP , YugabyteDB est une base de données cohérente/tolérante aux partitions (CP).
YugabyteDB possède deux couches, un moteur de stockage appelé DocDB et la couche de requête Yugabyte.

Base de données DocDB
Le moteur de stockage se compose d'une base de données RocksDB personnalisée combinée à des algorithmes de partitionnement et d'équilibrage de charge pour les données. De plus, l' algorithme de consensus Raft contrôle la réplication des données entre les nœuds. Il existe également un gestionnaire de transactions distribuées et un contrôle de concurrence multiversion (MVCC) pour prendre en charge les transactions distribuées.
Le moteur exploite également une horloge logique hybride qui combine des horloges physiques grossièrement synchronisées avec des horloges de Lamport pour suivre les relations causales.
La couche DocDB n'est pas directement accessible aux utilisateurs.
Couche de requête YugabyteDB
Yugabyte dispose d'une couche de requête enfichable qui fait abstraction de la couche de requête de la couche de stockage située en dessous. Il existe actuellement deux API qui peuvent accéder à la base de données :
YSQL est une API compatible avec le code PostgreSQL basée sur la version 11.2. YSQL est accessible via des pilotes PostgreSQL standard utilisant des protocoles natifs. Il exploite le code PostgreSQL natif pour la couche de requête et remplace le moteur de stockage par des appels à la couche de requête enfichable. Cette réutilisation signifie que Yugabyte prend en charge de nombreuses fonctionnalités, notamment :
- Déclencheurs et procédures stockées
- Extensions PostgreSQL qui fonctionnent dans la couche de requête
- Prise en charge native de JSONB
YCQL est une API de type Cassandra basée sur la version 3.10 et réécrite en C++. On accède à YCQL via les pilotes Cassandra standard en utilisant le port de protocole natif 9042. En plus des composants Cassandra « vanilla », YCQL est enrichi des fonctionnalités suivantes :
- Cohérence transactionnelle - contrairement à Cassandra, Yugabyte YCQL est transactionnel.
- Types de données JSON pris en charge nativement
- Les tables peuvent avoir des index secondaires
Actuellement, les données écrites dans l'une ou l'autre API ne sont pas accessibles via l'autre API, mais YSQL peut accéder à YCQL à l'aide de la fonctionnalité d'encapsulation de données étrangères de PostgreSQL.
Le modèle de sécurité pour accéder au système est hérité de l'API, donc les contrôles d'accès pour YSQL ressemblent à PostgreSQL, et YCQL ressemble aux contrôles d'accès Cassandra.
Réplication de cluster à cluster
En plus de sa fonctionnalité principale de distribution d'une base de données unique, YugabyteDB a la capacité de répliquer entre les instances de base de données. La réplication peut être unidirectionnelle ou bidirectionnelle et est asynchrone. La réplication unidirectionnelle est utilisée soit pour créer une copie en lecture seule pour le déchargement de la charge de travail, soit en mode lecture-écriture pour créer une veille active-passive. La réplication bidirectionnelle est généralement utilisée dans les configurations en lecture-écriture et est utilisée pour les configurations actives-actives, les applications géo-distribuées, etc.
Outils de migration
Yugabyte fournit également YugabyteDB Voyager, un outil permettant de faciliter la migration d' Oracle et d'autres bases de données similaires vers YugabyteDB. Cet outil prend en charge la migration des schémas, du code procédural et des données de la plateforme source vers YugabyteDB.