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. 第一章 spring核心概念

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

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

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

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

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

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

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

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

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

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

    在这里添加一个slave,真的有一个很好的可扩展性的策略,这基本上足以满足大多数现代应用程序.使用一台服务器的情况下,许多应用程序就会完美地运行,您可能想添加以副本以给基础设施增加一些安全,但在许多情 ...

随机推荐

  1. 解决自定义Shiro.Realm扩展类不能用注解(@Resource或@Autowire)自动装配的问题

    问题产生原因:加载Realm时其他Spring配置文件(xml)尚未加载,导致注入失败. 解决方法:编写一个设置类把注入工作提前完成. package com.xkt.shiro import org ...

  2. PHP 5.4 已废弃 magic_quotes_gpc,PHP安全转义函数详解(addslashes 、htmlspecialchars、htmlentities、mysql_real_escape_string、strip_tags)

    1. addslashes() addslashes()对SQL语句中的特殊字符进行转义操作,包括(‘), (“), (), (NUL)四个字符,此函数在DBMS没有自己的转义函数时候使用,但是如果D ...

  3. Wampserver 2.5 多站点配置方法

    写在开头:本文适用于wampserver2.5版本,和wamp的老版本配置有语法上的区别,笔者正是因为被老版本的配置办法给整迷糊了所以才总结了一篇针对2.5版本的配置方法,如果您还停留在1.x或着已经 ...

  4. JavaScript中的apply和call函数详解(转)

    每个JavaScript函数都会有很多附属的(attached)方法,包括toString().call()以及apply().听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,J ...

  5. H3C汇聚层交换机认证在线人数展示系统之需求说明和功能点说明

    一.需求 (一)每五分钟查询一次交换机的连接情况: (二)每2.5分钟更新每栋楼的连接情况. 二.功能点 序号 功能点说明 待定 完成 未完成 完成时间 预计用时(min) 实际用时(min) 备注 ...

  6. C++中static类成员

    static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在 ...

  7. Linux学习之CentOS(十)--虚拟机下的CentOS如何上网

    原地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/05/3001148.html 这篇随笔应该说跟CentOS的学习关系不是很大, ...

  8. java语法糖3 深入剖析Java中的装箱和拆箱

    装箱 在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new Integer(10); 而在从Java SE5开始就提供了自动装箱的特性, ...

  9. lucene 过滤结果

    package cn.itcast.h_filter; import java.util.ArrayList; import java.util.List; import org.apache.luc ...

  10. hadoop 伪分布模式的配置

    转自 http://blog.csdn.net/zhaogezhuoyuezhao/article/details/7328313 centos系统自带ssh,版本为openssh4.3 免密码ssh ...