YugabyteDB是一个高性能、云原生的分布式SQL数据库,旨在支持所有的PostgreSQL特性。YugabyteDB最适合云原生的OLTP应用(实时性、企业级业务),这些应用需要绝对的数据库一致性并且至少需要如下特性中的一点:可扩展性、高容错性或全局分布式部署。
YugabyteDB的核心特性包括:
强大的RDBMS SQL能力(以下简称YSQL),重用了PostgreSQL的查询层(类似于 Amazon Aurora PostgreSQL),因此支持大多数PostgreSQL特性(数据类型、查询、表达式、操作符、函数、触发器、存储过程和插件等)。下面是YSQL目前支持的特性列表:https://github.com/yugabyte/yugabyte-db/blob/master/architecture/YSQL-Features-Supported.md
分布式事务:事务设计基于谷歌Spanner架构。通过Raft协议实现强一致性写入,并且通过"混合逻辑时钟"Hybrid Logical Clock (HLC)实现实例级的分布式ACID事务。同时支持快照和可序列化的隔离级别。读(查询)在默认情况下具有很强的一致性,但可以动态调整从追随者和读副本中读取。
持续可用性:YugabyteDB拥有强大的本地故障转移和修复能力,因此对于常见的故障自愈能力很强。YugabyteDB可以对磁盘、节点、分区、区域和云故障等自动容错。对于一个典型的部署方式:公有云上,跨多个可用区的单数据中心,RPO是0(意味着没有数据丢失),RTO 3秒(即故障节点可以在3秒内恢复提供服务)。
水平扩展性:只需向集群中添加节点即可横向扩展YugabyteDB,以实现更多的IOPS或数据存储。
跨地域、混合云:YugabyteDB可以部署在公有云中,也可以本地部署在Kubernetes中。YugabyteDB支持部署在跨三个或三个以上的区域,如多可用区、多中心、混合云部署。它还支持使用单向主从配置和双向多主配置的xCluster异步复制,这些配置可用于两个区域的部署。为了以更低的延迟提供服务,也支持副本读。
支持多种API:YugabyteDB的查询层是可扩展的。目前,YugabyteDB支持两种分布式SQL API:Yugabyte SQL(YSQL)(一种完全重用PostgreSQL查询层的关系型API)和Yugabyte Cloud QL(YCQL)(一种半关系型SQL的API,支持Document/Indexing)类似Apache Cassandra。
100%开源:YugabyteDB是基于Apache 2.0协议。开源版本也同样具有强大的企业特性,如分布式备份、静态数据加密、实时TLS加密、CDC、只读副本等。
架构
先看个整体

YSQL, a distributed SQL API wire compatible with PostgreSQL
YCQL, a semi-relational API built for high performance and massive scale, with its roots in Cassandra Query Language
Every YB-TServer is configured to support these protocols, on different ports. Port 5433 is the default port for YSQL and 9042 is the default port for YCQL.
Yugabyte 的查询层目前支持同时 SQL 和 CQL 两种 API,并且还会持续扩展,- -
其中 YCQL 是兼容 Cassandra 的一种方言语法,对应于文档数据库的存储模型;而 YSQL 是直接重写了PostgreSQL的查询层,魔改呀

存储层
见官网的这个例子,一个四节点的YugabyteDB集群,一张表被分成了16个tablet(tablet 是数据分布的最小单元),复制因子是3(对应peer1 、peer2、peer3)形成一个 Raft Group,通过 Raft 协议保证数据的高可用和持久性,tablet的副本均匀分布在各个node上,保证数据不会倾斜,Group Leader 负责处理所有的写入负载,其他 Follower 作为备份

其中tablet是基于Hash或者range而来,也可以先哈希再范围,tablet也可以理解为我们熟知的chunks,具体算法可以参考:https://docs.yugabyte.com/latest/architecture/docdb-sharding/sharding/#hash-sharding

YB-Master保存系统元数据和相关记录,例如系统中存在哪些表、它们的tablet在哪里、存在哪些用户和角色、与它们相关联的权限等等。它还负责协调后台工作(如负载平衡或数据重分布)和执行各种管理操作,如创建、修改和删除表。Master 本身也依靠 Raft 实现高可用。

每个 TServer 节点上的本地存储称为 DocDB。和 TiDB/Cockroach 一样,Yugabyte 也用 RocksDB 来做本地存储。




小结
先初步学习一下该分布式数据库,和TiDB、蟑螂数据库十分类似,不过可以兼容PostgreSQL协议,官方说是完美兼容,不过这个就当听一下吧,后续再实操把玩一下。
原文作者:PostgreSQL学徒;如有侵权,请联系管理员删除。