当前位置: 首页 > 编程日记 > 正文

[译稿]同步复制提议 2010-09

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

同步复制9/2010议案

目录 [隐藏]

1 PAGE状态 2 有何不同之处这个补丁? 3 同步复制概述 4 用户视角 4.1 管理员视角 5 实现 5.1 STANDBY 5.2 MASTER 6 CODE 7 性能分析 8 尚未实现 9 ,其他问题

PAGE状态

此页面可以作为一个同步复制文件的补丁由西蒙·里格斯在2010年9月公布。 请注意,这个建议是不是该结束了正在实施的版本有所不同: 见同步复制更多的细节。

这个补丁有何不同之处?

在9.1的实现包括一些创新,超越了藤井正雄的工作提供的PostgreSQL的9.0较早的同步复制实现:

  • 备机状态代码的复杂度低
  • 用户控制:所有决定等待发挥主的地方,让同步复制的细粒度控制。最大复制级别也可以在待机设置。
  • 低带宽:非常小的响应数据包的大小与响应的数量没有增加,当系统处于高负载下意味着只需要很少的额外带宽
  • 性能:待机过程中同时工作给予的待机和最小的延迟良好的整体吞吐量在所有模式。4个性能选择不相互干扰,所以提供彼此并排不同级别的性能/耐久性。 这些都是重要的PostgreSQL的项目之上基本同步rep 功能的优越之处。

同步复制概述

同步复制提供了一个交易的所有变化都被转移到远程备用节点的保证。这是一个扩展,由事务提交提供耐用的水准水平。 当需要同步复制的事务等待它提交后,直到接收确认转会已经成功。等待确认增加了用户的肯定,转移已经发生,但它也必然增加的响应时间请求交易。同步复制通常需要精心策划,并放置备用服务器,以确保应用程序执行得体。等待期间不利用系统资源,但事务锁继续被保持到传送已被确认。其结果是,不谨慎使用同步复制会导致对数据库应用程序性能降低。 它可能看起来有耐用性和性能之间的简单的选择。然而,往往是数据的重要性,以及如何繁忙的数据库需要之间有密切的关系,所以这是很少一个简单的选择。有了这个补丁,现在的PostgreSQL提供了一系列的设计,让应用程序架构师设计出既具有良好的综合性能和最重要的数据资产尚未耐久性优异的系统功能。 PostgreSQL允许应用程序设计者指定通过复制所需的耐用性水平。这可以为系统规定的总的,虽然它也可以为个别交易指定。这允许有选择地为关键数据提供保护的最高水平。 例如,我们,一个应用程序可能包括两种类型的工作:

  • 10%的变化的为重要的客户信息
  • 90%的变化是,如果丢失,如用户之间的聊天消息业务可以更容易地生存不太重要的数据。

随着在应用程序级别(在主站)指定的同步复制选项,我们可以提供最重要的变化同步代表,而不会减慢了大部分的总工作量的。应用级选项允许同步复制的高性能应用的利益的重要而实用的工具。 如果没有在应用程序级别指定的同步选项代表,我们将不得不要么减慢90%的工作量,因为它10%是重要的选择。或放弃,因为我们的表现耐久性目标。或拆分这两个函数到不同的数据库服务器,使我们可以在不同的每个设置的选项。这些3个选项都不是真正的吸引力。 PostgreSQL的还允许系统管理员指定由备用服务器所提供的服务水平的能力。这允许多个备用服务器到服务器场中的各种角色一起工作。

注意:有关参数此处使用的信息反映与该功能的较早版本,并且需要被更新,以反映它被提交到9.1的形式 此功能的控制依赖于刚3个参数:在主机(Master)上,我们可以设置

  • synchronous_replication
  • synchronous_replication_timeout

在备机状态下,我们可以设置

  • synchronous_replication_service

这些更详细地在下面的章节中说明。

用户视角

在主控制两个新USERSET这个参数

  • synchronous_replication =async (default)| recv | fsync | apply

  • synchronous_replication_timeout = 0+(0表示永不超时) (默认超时10秒) synchronous_replication =async 是缺省值,意味着没有synchronisaton要求,因此,提交将不会等待。这是最快的设置。这个词异步是短期的“异步”,你可能会看到这个词异步复制讨论。 其他设置是指逐步更高水平的耐久性。耐久性的要求的水平越高,要达到的更长的等待耐久性的这一水平。 的synchronous_replication设置的确切含义是

  • async - 提交不等待备备机回复用户之前

  • recv - 直到备用收到WAL提交等待

  • fsync - 直到备用收到并fsynced WAL提交等待

  • apply - 直至待机已收到,fsynced 和应用提交等待

这提供了一个简单的,容易理解的机制 - 与一个在其默认的形式是非常相似的其他RDBMS(如Oracle)。 请注意,在应用模式下,它是可能的变化可能是上所做的更改已通知该变化是完成交易前的待机访问。 (小问题)。 可能会出现网络延迟和待机也可能会崩溃。如果没有答复我们提出一个注意的超时时间内接收,然后返回成功提交(没有其他的行动是可能的)。注意,有可能请求我们从未超时,因此,如果没有备用可用我们等待它之一出现。 当用户提交,如果主没有一个当前连接的备用复制提供所要求的水平,将挑选复制的下一个最好的水平。它是由系统管理员提供足够的范围备用节点的,以确保至少有一个是可用的,以满足所请求的服务水平。 如果存在多个备用,第一待机回复耐久性已经实现将释放等待理想的水平上的主提交。其他选项也可以通过一个插件。

管理员视角

在待机状态下,我们指定的最高类型由该备用服务器提供复制服务。此信息被传递到主服务器时备用复制连接。 这使得系统管理员将首选备用。它还允许系统管理员完全拒绝提供同步复制服务,让主明确地避免在低带宽和高延迟链路同步。

一个附加的参数可在的recovery.conf被设置在备用

synchronous_replication_service =async(def)| recv | fsync | apply

实现

某些方面可以在不改变显著基本提案进行修改,例如主指定的备机不会真正改变这一非常多。

备机

主控制同步代表处意味着所有用户等待逻辑上的主中心。在主同步请求代表的细节不会被发送到备用,所以没有额外的主人待机流量也不待机侧簿记开销。它还减少的待机代码的复杂性。 在待机方面现在WAL作家恢复过程中运行。这将释放WALReceiver花更多的时间发送和接收消息,从而为用户选择“接收”选项,最小的系统延迟。我们现在有3个进程中的异步处理管线WAL:WAL接收来自libpq的连接读取WAL数据然后再写入WAL文件时,WALWriterfsync() 写入的WAL文件,然后启动过程中重播WAL。这些程序独立行事,所以WAL指针(的LSN)被定义为WALReceiverLSN> = WALWriterLSN> = StartupLSN 对于每一个新的消息WALReceiver从高手指点,我们予以答复。每个应答发送3的LSN的当前状态,因此,应答消息大小只有28字节。将回复发送半双工的,即当有新邮件到达,我们不回复。 需要注意的是绝对不是在主服务器上每个事务一份答复。待机一无所知什么已被要求在主 - 回复总是指最新的待机状态,有效地批量的响应。 我们根据所请求的synchronous_replication_service充当

  • async - 不发送答复
  • recv - 答复在收到仅发送
  • fsync - 答复在收到发送,只有以下FSYNC
  • apply - 回复发送到以下回执,FSYNC和应用。

回复是在下次有机会时发送。

在apply模式下,当WALReceiver是完全安静,这意味着我们发送3回复消息

  • 分别在recv的,一个在fsync,一个在apply。 当WALreceiver忙不不能,直到已收到目前收到的消息,之后我们要去反正回复,所以它不是一个额外的消息中发送的消息量,因为回复增长。这意味着我们在捎带“应用”响应到后来的“接收”的答复。 因此,我们得到所有的模式,最大吞吐量完全不受损最小的响应时间。

当每个新的消息从主机到达WALreceiver将写入新的数据到WAL文件,唤醒WALwriter,然后答复。 从主每一个新的消息,收到了答复。 如果已经接收任何进一步的WAL数据WALreceiver等待上的闩锁。 如果WALReceiver被WALWriter或启动唤醒,然后将回复到主与消息,即使没有新的WAL已经收到。 因此,在这两个recv的,FSYNC并尽快申请个案信息掌握, 所以在所有情况下的等待时间最小化。 当WALwriter被唤醒时它认为, 如果有优秀的WAL数据,如果是这样fsync作业数据唤醒既WALreceiver和启动。 如果没有WAL仍然等待门闩。 启动过程中会醒WALreceiver时,它已经得到了WAL的最新块的结束。 如果没有进一步的WAL可用,则等待其锁定。

当用户请求后端同步代表他们等待在所要求LSN有序的队列。有一条单独队列为每个请求模式。 WALSender从待机接收3的LSN。然后,它唤醒,从每个队列顺序后端。 我们提供了一个单一的唤醒规则: 第一WALSender与请求XLogRecPtr答复将唤醒后端。 这保证了对提交的WAL数据的请求到至少一个备用被传送。这是足够的,我们已经讨论了用例。 更复杂的唤醒规则将通过插件是可能的(More complex wakeup rules would be possible via a plugin.)。 等待超时会被个别后端具有定时设置,就像我们的statement_timeout所做的一样。

代码CODE

总代码来实现是比较简单的(原文 low )。分解成5个区域

  • Zoltan的libpq的变化,包括几乎一字不差; 相当模块化,这样方便的东西来代替,我们更喜欢
  • 一个新的模块syncrep.c和syncrep.h处理后台等待/唤醒
  • 轻量的变化,使流媒体代表进行适当的调用
  • 代码量小,让WALWriter是在积极的恢复
  • 参数代码

没有文档呢(笔者翻译时已经有了)。

** 该补丁构建于闩锁(Latch)之上,虽然对于其传输的Bulk的性能特性不依赖于它们。 插销仅提高响应时间非常低的事务处理速度; 在中高频率的高频事物交易之上,锁存器提供没有额外的吞吐量,不能保证中高频事物。**

(The patch works on top of latches, though does not rely upon them for its bulk performance characteristics.

  • Latches only improve response time for very low transaction rates;
  • latches provide no additional throughput for medium to high transaction rates.)

性能分析

因为我们回复主机发送每一个新的块, “接收”模式具有绝对最小的延迟, 特别是因为WALreceiver不再执行大多数fsync()写入,如在9.0代码。 WALreceiver不会等待FSYNC或应用操作来完成我们的回答之前, 因此FSYNC和应用模式会一直等待至少2 standby->掌握的消息, 因为这些行为会通常会出现晚得多这是合适的。 这种反应机制提供了“接收”模式和负荷下很好的吞吐量达到最高响应性能。 注意不同的模式不相互干扰,并且可以共存愉快,同时提供最高的性能。

开始WALWriter是有帮助的,不管指定什么 synchronous_replication_service。 我们可以优化回复消息的发送,以便只包含一个提交块应该有一个答复? 我们可以,但我们需要做的主额外的工作做的簿记。 这将需要证明存在性能问题大到足以值得在主人和额外代码的开销。 有没有从降低待机提供的选项数的优化? 在备用侧的结构并不在很大程度上依赖于所指定的服务水平, 也不依赖于对主指定的实际同步代表模式的任何方式。

没有进一步的简化是可能的。

尚未实现

超时代码与注意事项 代码和测试插件 在循环walsender,walwriter和接收器治疗不当关机 我还没有看藤井代码这一点,甚至不知道它在哪里,但希望在未来这么做。佐尔坦的libpq的代码是使用补丁的一部分。 到目前为止,我已经花了此3.5天,预计完成的明天。我认为,抛出这个建议太复杂在此版本中开发的论点。 其他事宜

如何应掌握的行为,当我们关闭它? 应该如何循规蹈矩待机,当我们关闭它?

转载于:https://my.oschina.net/innovation/blog/784248

相关文章:

STL vector

1、vector是表示可变大小数组的序列容器。 2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会…

JavaScript 复习之数据类型

一、简介 JavaScript 的数据类型有 7 种: 数值(number)字符串(string)布尔值(boolean)undefinednull对象(object)Symbol(ES6 中新增的类型,表示独…

Nginx反代配置

一、ngx_http_proxy_module模块ngx_http_proxy_module模块可根据用户请求的uri传递至后端服务器,实现反向代理命令:1.proxy_pass设置一个代理服务器的地址,协议,和一个可选的URI的位置应该映射。作为一个协议,“HTTP”…

STL queue priority_queue

queue 队列 queue 队列 就像排队一样,后来的排在后面,先来的先出队。所以只能对队首和队尾的元素进行操作 back()返回最后一个元素empty()如果队列空则返回真front()返回第一个元素pop()删除第一个元素push()在末尾加入一个元素size()返回队列中元素的…

镜头评价指标及测试方法(二)—畸变与分辨率

一、畸变 畸变(distortion)也称为失真,是由于光阑球差的影响,不同视场的主光线通过光学系统后与高斯像面的交点高度不等于理想像高,两者之差就是畸变。因此畸变只改变轴外物点在理想面上的成像位置,使像的形…

优秀Java程序员应该知道的20个实用开源库

一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Bloch建议如何使用现有的API进行开发,而不是为常用的东西写新的代…

sersync 同步

Sersync数据同步rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步支持本地复制,或者与其他SSH、rsync主机同步。它的特性如下:v 可以镜像保存整个目录树和文件系统。v 可以很容易做到保持原…

python-opencv 形态学

五、形态学运算 检测边和 角点 形态学算子检测图像中的边缘和拐角(实际用:Canny或Harris等算法) 5.1 检测边缘 形态学检测边缘的原理:在膨胀时,图像中的物体会想周围“扩张”;腐蚀时,图像中的物…

【 HihoCoder】1082 The Marshtomp has seen it all before (暴力 或 脑力)

https://vjudge.net/problem/HihoCoder-1082 暴力 #include <iostream> #include <cstring>using namespace std;char s[205];int main() {int i;while(gets(s)){i 0;int len strlen(s);while(i<len){if((s[i]m||s[i]M)&&(s[i1]a||s[i1]A)&&am…

java 多维数组转化为字符串

int[][] a {{1,2,3},{4,5,7}};System.out.println(Arrays.deepToString(a)); Arrays.deepToString()此方法是为了将多维数组转换为字符串而设计的。 三维二维都可以解决;转载于:https://www.cnblogs.com/lishuaiqi/p/10428612.html

python-opencv 轮廓检测

轮廓检测 图像处理中经常用到轮廓检测,OpenCV-python接口中使用cv2.findContours()函数来查找检测物体的轮廓。 import cv2img cv2.imread(D:\\test\\contour.jpg) gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY)…

JavaDate类

在JDK1.0中&#xff0c;Date类是唯一的一个代表时间的类&#xff0c;但是由于Date类不便于实现国际化&#xff0c;所以从JDK1.1版本开始&#xff0c;推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。1、使用Date类代表当前系统时间Date d new Date();Sy…

Jupyter Notebook使用教程

1、启动 在终端中输入以下命令&#xff1a; jupyter notebook --allow-root执行命令之后&#xff0c;在终端中将会显示一系列notebook的服务器信息&#xff0c;同时浏览器将会自动启动Jupyter Notebook。 启动过程中终端显示内容如下&#xff1a; $ jupyter notebook [I 08…

一次性理清JavaScript变量等高难度面试问题

主要是解决JavaScript中比较难懂的部分&#xff0c;当然了&#xff0c;这部分经常在面试题中露面&#xff0c;这篇文章主要是讲解解题思路&#xff0c;对新手会有很大帮助&#xff08;如果你仔细看的话&#xff09;。书籍方面&#xff0c;我看的是《你不知道的javascript》,精髓…

yolov3(一:模型训练)

第一部分&#xff1a;训练已有的voc datasets 搞清楚该算法的模型训练流程 Darknet是Joseph维护的开源的神经网络框架&#xff0c;使用C语言编写&#xff1a;https://pjreddie.com/darknet/yolo/ Darknet快速&#xff0c;易于安装&#xff0c;同时支持CPU和GPU计算&#xff1…

Ios生产证书申请(含推送证书)

一、Mac机上生成请求文件。 Mac机上点击证书助手 > 从证书颁发机构请求证书 > 得到CertificateSigningRequest.certSigningRequest请求文件&#xff08;此请求证书建议一直保存&#xff0c;因为根证书的生成需要使用此请求文件&#xff0c;根证书多个app可以使用一个&…

【Python】SyntaxError: unexpected EOF while parsing

找到错误的地方是 少打了半个括号 emmm 1、可能是语法问题&#xff0c;需要自己检查代码 2、可能是用python2.7来运行python3.0的代码不兼容

华为云家庭视频监控帮你一起守护家

设想一下&#xff1f;离开家了突然想起家里空调没关怎么办&#xff1f;家里没人有陌生人入侵了怎么办&#xff1f;不在家家里老人出事了怎么办&#xff1f; 不用愁&#xff0c;总有办法解决的&#xff0c;这些日常生活中极容易遇到的事情&#xff0c;没有分身术的时候&#xff…

SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm

matlab 编译loransac&#xff0c;lapack mex ranH.c时一直链接错误。 原来mex在编译多个文件时要把所有的C文件都列出来。命令如下&#xff1a; mex loransacH.mex.c ranH.c utools.c Htools.c lapwrap.c matutl.c rtools.c -ID:\lapack\headers\lapack -LD:\lapack - lcbia.l…

【Codeforces】1136C Nastya Is Transposing Matrices (矩阵转置)

http://codeforces.com/contest/1136/problem/C 第一个矩阵可否通过转置&#xff0c;变换成第二个矩阵&#xff0c;可以的话输出“YES”&#xff0c;不可以的话&#xff0c;输出“NO” 转置之后&#xff0c;对角线元素是不变的 用map&#xff0c;或者vector 都可以 #includ…

linux基础篇-02,linux时间管理date hwclock cal 简述

################################################时间管理1&#xff0c;date:系统时钟查看当前系统时间[rootJameszhan etc]# date2016年 11月 14日 星期一 20:16:37 CST################################################设定系统时间 2016年 07月 20日 星期三 10:30:00 CST…

Spark shuffle调优

Spark shuffle是什么Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区&#xff0c;从而得到一个新的RDD。也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分区。现在的spark版本默认使用的是sortshuffle;shuffle在哪里产生shuffle在spark的算子中产生,也就…

多传感器融合之滤波(一)——卡尔曼滤波(KF)推导

c参考资料&#xff1a;https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/ 卡尔曼滤波本质上是一个数据融合算法&#xff0c;将具有同样测量目的、来自不同传感器、(可能) 具有不同单位 (unit) 的数据融合在一起&#xff0c;得到一个更精确的目的测量值。 卡尔…

【HDU】1284 钱币兑换问题 (想一想)

http://acm.hdu.edu.cn/showproblem.php?pid1284 除以三&#xff0c;看最多能放多少个三分的硬币&#xff0c;加一表示全部都是一分的硬币着一种情况。之后用一个循环看一下&#xff0c;有多少种情况 因为确定了有几个三分&#xff0c;有几个两分&#xff0c;一分的也就自然…

抓取网页的脚本 【修复】

之前张耀老师的网页脚本由于51cto升级&#xff0c;课程列表页面改用javascript失效了笔者发现视频课程页面右边的列表都为静态化后的视频课程地址&#xff0c;遂将老师初始版本的脚本进行了修改&#xff0c;在对视频课程页面使用时结果正常&#xff0c;遂将及修改后的脚本和部分…

实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别?...

实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别? 实例规格 共享计算型 和 通用型(原独享), 如果同样是2核4G 或者4核8G ; 性能上有什么差异/差距大吗? 内存型比通用性性能好些&#xff0c;而且CPU和内存配比&#xff1a; 通用型为1&#xff1a;2&…

yolov3(二:车牌识别)

0.按照&#xff1a;https://blog.csdn.net/Darlingqiang/article/details/103889245步骤训练自己的模型 1.下载[data.zip]&#xff1a;链接: https://pan.baidu.com/s/1NahLmB5YajUJT_Gk1OgN7A 提取码: 8888 2.进入data/voc目录下运行voc_label.bat重新生成2019_train.txt, 201…

[转]CSS hack大全详解

转自&#xff1a;CSS hack大全&详解 1、什么是CSS hack?CSS hack是通过在CSS样式中加入一些特殊的符号&#xff0c;让不同的浏览器识别不同的符号&#xff08;什么样的浏览器识别什么样的符号是有标准的&#xff0c;CSS hack就是让你记住这个标准&#xff09;&#xff0c;…

【Python】打印魔方阵

1.将“1”放在第一行&#xff0c;中间一列&#xff1b; 2.从2开始至N*N各数按如下规律&#xff1a; 每一个数存放的行比上一个数的行减1&#xff1b; 每一个数存放的列比上一个数的列加1&#xff1b; 3.当一个数行为1&#xff0c;下一个数行为N; 4.当一个数列数为N,下一个…

读书笔记:《图解HTTP》第三章 HTTP报文

原文地址博客积累地址 HTTP报文的作用 HTTP报文时是HTTP进行请求和响应时用来交换信息的&#xff0c;可以理解它为搬东西的包裹&#xff0c;来搬运交换的信息报文流 HTTP报文在HTTP应用程序&#xff08;客户端、服务器、代理&#xff09;之间发送数据块&#xff0c;这些数据块以…