zoukankan      html  css  js  c++  java
  • 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所特有的。相同的概念和物理限制适用于所有类型的数据库和系统。和以前一样,这个事实有时候在闪亮的商业营销论文里静静地被隐藏和被忽视。尽管如此,物理定律是不变的。这适用于商业和开源软件。]

             最重要的一点,您必须记住的是:在复制环境中,带宽不总能解决性能问题。在许多设置中,延迟至少和带宽一样重要。

  • 相关阅读:
    使用RestTemplate进行服务调用的几种方式
    springmvc学习指南 之---第32篇 mybatis 嵌套的处理
    springmvc学习指南 之---第31篇 使用墨客进行测试报错
    springmvc学习指南 之---第30篇 异常的全局处理
    Effective Java 阅读笔记--之(一) 建造者模式(Builder)
    使用mybatis-generator.xml 生成PO 对象
    springmvc学习指南 之---第29篇 springmvc 返回json对象, 不想创建类的前提下
    springmvc学习指南 之---第28篇 springmvc的controller 如何解析视图view? 如何解析json,html,jsp?
    springmvc学习指南 之---第27篇 spring如何实现servlet3.0无web.xml 配置servlet对象的
    springmvc学习指南 之---第26篇 在idea中如何debug跟踪到tomcat内部代码
  • 原文地址:https://www.cnblogs.com/songyuejie/p/4743290.html
Copyright © 2011-2022 走看看