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)的更多相关文章

  1. PostgreSQL Replication之第九章 与pgpool一起工作(7)

    9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用Pos ...

  2. PostgreSQL Replication之第九章 与pgpool一起工作(6)

    9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样 ...

  3. 第一章 zookeeper基础概念

    1.ZooKeeper是什么 ZooKeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了统一命名服务. 配置管理和分布式锁等分布式的基础服务.在解决分布式数据一致性方面, ZooKeepe ...

  4. Vue.js-01:第一章 - 一些基础概念

    一.前言 Vue.React.Angular,当今前端界的三驾马车,作为传统的后端程序员,前端再也不是我们想的那种切切图就可以了,第一次接触的话,先了解了解一些基础的概念. 学习系列目录地址:http ...

  5. 第一章 spring核心概念

    一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...

  6. HTML与CSS入门——第一章 理解Web的工作方式

    知识点: 1.万维网的简史 2."网页"的含义,以及该术语不能反映所涉及的所有内容的原因 3.如何从你的个人计算机进入别人的浏览器 4.选择Web托管提供商的方法 5.不同的Web ...

  7. PostgreSQL Replication之第十四章 扩展与BDR

    在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项 ...

  8. PRML读书会第一章 Introduction(机器学习基本概念、学习理论、模型选择、维灾等)

    主讲人 常象宇 大家好,我是likrain,本来我和网神说的是我可以作为机动,大家不想讲哪里我可以试试,结果大家不想讲第一章.估计都是大神觉得第一章比较简单,所以就由我来吧.我的背景是统计与数学,稍懂 ...

  9. PostgreSQL Replication之第十三章 使用PL/Proxy扩展(3)

    13.3 聪明地扩展与处理集群 建立集群不是您面临的唯一任务.如果所有的事情都做完了并且系统已经运行了,您可能需要到处调整配置. 13.3.1 添加和移动分区 一旦一个集群启动并运行,您可能会发现您的 ...

随机推荐

  1. php如何防止图片盗用/盗链的两种方法(转)

    图片防盗链有什么用? 防止其它网站盗用你的图片,浪费你宝贵的流量.本文章向大家介绍php防止图片盗用/盗链的两种方法 Apache图片重定向方法 设置images目录不充许http访问 Apache服 ...

  2. 在MySQL向表中插入中文时,出现:incorrect string value 错误

    在MySQL向表中插入中文时,出现:incorrect string value 错误,是由于字符集不支持中文.解决办法是将字符集改为GBK,或UTF-8.      一.修改数据库的默认字符集   ...

  3. git clone --early EOF

    出现这个问题可能需要重新检查以下方面: 1. Android studio Git 的安装地址:  ..../Git/cmd/git.exe 记得在环境变量 --Path 中进行配置: ,..../G ...

  4. python profile

    一.profile,cProfile 1. python -m cProfile myprogram.py python -m profile myprog.py2. 使用import profile ...

  5. asp.net中分页与存储过程的一些总结

    一.接上文,使用的是jquery AJAX 进行分页 分页存储过程代码如下: ALTER PROCEDURE [dbo].[USP_GetAlbumByPage] @pageIndex int,--当 ...

  6. 在Outlook中设置QQ邮箱

    原本以为在Outlook中设置QQ邮箱没多大难度,但我错了,估计错了腾讯的麻烦程度,故记录下来. ----- 打开Outlook 2013(Outlook 2010也差不多),若是第一次打开会提示你设 ...

  7. memcache 集群

    memcache 是一个分布式的缓存系统,但是本身没有提供集群功能,在大型应用的情况下容易成为瓶颈.但是客户端这个时候可以自由扩展,分两阶段实现.第一阶段:key 要先根据一定的算法映射到一台memc ...

  8. NumPy快速入门笔记

    我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,我快速了解了一下NumPy这个科学计算库的使用方法.下面记录相关学习笔记. 简介 NumPy是一个科学计算库.结合Py ...

  9. Java成员变量与局部变量的区别

    从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数:成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所 ...

  10. (poj 2253) Frogger 最短路上的最大路段

    题目链接:http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of a ...