热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Citus集群拓扑架构介绍

点击阅读文章

作者:杨杰

简介

Citus是Postgres的开源扩展,将Postgres转换成一个分布式数据库,在集群的多个节点上分发数据和查询,具有像分片、分布式SQL引擎、复制表和分布式表等特性。

因为Citus是Postgres的扩展(而不是一个独立的代码分支),所以当你使用Citus时,你也在使用Postgres,可以利用最新的Postgres特性、工具和生态系统。

架构节点

每个集群都有一个称为协调节点(Coordinator Node,CN)的特殊节点,其他节点称为工作节点(Worker Node,WN/DN)。

CN只存储和数据分布相关的元数据,实际的表数据被分成M个分片,打散到N个DN上。

应用程序将它们的查询发送到协调器节点,该节点将查询转发给相关的数据节点并收集结果。

注:以上以分布式表为例

集群拓扑

首先介绍原生Citus支持的几种集群拓扑

statement-based replication

为了提高可用性,协调节点通过PG原生流复制实现多副本,数据节点通过基于语句复制实现表级别的副本,副本数由参数shard_replication_factor = 2控制。

基于语句复制存在的问题就是,如果子表非常多,SQL数量成比例增长,压力增加,同时,当子表出现问题时,会标记为非活跃状态,涉及与协调节点通信变更元数据,如果出问题的子表很多,性能自然不会好,相应还会带来副本修复的问题。

用Raft来做数据复制,每个数据变更都会落地为一条Raft日志,通过Raft的日志复制功能,将数据安全可靠地同步到复制组的每一个节点中。不过在实际写入中,根据Raft的协议,只需要同步复制到多数节点,即可安全地认为数据写入成功。

相比PG本身的主从副本,开发成本比较大,目前Citus已经建议从基于语句的复制切换到流式复制,参数replication_model = 'streaming'

streaming replication

协调节点及数据节点都通过流复制实现多副本,保证可用性。

数据节点副本同步使用PG流复制,提高分片上的写入速度。

协调节点属于Master-Standby架构,仅CN节点支持数据写入,势必会有单点可入瓶颈。

另外,默认CN-Stanby的查询发往DN-Primary节点,协调节点虽然做了读写分离,但底层请求都发给了DN-Primary,DN-Standby仅仅充当了备份副本。

对此,Citus还提供了两个参数以支持写入能力扩展及数据节点读写分离。

use_secondary_node

开启use_secondary_node = always,读请求可以发往数据节点备节点。

writable_standby_coordinator

开启writable_standby_coordinator = on

Enables simple DML via a streaming replica of the coordinator

这个参数的作用就是使CN-Standby也支持DML,比如Insert、Copy等操作。

除了通过writable_standby_coordinator参数支持多节点DML,Citus还提供了MX架构。

Citus MX

通过MX架构,数据节点同时存储用户数据及元数据,数据读写能力得到了水平扩展。

对于MX架构,数据节点支持存储元数据以支持读写请求,同时也增加了数据节点的压力,对此可以考虑计算存储分离架构。

Citus支持通过函数master_set_node_property设置节点的shouldhaveshards属性,控制DN节点不放分片,专门用于分担CN负载。

至此,便是目前Citus原生支持的几种集群拓扑。

计算存储分离+读写分离

原生Citus仅支持在CN-Master执行DDL操作,通过实现保障数据一致性的多点DDL方案,CN节点不在区分节点角色,可在任一CN节点执行DDL+RW。

除此之外,不再通过参数控制决定读写分离,直接根据Query类型做读写分离,将读请求发送到DN-Standby。

规模空前,再创历史 | 2020 PG亚洲大会圆满结束
PG ACE计划的正式发布
三期PostgreSQL国际线上沙龙活动的举办
六期PostgreSQL国内线上沙龙活动的举办

中国PostgreSQL分会与腾讯云战略合作协议签订

PostgreSQL 13.0 正式版发布通告

深度报告:开源协议那些事儿

从“非主流”到“潮流”,开源早已值得拥有

Oracle中国正在进行新一轮裁员,传 N+6 补偿

PostgreSQL与MySQL版权比较

新闻|Babelfish使PostgreSQL直接兼容SQL Server应用程序

四年三冠,PostgreSQL再度荣获“年度数据库”

更多新闻资讯行业动态技术热点,请关注中国PostgreSQL分会官方网站

https://www.postgresqlchina.com

中国PostgreSQL分会生态产品

https://www.pgfans.cn

中国PostgreSQL分会资源下载站

https://www.postgreshub.cn

点赞在看分享收藏



推荐阅读
  • 本文详细介绍了如何利用go-zero框架从需求分析到最终部署至Kubernetes的全过程,特别聚焦于微服务架构中的网关设计与实现。项目采用了go-zero及其生态组件,涵盖了从API设计到RPC调用,再到生产环境下的监控与维护等多方面内容。 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • 随着物联网技术的快速发展,NB-IoT(窄带物联网)作为一项关键的技术,正逐步成为实现大规模设备互联的重要手段。本文将详细介绍NB-IoT技术的特点、应用场景及其在实际项目中的应用实例。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • 本文探讨了在Node.js环境中如何有效地捕获标准输出(stdout)的内容,并将其存储到变量中。通过具体的示例和解决方案,帮助开发者解决常见的输出捕获问题。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • 探讨如何在C++中,当子类实例存储在父类类型的向量中时,正确访问子类特有的成员变量或方法。 ... [详细]
  • 本文旨在探讨计算机机房的有效管理与维护方法,包括合理的机房布局设计、高效的操作系统安装与恢复技术以及数据保护措施。随着信息技术教育的发展,计算机机房作为教学的重要组成部分,其稳定性和安全性直接影响到教学质量。文章分析了当前机房管理中存在的问题,并提出了针对性的解决方案。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 美国网络安全:MITRE Shield 积极防御知识库解析
    本文深入解析了MITRE Shield积极防御知识库,探讨其在网络安全领域的应用及意义。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 本文深入探讨了JLine库中的ConsoleReader.drawBuffer()方法的使用场景和具体实现,通过多个实际代码示例,帮助开发者更好地理解和应用此方法。 ... [详细]
  • 万事起于配置开发环境
    万事起于配置开发环境 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
author-avatar
王佳秋承男
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有