Postgres-XL:基于PostgreSQL的开源分布式实现

Postgres-XL 全称为 Postgres eXtensible Lattice,是TransLattice公司及其收购数据库技术公司–StormDB的产品。Postgres-XL是一个横向扩展的开源数据库集群,具有足够的灵活性来处理不同的数据库任务。

Postgres-XL 功能特性

  • 开放源代码:(源协议使用宽松的“ Mozilla Public License”许可,允许将开源代码与闭源代码混在一起使用。)
  • 完全的ACID支持
  • 可横向扩展的关系型数据库(RDBMS)
    • 支持OLAP应用,采用MPP(Massively Parallel Processing:大规模并行处理系统)架构模式
    • 支持OLTP应用,读写性能可扩展
    • 集群级别的ACID特性
    • 多租户安全
    • 也可被用作分布式Key-Value存储
  • 事务处理与数据分析处理混合型数据库
  • 支持丰富的SQL语句类型,比如:关联子查询
  • 支持绝大部分PostgreSQL的SQL语句
  • 分布式多版本并发控制(MVCC:Multi-version Concurrency Control)
  • 支持JSON和XML格式

Postgres-XL 缺少的功能

  • 内建的高可用机制
    • 使用外部机制实现高可能,如:Corosync/Pacemaker
    • 有未来功能提升的空间
  • 增加节点/重新分片数据(re-shard)的简便性
    • 数据重分布(redistribution)期间会锁表
    • 可采用预分片(pre-shard)方式解决,在同台物理服务器上建立多个数据节点,每个节点存储一个数据分片。
      数据重分布时,将一些数据节点迁出即可
  • 某些外键、唯一性约束功能

Postgres-XL 架构

Postgres-XL:基于PostgreSQL的开源分布式实现_第1张图片

  • 基于开源项目Postgres-XC
    • XL增加了MPP,允许数据节点间直接通讯,交换复杂跨节点关联查询相关数据信息,减少协调器负载。
  • 多个协调器(Coordinator)
    • 应用程序的数据库连入点
    • 分析查询语句,生成执行计划
  • 多个数据节点(DataNode)
    • 实际的数据存储
    • 数据自动打散分布到集群中各数据节点
    • 本地执行查询
    • 一个查询在所有相关节点上并行查询
  • 全局事务管理器(GTM:Global Transaction Manager)
    • 提供事务间一致性视图
    • 部署GTM Proxy实例,以提高性能

协调器(Coordinator)

  • 处理客户端网络连接,是数据库的接入点
  • 分析查询语句,生成执行计划,并将计划传递给数据节点实际执行
  • 对数据节点返回的查询中间结果集执行最后处理
  • 管理事务两阶段提交(2PC)

存储全局目录(Global Catalog)信息

Postgres-XL:基于PostgreSQL的开源分布式实现_第2张图片

数据节点(DataNode)

  • 存储表和索引数据
  • 只有协调器连接到数据节点
  • 执行协调器下传的查询
  • 两个数据节点间可建立一对一通讯连接,交换分布式表关联查询的相关信息

全局事务管理器(GTM)

  • 处理必须的MVCC任务
    • Transaction IDs 事务ID
    • Snapshots 数据快照,MVCC使用
  • 管理全局性数据值
    • Timestamps 时间戳
    • Sequences 序列对象
  • 全集群只有一个GTM节点,会有单点故障问题。解决方案:配置StranBy热备节点保证高可用
  • 通过部署GTM Proxy,解决可能的GTM性能瓶颈

Postgres-XL:基于PostgreSQL的开源分布式实现_第3张图片

GTM Proxy

  • 与协调器(Coordinator)和数据节点(DataNode)在一起运行
  • 后端(协调器、数据节点)用它替代GTM,直接与它交互,它做为后端与GTM间的中间人
  • 将对GTM的请求分组归集,多个请求一次提交给GTM
  • 获取transaction ids(XIDs)范围
  • 获取数据快照
  • 比如: 10个进程分别请求一个transaction id
    • 它们每一个都连接到本地的GTM Proxy
    • GTM Proxy发送请求到GTM,一次申请10个XID
    • GTM锁定procarray数据结构,分配10个XID
    • GTM返回XID范围
    • GTM解除进程互斥锁

Postgres-XL:基于PostgreSQL的开源分布式实现_第4张图片

Postgres-XL 数据分布

Postgres-XL数据分布有两种模式: 复制表(Replicated Table)、分布表(Distributed Table)。

复制表(Replicated Table)

  • 益用于只读和读多写很少的表
  • 有时益用于数据仓库的维度表
  • 如果协调器与数据节点一对一部署在同一台服务器,就会是本地数据读取,减少网络传送
  • 对写入频繁的表严重不适用
  • 每行记录复制到集群中所有的数据节点,每节点一份

分布表(Distributed Table)

  • 益用于写入频率的表
  • 益用于数据仓库的事实表
  • 每行记录只存于一个数据节点
  • 可用的分片策略方式
    • Hash
    • Round Robin
    • Modulo

Postgres-XL可用性

Postgres-XL:基于PostgreSQL的开源分布式实现_第5张图片

  • 不存在单点故障
  • 全局事务管理器采用热备方式
  • 多个协调器间负载均衡
  • 数据节点使用流式复制,复制数据到备节点

Postgres-XL性能

事务处理型(OLTP Transaction)性能

Postgres-XL:基于PostgreSQL的开源分布式实现_第6张图片

  • 测试使用针对电子商务应用的TPC-W(DBT-1)基准测试模型。
  • 协调层增加了30%的开销:在单节点(CPU4核)上,与简单地直接使用PostgreSQL相比,只有PostgreSQL性能的70%。
  • 集群规模扩大到10个节点时,与单节点PostgreSQL相比,理论上应获得7倍性能提升,实际上达到6-6.4倍。
  • 随着集群节点数的增加,打开的事务数、快照空间占用、可见性检查都会随之增长。

PostgreSQL 、Postgres-XC、Postgres-XL之间的区别

Postgres-XL:基于PostgreSQL的开源分布式实现_第7张图片

参考链接:

  • http://www.postgres-xl.org/

Related posts:

  1. MySQL存储引擎中的MyISAM和InnoDB
  2. Cobar:基于MySQL的分布式数据库服务中间件
  3. MySQL分布式中间件:MyCAT

你可能感兴趣的:(数据库,大数据)