PostgreSQL Replication之第一章 理解复制概念(1)
PostgreSQL Replication系列翻译自PostgreSQL Replication一书
在本章中,将会介绍不同的复制概念,您会了解哪些类型的复制对哪一种实用场景是最合适的。 在本章的最后,您将能够判断某个概念在各种情况下是否是可行的。
我们在本章将介绍以下主题:
• CAP理论
•复制的物理限制
•为什么延迟有影响
•同步和异步复制
•拆分和复制
在我们使用PostgreSQL实际工作之前,我们将引导您完成一些非常基本的与复制相关想法和事实。
1.1 CAP理论和物理限制
您可能会问,为什么一个理论可以在一本书这样一个突出的地方被发现,这被认为是非常实用的。那么,有一个很简单的理由:一些商业数据库厂商的一些看起来很好看的市场方案留给您的印象是一切皆有可能,是没有任何严重限制的,容易做的。这并不是事实;每一个软件供应商必须处理这些限制。没有任何办法绕过自然规律,市场并不能克服自然。
在本章中,您将被介绍到所谓的CAP理论。在解决一些不能被变成现实的需求的情况下,理解这一理论的基本思想是必不可少的。
1.1.1 理解CAP理论
在我们深入到细节之前,我们必须讨论CAP的实际意义。CAP是一下三个特征的缩写:
Consistency(一致性):该特征表明集群中的所有节点在同一时刻是否看到了相同的数据。
Availability(可用性):该特征表明是否所有的请求都可以收到一个返回结果。用户是否可以认为一个集群中的所有节点是可用的?在两台机器之间拆分数据或状态信息。发出一个请求,机器1有一部分数据,机器2拥有剩余部分的数据。如果任何一台机器出现故障,并不是所有的请求都可以被满足,因为并不是所有的数据或状态信息在任何一台机器上都是可用的。
Partition tolerance(分区容忍性):该特征表明在工作过程中如果有任意的消息丢失,系统是否能够继续工作。当一个系统不再接受访问时(考虑一个网络连接失败),就会发生一个网络分区事件。考虑分区容忍性的一个不同的方法是把它作为消息传递。如果一个专用系统不能再发送/接收消息到/从其他系统,它已被有效地从网络中除去。
为什么这前三个要点与普通用户有关呢?坏消息是一个复制(或分布)系统只能同时提供2/3的特征。
在理论上是不可能同时提供一致性,可用性,分区容忍性。正如您将在本书后面看到的,这对系统的的安全和可用的布局有显著的影响。根本没有如此简单的事情作为解决所有复制相关的问题。当您规划一个大规模的系统,您可能要想出不同的概念去满足您的需求,这些概念取决于您的需要。
[PostgreSQL,Oracle,DB2等等将为您提供Cap,而NoSQL系统,例如,MongoDB 或者 Cassandra 将为您提供cAP。这就是为什么NoSQL通常被称为是最终一致的。]
1.1.2 为什么光速重要
光速不仅是一个理论问题,它确实会对您的日常生活产生影响。更重要的是,它对您找到适合您集群的解决方案有重要的含义。
我们都知道,宇宙的极限速度是光速。那么,为什么要在乎?好吧,让我们做一个简单的心里实验。让我们假设我们的数据库服务器以3GHz的时钟速度运行。
在您的CPU的一个时钟周期内光可以走多远的距离?如果您计算的话,您会发现光在每个时钟周期(纯真空)走的距离为10厘米。我们可以假设在CPU内的电信号会比在真空中的光的幅度较慢。核心思想是:一个时钟周期10厘米?一点都不多。
为了我们的心理实验,现在让我们考虑不同的距离:
•两个CPU之间的距离
•您的服务器到隔壁其他服务器的距离
•您在欧洲中部的服务器到中国服务器的距离
考虑到在电路板上的一个CPU核的大小,您可以假设从CPU的一个部分发送一个信号(尽管他没有光的速度快)到其他部分相当地快。计算已经在您的CPU的一级缓存中的两个数据的和它根本用不了一百万个时钟周期。
但是,如果您必须从一个服务器发送一个信号到其他服务器发生了什么?您可以安全地假设从服务器A发送一个信号到隔壁的服务器B需要花费很长时间,因为电缆是比较长的。通常情况下,它超过10厘米。除此之外,网络交换机和别的网络组件将产生额外的延迟。(此处电缆的长度不是电缆的带宽)
[这里我说的是电缆的长度,而不是关于它的带宽。]
从欧洲发送消息(或事物)到中国,通常情况下和发送一些数据到隔壁的服务器相比要耗费更多的时间。再次,重要的是,这里的数据量和所谓的延迟时间并不相关。
1.1.3 远程传输
让我尝试通过给出一个非常简单的例子来解释延迟的概念。假设您是欧洲人,您在发送一封信到中国。您会很容易接受这个事实:您的信的大小并不是这里的限制因素。不论您的信是两页或二十页,并没有任何区别;到达目的地所花费的时间是基本相同的。此外,如果您同时发送一封,两封,十封信也是没有区别的。考虑到合理的信的数量,运送东西到中国的飞机(带宽)的大小通常不是问题。但是,所谓的往返很可能是一个问题。如果您依赖来自中国信件的响应来继续您的工作,您很快就会发现自己等了很久。
1.1.4 为什么延迟有影响
同样的概念也适用于复制(replication):如果您从欧洲发送数据块到中国,您应该避免等待响应。如果两台在同一个机架上的服务器之间发送数据块,您可能可以等待响应,因为您的电信号会足够快使信号即使返回。
[本节中描述的延迟的基本问题不是PostgreSQL所特有的。相同的概念和物理限制适用于所有类型的数据库和系统。和以前一样,这个事实有时候在闪亮的商业营销论文里静静地被隐藏和被忽视。尽管如此,物理定律是不变的。这适用于商业和开源软件。]
最重要的一点,您必须记住的是:在复制环境中,带宽不总能解决性能问题。在许多设置中,延迟至少和带宽一样重要。
PostgreSQL Replication之第一章 理解复制概念(1)的更多相关文章
- PostgreSQL Replication之第一章 理解复制概念(2)
1.2不同类型的复制 现在,您已经完全地理解了物理和理论的局限性,可以开始学习不同类型的复制了. 1.2.1 同步和异步复制 我们可以做的第一个区分是同步复制和异步复制的区别. 这是什么意思呢?假设我 ...
- PostgreSQL Replication之第一章 理解复制概念(3)
1.3 使用分片和数据分配 本节您将了解基本可扩展性技术,例如数据库分片.分片被广泛应用于高端系统并提供一个简单而且可靠的扩展设置方式来向外扩展.近年来,分片已经成为一种扩大专业系统规模的标准方式. ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(1)
在前面的章节中,我们已经理解了各种复制概念.这不仅仅是一个为了接下来将要介绍的东西而增强您的意识的理论概述,还将为您介绍大体的主题. 在本章,我们将更加接近实际的解决方案,并了解PostgreSQL内 ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(3)
2.3 理解一致性和数据丢失 挖掘PostgreSQL事务日志而不考虑一致性是不可能的.在本章的第一部分,我们已经大体上解释了事务日志的基本思想.您已经知道,无需事先的日志改变的能力,使数据处于一种好 ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(5)
2.5 XLOG的内部结构 我们将使用事务贯穿本书,并让您在技术层面上更深地洞察事情是如果工作的,我们已经增加了这部分专门处理XLOG的内部工作机制.我们会尽量避免前往下降到C级,因为这将超出本书的范 ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(4)
2.4 调整检查点和XLOG 目前为止,这一章已经提供深入洞察PostgreSQL如何写入数据,一般来说,XLOG是用来干什么的.考虑到这方面的知识,我们现在可以继续并学习我们能做些什么来使我们的数据 ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(2)
2.2 XLOG和复制 在本章中,您已经了解到PostgreSQL的事务日志已经对数据库做了所有的更改.事务日志本身被打包为易用的16MB段. 使用这种更改集来复制数据的想法是不牵强的.事实上,这是在 ...
- 20190813 On Java8 第一章 对象的概念
第一章 对象的概念 抽象 Alan Kay 总结了对象的五大基本特征 万物皆对象. 程序是一组对象,通过消息传递来告知彼此该做什么. 每个对象都有自己的存储空间,可容纳其他对象. 每个对象都有一种类型 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(1)
在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...
随机推荐
- Javascript/jQuery根据页面上表格创建新汇总表格
任务背景及需求 按页面上的现成表格,用js生成新的统计表格如下: 实现思路 1,把表格数据抽取出来生成json数组 2,计算表格总数并创建空表格 3,历遍json数组把数据动态插入所有的表格,设值/a ...
- Spring Autowired 注入失败总是Null
报错:NullPointerException 分析:错误原因是注入失败? <context:annotation-config/> <context:component-scan ...
- 服务端的GET、POST请求
一.HttpClient方式,程序集 System.Net.Http.dll GET: HttpClient httpClient = new HttpClient(); string result ...
- Flask 教程
官方文档 推荐教程 环境 pip install virtualenv cd proj_fold virtualenv venv . venv/bin/activate for *unix or ve ...
- asp.net 数据绑定 -- 时间格式
<asp:TemplateField HeaderText="日期" SortExpression="Date"> & ...
- SQL 执行进展优化
聚集索引扫描 SELECT * FROM C_SY_Ownedstorm 聚集索引扫描比表扫描快 聚集索引扫描:发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件等操作时,效率会较好. 表扫描 ...
- ffmpeg(2.6) rockplayer android 下编译 小记.
最近因为一些需求,开始学习 ffmgeg 在android 上使用. 使用的环境: 1,VMware V8 虚似机 安装的 FedoraV18 系统.(下载地址,请baidu),虚似机,最好有20-3 ...
- MySQL查询语句(select)详解(2)
7.子查询 当进行查询的时候,需要的条件是另外一个select语句的结果,这时候就要用到子查询 用于子查询的主要关键字有:in,not in,=,!=,exists,not exists等. 以下两张 ...
- bzoj1745: [Usaco2005 oct]Flying Right 飞行航班(贪心+map)
之前做过一道基本一样的题目,抽象出来就是有个容量为c的载体,一些线段上某个点到另一个点要运输w个东西,求从头到尾最多能运多少东西. 这种模型可以用贪心做,用map,map[r]表示r的那个点,我们准备 ...
- html5新特性
这一篇博文不会告诉你怎么去使用html5的新特性,只会给你总结一下新特性------对于好学的人可以把这篇文章当做一个目录 对于初接触的人来说是一个导向 对于已经接触过的人来说是一个检测你掌握程度的检 ...