Postgres-XL是一个可横向扩展的开源数据库集群,基于Postgres-XC,而Postgres-XC又是基于PostgreSql。PostgreSQL许可证是一种自由开源许可证,类似于BSD或MIT许可证。
Postgres-XL功能:
数据库集群;
可横向扩展;
提供多种表分片策略;
采用MPP架构模式(OLAP),可以与OLTP混合使用。
Postgres-XL特性:
可横向扩展的关系型数据库(RDBMS);
完成支持集群级别的ACID;
集群范围的一致性(MVCC);
即支持OLAP应用(MPP架构模式),也支持OLTP应用(读写性能扩展);
多租户安全;
支持分布式Key-Value存储、支持JSON和XML格式。
但是也存在一些不足的地方:
内部没有实现高可用机制,需要借助外部机制来实现高可用,如pg流复制、Corosync/Pacemaker等。
增删节点/重新分片数据(re-shard)的比较复杂。
数据重分布(redistribution)期间会锁表。
某些外键、唯一性约束功能欠缺
Postgres-XL架构图
主要由GTM、GTM-Proxy、Coordinator、Datanode几个部分组成。
全局事务管理器GTM
全集群只有一个GTM节点,为了防止该节点出现单点故障影响整个集群,需要配置备节点来保证高可用。
可以通过部署GTM Proxy,来解决GTM性能瓶颈问题。
GTM提供事务间一致性视图。
它为Postgres-XL数据库集群中的每个事务提供全局事务ID和快照。
它还提供一些全局值,如sequence和全局时间戳。
全局事务管理器代理GTM-Proxy
与协调器(Coordinator)和数据节点(DataNode)在一起运行;
后端(协调器、数据节点)用它替代GTM,直接与它交互,它做为后端与GTM间的中间人;
将对GTM的请求分组归集,多个请求一次提交给GTM;
获取transaction ids(XIDs)范围;
获取数据快照。
协调器Coordinator
Coordinator是Postgres-XL对外数据访问的入口,可以配置多个。但是Postgres-XL并没有提供负载均衡的机制,需要另外使用其他工具来实现。如上图中的Load Balancer并不属于Postgres-XL。
Coordinator节点维护着数据的存储信息,但不存储数据本身。接收到一条SQL语句后,Coordinator解析SQL,制定执行计划,然后分发任务到相关的Datanode上,Datanode返回执行结果到Coordinator,Coordinator整合各个Datanode返回的结果,最后返回给客户端。
数据节点DataNode
实际存储表和索引数据,数据自动打散分布(或者复制)到集群中各数据节点;
只有协调器连接到数据节点才能可读写,直接连接只能读;
执行协调器下传的查询,一个查询在所有相关节点上并行查询;
两个数据节点间可建立一对一通讯连接,交换分布式表关联查询的相关信息。
Postgres-XL数据分布
Postgres-XL数据分布有两种模式: 复制表(Replicated Table)、分布表(Distributed Table)。
- 复制表
表的数据在每一个DataNode上都是完整的。
当Coordinator与DataNode部署在一台机器上时,查询时只需要本地读取,减少网络开销。不适宜写操作频繁的表。
- 分布表
表的数据存放在多个DataNode上,组成一张完整的表。可用的分片策略方式Hash、Round Robin、Modulo。
PostgreSQL、Postgres-XC、Postgres-XL之间的区别