CRDB-多区域部署

news2024/10/7 17:29:40

多区域部署允许cockachdb数据库跨越多个地理区域。多区域部署的配置对集群的容错和区域性能有影响。一般来说,我们将一个cockachdb集群配置为多个区域,以实现以下两个目标中的一个或两个:

  • 允许集群在其中一个区域的计算资源不可用时继续服务请求。
  • 确保地理分布数据库的用户可以享受低延迟的数据库操作。

这两个目标并非完全不兼容,但两者之间存在一些权衡。

多区域概念

CockroachDB的多区域功能实现了cockachdb的一些最独特的体系结构特性。一些底层算法可能具有挑战性。然而,多区域cockachdb的核心概念有助于将大部分内容抽象为简单的概念,如regions、zones和存活目标。

Regions和Zones

Region是一个广泛的地理区域,其中部署了一组cockachdb节点。区域可以是您想要的任何东西,但只有在具有某种网络邻接、不同的工作负载或用户特征或法律需求的区域中定义区域才真正有意义。
数据库中的一个Region是主Region。主Region是数据库中所有表的默认Region。
在Region内,可以定义一个或多个Zone。Zone的定义也是任意的,但通常与Region内的数据中心保持一致(尽管它们也可以很容易地定义为高度冗余数据中心中的机架)。
在其他上下文中,Zones有时称为可用性Zones。这个想法是,一个Zone代表某种单点故障。当一个Zone被定义为数据中心时,我们可以假设在数据中心发生故障时,该分区中的所有节点都将发生故障。定义跨越数据中心的Zone意义不大,除非数据中心有一些共同的故障点(例如,两个数据中心依赖于同一个电站)。
下图以三区全局部署为例,每个区域有三个Zone。
在这里插入图片描述
每个Region代表一个广泛的地理区域,我们认为该区域对cockachdb应用程序具有一定的重要性。Region中的每个Zone都由一个城市表示,其中运行着一个或多个CRDB节点。

存活目标

集群中的每个数据库都有一个存活目标,该目标决定了延迟和生存能力之间的权衡。注意,有时我们可能会使用database来引用整个cockachdb部署,但在本例中,我们讨论的是由CREATE database语句定义的数据库。每个数据库都有不同的存活目标:

  • Zone故障是默认的存活目标。即使区域中的一个节点发生故障,数据库仍可用于读写。如果您在区域中配置了足够的节点和适当的复制因子,多个Zone故障仍然可以存活。
  • 当一个数据库被配置为Region故障,即使在整个Region故障时,该数据库仍然是完全可用的。为了实现这一点,数据必须复制到另一个Region,这在大多数情况下会降低写性能。

下图说明了一个数据库中的Zone故障,该数据库有一个Zone生存目标。有问题的数据范围在美国区域(默认区域)的三个副本中进行维护,该区域中的任何单个Zone(在本例中为纽约区域)发生故障,都允许数据库使用两个副本继续工作。在任何区域发生两次故障都会产生相同的影响,尽管无法获得的数据范围不同。
在这里插入图片描述
下图为Region存活目标数据库的Region故障。由于为数据库设置了Region存活目标,复制因子自动增加到5,而不是默认的3,并且副本分布在各个区域。当美国地区出现故障时,其他地区的数据仍然有三份副本,数据库操作可以继续。
在这里插入图片描述
确实,在不同的地区有三个副本就足以在Region级别故障中存活下来。但是,cockachdb增加了复制因子,以改进对主要区域内较小(节点或区域级)故障的处理。如果复制因子保持在3,那么主区域内的一个节点或区域发生故障将意味着所有读取都必须到次要区域,这将大大增加延迟。因为节点故障比区域故障更常见,所以我们增加了复制因子,使它们对性能的影响更小。
Region/Zone生存目标是配置多区域部署的最大单一“开关”。Zone存活产生最佳性能,而region存活在大规模中断或网络分区时促进更大的生存能力。在两者之间作出选择时,应考虑以下因素:

  • 在大型公共云平台中,整个区域的故障是罕见的,但也不是闻所未闻。
  • Region生存意味着Zone生存。默认情况下,Region生存目标保护任何单个区域的损失或任何两个Zone的失败。

就像我们需要至少三个节点才能允许单区域集群的生存一样,我们需要三个Region才能允许Region生存。在只有两个区域的情况下,任何一个区域的故障都将导致某些范围的大多数副本不可用。

本地规则

不管存活目标是什么,我们都可以对表中的分布进行微调,以优化来自特定区域的访问。
数据库中的表可能具有本地规则,以确定其数据将如何跨区域分布:

  • 全局表(global table) 将为从任何区域的低延迟读取进行优化。
  • 区域表(regional table) 将为从单个区域的低延迟读写进行优化。
  • 按行区域表(regional by row table) 将有特定的行优化为低延迟读写区域。表中的不同行可以分配给特定的区域。

对于全局表,表中所有范围的副本将存在于每个区域中。这确保了读时间得到了优化,但为写操作创建了最高的开销,因为所有区域必须协调处理一个写请求。全局表适用于跨所有区域的相对静态查找表。产品表可能是一个相关的例子——产品信息通常跨区域共享,不需要频繁更新;因此,如果每个区域都有产品表的完整副本,则性能将得到优化。缺点是写入产品表需要所有区域的参与,因此相对较慢。
对于区域表,表中所有范围的尽可能多的副本信息位于单个区域中。如果该区域对业务比其他区域重要得多,或者数据与该区域特别相关,那么这是有意义的。例如,如果在国际化的应用程序中,每种语言的错误代码位于单独的表中,那么将它们定位到特定的区域可能是有意义的(当然,这将重新引发关于英语应该驻留在何处的古老争论)。注意,REGIONAL BY TABLE IN PRIMARY REGION是默认配置
按行区域表定位特定区域中特定行的副本。每一行中的**隐藏列(crdb_region)**决定了该行的位置。该列可以由应用程序直接填充,也可以从其他信息派生。例如,在用户表中,如果国家代码是“USA”、“Canada”或北美或南美的任何国家,我们可以将行分配给美国地区。逐行区域是将数据移动到所需区域附近的一种非常强大的方法。
现在,如果您非常警觉,您可能想知道区域生存能力如何与这些表区域设置相互作用。如果我处于Region生存模式中,我便需要在其他区域中拥有副本,那么这一区域设置是如何运作的呢?答案是cockachdb在两个设置之间折衷。对于处于Region生存模式的区域表,整个表或相关范围的两个投票副本和租赁者将位于该区域,而其他投票副本将位于其他区域。最终的结果是“home”区域在性能上有轻微的优势。
本质上,在一个cockachdb集群中有三种类型的表,按生存能力递减和性能递增的顺序排列:

  • GLOBAL
  • REGIONAL SURVIVE REGION
  • REGIONAL SURVIVE ZONE

它作为两个独立的设置呈现的原因与哪些组合是合理的以及数据库和表级设置如何交互有关。如果您的数据库中有任何SURVIVE ZONE表,您的应用程序可能会在区域故障中中断(除非您非常注意使用哪些表以及何时使用),
因此,在一个DB中混合使用REGIONAL survival ZONE和REGIONAL survival REGION表没有太大意义(如果区域故障仍然会导致停机,为什么还要为一些表付出survival REGION的性能代价呢?)这就是为什么生存目标是一个数据库级别的设置。另一方面,混合使用全局表和区域表是有意义的,所以这是表级设置。
默认情况下,从相关区域以外的区域或按行读取区域表的速度会较慢。但是,使用AS OF SYSTEM TIME可以执行低延迟的“过期”读取。AS OF SYSTEM TIME可以利用位于每个非主要区域中的非投票副本。这些非投票副本不涉及事务提交处理,因此可能略显过时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

磨金石教育摄影技能干货分享|花朵怎样拍才能不凌乱

喜欢养花种花的朋友,除了享受花朵在自己精心培育下绽放之外,给爱花拍照发在朋友圈炫耀也是一大乐趣之一。 但是别看花朵静静地盛开,娇艳欲滴,想要拍得好看却不是一件容易的事。作为摄影小白常常遇到的情况就是,拍出的花…

即兴发言怎样避免语无伦次?记住这个即兴发言万能公式

作为PMO和项目经理,经常要组织和参与各种会议,在会议中难免需要即兴发言,但是很多人即兴发言时总语无伦次,不知所云,而PMO和项目经理又是依靠外在表现来体现自己的专业性的,这时候就很难获得被人的认可&…

Docker Desktop Installer 安装无反应的,如何解决?

docker教程 Docker 教程 | 菜鸟教程 下载地址: Docker Desktop 官方下载地址: Install on Windows | Docker DocumentationHow to install Docker Desktop for Windowshttps://docs.docker.com/desktop/install/windows-install/ 问题:出…

webpack

webpack一、前端工程化1、前端开发历程2、什么是前端工程化3、前端工程化的解决方案二、webpack的基本使用1、什么是webpack2、列表隔行变色例子3、安装和配置webpack1.安装webpack2.配置webpack4、webpack.config.js的作用5、配置webpack.config.js自定义打包入口和出口三、we…

乘用车排气系统流场的数值模拟

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 课题背景及意义 1 1.2 国内外研究现状 1 1.3 课题主要研究内容 2 第2章 流体力学及流场分析软件的介绍 4 2.1 概述 4 2.2 流体力学及应用现状 4 2.3 Solidworks软件的应用范围 5 2.4 Flow Simulation 软件简介 5 第3章 排气系统理论…

软件测试的行业现状,我们的未来在哪里?

1.现状 1.1建立软件测试团队的公司规模 可看出主要当前是以中小型公司为主,因为大厂毕竟就那么几个,数量少。 1.2软件测试团队的规模 可看出主要目前的软件测试团队主要是以50人以内的团队为主(外包除外)。 1.3各公司软件测试工作的规范程度 可看出大…

优化器scipy.optimize参考指南

原文:https://mp.weixin.qq.com/s/BDHXQHXSzDk-RTi-VNMNEw 1 scipy.optimize简介 该scipy.optimize包提供几种常用的优化算法。 该模块包含: 1、使用多种算法(例如BFGS,Nelder-Mead单形,牛顿共轭梯度,C…

在线预约系统开发的用途_分享在线预约小程序的作用

在微信小程序上进行在线预约,不管是商家还是顾客,都可以自由选择时间,顾客还可以通过预约小程序,了解到所选服务的详情和功能特色,不必等到去店内听介绍,顾客能节省等候时间,商家能解放招待人力…

【34-业务开发-基础业务-属性组和基本属性-属性组和基本属性建立关联-属性组和基本属性解除关联-未关联属性查询-确认新增】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

【动手学深度学习】权重衰减(含Pytorch从零开始实现的源代码)

目录:权重衰减一、理论知识二、高维线性回归的实现步骤2.1 准备数据2.2 初始化模型参数2.3 定义L2L_2L2​范数惩罚2.4 定义训练代码实现2.5 是否加入正则化2.5.1 忽略正则化2.5.2 加入正则化三、简单实现四、源代码一、理论知识 前面我们已经介绍学习了过拟合的问题…

从发现问题到创造价值 数据智能如何助力商家双11高质量增长?

近年来,随着消费者的购买行为趋于多样化,很多品牌商家开始布局多平台及多渠道的经营,但随之也带来跨平台多渠道经营的数据不互通、生意数字难以追踪的难题。许多商家也借助双11等大促节点,围绕线下和线上开展全域营销,…

[附源码]java毕业设计宿舍管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Bio-Helix丨Bio-Helix艾美捷100bp DNA ladder说明书

Bio-Helix艾美捷100bp DNA ladder (11条条带,100-1,500pb)背景: PCR产物和许多专有质粒的独特组合,用适当的限制性酶消化,产生11个片段,适合用作琼脂糖凝胶电泳的分子量标准。DNA包括100-1500个碱基对的片段。500和15…

【Java开发】 Spring 05 :Project Reactor 响应式流框架(以Reactive方式访问Redis为例)

响应式编程基于 Project Reactor(Reactor 是一个运行在 Java8 之上的响应式框架)的思想,当你做一个带有一定延迟的才能够返回的 IO 操作时,不会阻塞,而是立刻返回一个流,并且订阅这个流,当这个流…

【论文阅读】社交网络传播最大化问题-03

Leader-aware community detection in complex networksLeader-aware community detection algorithm - 领导感知社区检测算法创新点相关工作概念定义基础概念创新概念1. (领导力)2. (边缘紧性)3.(引力)模型…

【javaEE】网络原理(传输层Part1)

努力经营当下,直至未来明朗! 文章目录前言传输层1. 介绍UDP协议2.【TCP】(重难考点)TCP可靠传输的机制1. 确认应答2. 超时重传3. 连接管理(三次握手、四次挥手)【面试题!!】THINK前言…

项目记录:使用SpringBoot + MyBatisPlus 在MySQL字段设置外键后ID自增失效导致添加失败问题(ID生成策略)

目录 说明 外键列设置后自增失效特性演示 ID不设置自增策略,报错问题和解决 设置自增策略冲突问题和解决。 说明 记录在使用SpringBoot MyBatisPlus操作数据库以及和前端页面交互时遇到的问题和解决方式。 1.表主键字段设置外键之后,自增功能失效…

Spring Security使用JSON格式登录

本文内容来自王松老师的《深入浅出Spring Security》,自己在学习的时候为了加深理解顺手抄录的,有时候还会写一些自己的想法。 Spring Security中默认的登录参数传递的格式是key/value形式,也是表单登录格式。在实际项目中我们可能会通过Json…

小米蓝牙耳机怎么选?适合小米手机的蓝牙耳机推荐

小米可以说是数码界的一股清流,在手机价格上做出了巨大的贡献,它的产品已经覆盖了我们的生活,包括智能家居、穿戴设备、通讯等等,蓝牙耳机作为出行必备的蓝牙耳机单品,耳机品牌众多,意味着我们有更多的选择…

带你深入了解什么是 Java 线程池技术

我们在程序开发中为了“压榨”计算机的 CPU 资源,会去使用多线程来提高程序的性能,在高并发的场景下,多线程编程显得尤为重要。而在线上,我们使用多线程大部分都是通过线程池来管理。线程池是一种基于池化思想的线程管理工具&…