一、Citus是什么

   citus是PG的一个sharding插件,可以把PG变成一个分布式数据库。目前在苏宁有大量的生产应用跑在citus+pg的环境中。大家可以看it大咖视频。

   citus是一款基于PostgreSQL的开源分布式数据库,自动继承了PostgreSQL强大的SQL支持能力和应用生态(不仅仅是客户端协议的兼容还包括服务端扩展和管理工具的完全兼容)。 

   和其他类似的基于PostgreSQL的分布式方案,比如GreenPlum,PostgreSQL-XL,PostgreSQL-XC相比,citus最大的不同在于citus是一个PostgreSQL扩展而不是一个独立的代码分支。 

    因此,citus可以用很小的代价和更快的速度紧跟PostgreSQL的版本演进;同时又能最大程度的保证数据库的稳定性和兼容性。

二、主要特性

● PostgreSQL兼容

● 水平扩展

● 实时并发查

● 快速数据加载

● 实时增删改查

● 持分布式事务

● 支持常用DDL

三、Citus架构节点

   Container简称CN节点  worker节点

  CN只存储和数据分布相关的元数据,实际的表数据被分成M个分片,打散到N个Worker上。这样的表被叫做“分片表”,可以为“分片表”的每一个分片创建多个副本,实现高可用和负载均衡。

    分片表和参考表

   分片表分布打散在多个worker节点,而参考表每一个container节点和worker都保留一模一样的副本。

   下图是Citus处理客户端访问的一个简单的架构流程图,应用层直接连接CN节点,CN节点对客户端传入的sql语句进行解析,生成分布执行计划,并将各个子任务下发到相应的Worker节点,之后收集Worker的结果,经过处理后返回最终结果给客户端。最基本的流程就是这样,但是生成环境我们还应该考虑到高可用。下面将完整的介绍Citus实战集群原理。

四、Citus的三种集群

   因为,citus本身不支持HA,不像mongodb一样故障自动修复,但是可以结合pg的流复制,以及应用层jdbc数据驱动实现读写分离,故障切换。

1、第一种集群,增加读的能力

多个container节点,多个container节点进行流复制,保持元数据一致,在应用层设置多个读写分离,保证了数据的一致性,也保证了业务的高可用。

2、第二种集群,citus的MX功能

此功能可以说是解决了读和写的瓶颈,苏宁的架构中也是采用同样的思想。

原理:Mx功能的原理就是让其他的worker节点携带元数据,相当于携带元数据的worker节点都支持读写的能力,很大程度解决了读写的问题。

3、第三种集群,流复制,异地容灾

使用不同的dns,解决两套集群IP不同的问题。扩展容灾能力。

这套集群是在mX的基础上解决异地容灾的方案,通过dns解析到不同的机房的数据库。

上面三种集群,最常用的最有效的方法还是MX集群,只要在应用层设置好读写规则就可以了,底层worker的HA可以用流复制,多个副本实现数据高可用。

五、worker节点网络问题

cn节点访问所有worker节点。oltp业务的访问比较频繁。

重分布数据时,worker节点相互访问,访问频率不大。olap业务场景,数据交换吞吐较大。

cn节点连worker有两种模式

1、事务级保持连接模式(每条sql发起建立连接,sql结束断开连接,(除非事务中)。跑OLAP类sql时,使用即时连接模式(olap场景并发不高,建立连接带来的额外开销不大)

2、会话保持连接模式(会话发起建立连接,会话结束后释放连接)。跑OLTP类的SQl时,使用的是会话保持(oltp查询,并发性能高)

上面两种模式,基本上Citus能满足TP也能满足AP。

后面我会把搭建过程分享出来,比较简单。如果大家有什么好的pgsql的分布式方案,可以留言评论一起交流。

citus还有好多的特性,

比如:对于计算count处理时,如何进行优化。

       对于数据统计,citus提供了topn插件,与HLL类似

大家可以看官方文档介绍:https://docs.citusdata.com/en/v7.5/get_started/concepts.html#nodes-coordinator-and-workers

postgresql分布式集群之citus简介(转载)的更多相关文章

  1. MySQL分布式集群之MyCAT(一)简介【转】

    隔了好久,才想起来更新博客,最近倒腾的数据库从Oracle换成了MySQL,研究了一段时间,感觉社区版的MySQL在各个方面都逊色于Oracle,Oracle真的好方便!好了,不废话,这次准备记录一些 ...

  2. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  3. ElasticSearch 5学习(7)——分布式集群学习分享2

    前面主要学习了ElasticSearch分布式集群的存储过程中集群.节点和分片的知识(ElasticSearch 5学习(6)--分布式集群学习分享1),下面主要分享应对故障的一些实践. 应对故障 前 ...

  4. ElasticSearch 5学习(6)——分布式集群学习分享1

    在使用中我们把文档存入ElasticSearch,但是如果能够了解ElasticSearch内部是如何存储的,将会对我们学习ElasticSearch有很清晰的认识.本文中的所使用的ElasticSe ...

  5. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...

  6. SolrCloud分布式集群部署步骤

    Solr及SolrCloud简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成 ...

  7. 基于HBase0.98.13搭建HBase HA分布式集群

    在hadoop2.6.0分布式集群上搭建hbase ha分布式集群.搭建hadoop2.6.0分布式集群,请参考“基于hadoop2.6.0搭建5个节点的分布式集群”.下面我们开始啦 1.规划 1.主 ...

  8. 基于hadoop2.6.0搭建5个节点的分布式集群

    1.前言 我们使用hadoop2.6.0版本配置Hadoop集群,同时配置NameNode+HA.ResourceManager+HA,并使用zookeeper来管理Hadoop集群 2.规划 1.主 ...

  9. hadoop学习之hadoop完全分布式集群安装

    注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流.转载请注明来自: http://blog.csdn.net/ab198604/article/details/8250461 要想深入的 ...

随机推荐

  1. Fully Convolutional Networks for Semantic Segmentation 译文

    Fully Convolutional Networks for Semantic Segmentation 译文 Abstract   Convolutional networks are powe ...

  2. PHP网文

    1.php底层运行机制及原理 https://cloud.tencent.com/developer/article/1055801

  3. 协议——IIC

    I²C即Inter-Integrated Circuit(集成电路总线),它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代设计出来的一种简单.双向.二线制总线标准.多用于主机和从机在数 ...

  4. docker 入坑1

    本文是记录一下学习docker的过程,希望可以帮助到入门的朋友. 系统:ubuntu16.04 docker:18.09 打开官网:https://docs.docker.com/install/li ...

  5. JAVA日期格式化yyyyMMddHHmmssSSS

    String nowtime = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());

  6. Logback+ELK+SpringMVC搭建日志收集服务器

    (转) 1.ELK是什么? ELK是由Elasticsearch.Logstash.Kibana这3个软件的缩写. Elasticsearch是一个分布式搜索分析引擎,稳定.可水平扩展.易于管理是它的 ...

  7. elementui switch 开关,点击确认按钮后在进行开关

    <el-table-column label="上头条" align="center"> <template slot-scope=" ...

  8. vue 解决ios编辑器输入框不能拉起

    一.问题描述:Android .pc.下可以正常使用,在ios下可以拉起输入框但是无法输入 <div contenteditable="true" ></div& ...

  9. SpringMVC框架笔记01_SpringMVC的使用案例和架构组件_SpringMVC和Mybatis整合_接收参数

    目录 第1章:SpringMVC简介 1.1 什么是SpringMVC 1.2 SpringMVC的处理流程 第2章:SpringMVC入门程序 2.1 场景描述 2.2 步骤分析 2.3 步骤一:创 ...

  10. 过滤器实现Token验证(登录验证+过期验证)---简单的实现

    功能:登录验证+过期验证+注销清除cookie+未注销下关闭或刷新浏览器仍可直接访问action概述:token只存在客户端cookie,后端AES加密+解密+验证,每一次成功访问action都会刷新 ...