在当前去IOE的大潮下,分布式数据库正如火如荼的发展起来,特别是国产数据库呈现了井喷态势。一个典型的分布式数据库应该具有如下组件:①协调节点,也叫sql转发节点,用来进行sql协议支持,分布式执行计划生成与下发;②数据节点:用来存储数据,同时进行运算;③全局事务管理器,用来保证事务一致性。为了保证高可用,成熟的分布式数据库这些节点都具有主备切换功能。
Pgxc就是这样cn+dn+gtm的经典架构,底层基于postgresql数据库,pgxc架构如下:
应用连接到协调节点coordinator,数据hash到每个数据节点datanode,所有数据库节点组成完整一份数据,协调节点具有多副本,多个cn节点是无状态的(其实这里并不是真正意义上的无状态,首先ddl元信息需要在每个cn进行同步,否则连到不同的cn可能查到不一致的结果;还有一方面是两阶段残留的问题,这个问题我们后面再细细讨论)。Dn是主备架构,主备通过流复制进行同步。Gtm负责生成全局gxid+snapshot,这里的snapshot是为了保证全局的读一致性,做读可见性判断。