一、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. 计算GPA

    #include <stdio.h> int main() { int n,t,i; float sum,s,p,m,k; while(~scanf("%d",& ...

  2. mysql中常见正则表达式的应用

    查找name字段中以'st'为开头的所有数据: mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st'; 查找name字段中以'ok ...

  3. Spring Cloud Zuul路由规则动态更新

    背景  Spring Cloud Zuul 作为微服务的网关,请求经过zuul路由到内部的各个service,由于存在着新增/修改/删除服务的路由规则的需求,zuul的路由规则的动态变更功能 提供了 ...

  4. Jenkins + GitLab + SpringBoot 实现持续集成脚本

    Linux脚本 #!/bin/bash jar_name=hq-api.jar cd /usr/local/app/hq-api echo "Stopping SpringBoot Appl ...

  5. img中alt和title属性的区别

    在图像标签img中,除了常用的宽度width和高度height属性之外,还有两个比较重要并且也会用到的属性,就是alt和title,这都是用来显示图片内容的具体信息的,但是这两个属性也有不同的地方.a ...

  6. 强大的display:grid

    自从用习惯flex布局我基本已经不怎么使用float了. 现在又出现了grid布局,就像flex的升级版,布局上十分强大. 主要属性: grid-template-columns://竖向排列 gri ...

  7. 谈一谈做iOS播放器库开发所涉及的知识点

    在自己研究生毕业的时候,想着能找上一份做视频编解码的工作,可惜没有如愿,最后到了一家iOS游戏渠道公司去做游戏支付业务的SDK开发,我的iOS正式开发生涯就这么开始了. 在那家iOS游戏渠道没做上一年 ...

  8. [破解版]Unity3d引擎最新稳定版本4.5.5下载(官方最新稳定版本)

    来源:http://www.unitymanual.com/thread-28912-1-1.html unity4.5.5 Mac版下载地址:http://pan.baidu.com/s/1hqzi ...

  9. 视觉AI风口一触即发,虹软AI沙龙点金深圳

    7月26日,虹软AI沙龙在深圳湾科技生态园空间举办.AI沙龙是基于虹软视觉开放平台的开发者交流沙龙,旨在通过分享最新的实战案例,帮助开发者解决技术及落地难题,让技术更贴近实用场景. 本次活动中,深圳市 ...

  10. Python学习日记(十七) os模块和sys模块

    os模块 1.os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) #C:\Users\Administrator\ ...