Greenplum 架构
Greenplum 整体架构
Greenplum 本质上是单机Postgres组成的数据库集群,对外提供统一的数据库接口,并针对集群处理做了大量优化
基于MPP无共享拓扑
数据分片 分区 分表 分库
分片:分布到不同的节点
分区:概念比较广泛,水平分区、垂直分区
0. 系统空闲状态
postmaster 是数据库主进程,监控用户请求
1. 客户端建立会话连接
客户端通过libpq协议发送连接请求给Greenplum master节点
master节点上postmaster进程会监听连接请求,并处理
2. Master fork 一个进程处理客户端请求
master节点上的postmaster进程监听到连接请求后,fork一个子进程用于处理该客户端的所有查询请求
子进程在Postgres中称为backend,在Greenplum中称为QD
3. QD建立和Segment的连接
QD进程使用libpq协议和每个segment建立连接请求
Segment上的postmater进程监听到QD的连接请求,并进行处理
对于segment而言,QD就是他们的客户端
仅有在需要时QD才会建立和segment的连接
4. Segment fork 一个子进程处理QD的连接请求
Segment上的postmaster进程监听到QD的连接后,创建一个子进程以处理后续查询请求
Segment上创建的子进程称为QE
5. 查询请求通过QD发送给QE进程
客户端使用libpq系以发送查询给master上的QD进程
QD进程对收到的查询进行处理,包括解析、优化生活次呢个分布式查询计划等
6. QD发送任务给QE
QD生成分布式查询计划后,通过libpq协议发送给各个segment的QE进程
7. QD和QEs建立数据通信通道
QD和每个segment上的QEs根据查询计划里面的信息,建立interconnect连接
Interconnect用用户内部数据通信
Libpq用于控制命令和结果返回
8. QE各司其职
每个QE执行分配给它的任务
QE之间通过interconnect交互数据
9. QE状态管理
QE和QD之间通过libpq协议进行状态更新和管理,包括错误处理等
QE之间没有libpq连接
10. QD返回查询结果给客户端
最终QD将查询的结果返回给客户端
11. 算子并行化
PostgreSQL 是进程模型,为每个查询创建单个进程进行处理为了提高CPU利用率,Greenplum实现了Segment内算子之间查询并行化
用户查询在单个Segment上可以有多个QE,QE之间通过interconnect交互数据
存储管理
索引
查询执行
事务与日志