分布式数据库大多可以分为两种架构风格,一种是 NewSQL,它的代表系统是 Google Spanner;另一种是从单体数据库中间件基础上演进出来的,被称为 Prxoy 风格,没有公认的代表系统,选了一个出现较早的产品来指代这种风格,这就是 PostgreSQL-XC(下文简称 PGXC)。
数据库的基本架构
- 客户端通讯管理器。这是应用开发者能够直观感受到的模块,通常我们使用 JDBC 或者 ODBC 协议访问数据库时,连接的就是这个部分。
- 进程管理器。连接建好了,数据库会为客户端分配一个进程,客户端后续发送的所有操作都会通过对应的进程来执行。
- 查询处理器。首先是解析器,它将接收到的 SQL 解析为内部的语法树。然后是查询重写(Query Rewrite),它也被称为逻辑优化,主要是依据关系代数的等价变换,达到简化和标准化的目的,比如会消除重复条件或去掉一些无意义谓词 ,还有将视图替换为表等操作。再往后就是查询算法优化(Query Optimizer),它也被称为物理优化,主要是根据表连接方式、连接顺序和排序等技术进行优化,我们常说的基于规则优化(RBO)和基于代价优化(CBO)就在这部分。最后就是计划执行器(Plan Executor),最终执行查询计划,访问存储系统。
- 事务存储管理器。它包括四个部分,其中访问方式(Access Methods)是指数据在磁盘的具体存储形式。锁管理(Lock Manager)是指并发控制。日志管理(Log Manager)是确保数据的持久性。缓存管理(Buffer Manager)则是指 I/O 操作相关的缓存控制。
- 共享组件和工具。在整个过程中还会涉及到的一些辅助操作,当然它们对于数据库的运行也是非常重要的。
PGXC:单体数据库的自然演进
由分库分表演化而来,通过分库分表,提升写入性能。分库分表方案就是在多个单体数据库之前增加代理节点,本质上是增加了 SQL 路由功能。
随着分布式事务和跨节点查询等功能的加入,代理节点已经不再只是简单的路由功能,更多时候会被称为协调节点。
PGXC 区别于单体数据库的功能也就介绍完整了,它们是分片、分布式事务、跨节点查询和全局时钟。
NewSQL:革命性的新架构
NewSQL 的基础是 NoSQL,更具体地说,是类似 BigTable 的分布式键值(K/V)系统。
高可靠机制的变化在于,放弃了粒度更大的主从复制,转而以分片为单位采用 Paxos 或 Raft 等共识算法。
存储引擎层面,则是使用 LSM-Tree 模型替换 B+ Tree 模型,大幅提升了写入性能。
主要的工作负载由计算节点和存储节点承担,另外由管理节点承担全局时钟和分片信息管理功能。
此文章为6月Day6学习笔记,内容来源于极客时间《分布式数据库30讲》