zoukankan      html  css  js  c++  java
  • 分布式基础

    拉勾教育版权所有:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=69

    2020-04-10

    CAP理论

    C Consistency 一致性:“所有节点同时看到相同的数据”。所有节点拥有数据的相同版本。

    A Availability 可用性:“任何时候,读写是成功的”。服务一直可用,响应时间正常。SLA(服务水平协议)

    P Partition Tolerance 分区容忍性(确定):“当部分节点出现消息丢失或者分区故障的时候,分布式系统任然能够继续运行”。

    CP架构,放弃可用性,追求一致性

    ZooKeeper,核心算法Zab

    AP架构,放弃一致性,追求分区容错性和可用性

    Eureka

    Base理论

    由CAP理论演化而来,放弃强一致性,追求分区容错和可用性,是CAP的实际应用。

    1. 基本可用(Basically Available):分布式系统出现不可预知故障时,允许损失部分可用性(响应时间延长、服务降级)

    2. 软状态(Soft-state):相较于ACID事务的原子性(硬状态),允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时

    3. 最终一致性(Eventually Consistent):在一定时间期限后,所有节点副本保持数据一致性

    Quorum机制,选举算法(https://blog.csdn.net/jeffsmish/article/details/54171812)

    无法保证强一致性,用来保证数据冗余和最终一致性的投票算法,在Paxos、Raft和Zookeeper的Zab算法中有许多应用。

    Paxos算法(https://my.oschina.net/u/150175/blog/2992187)

    一致性算法,CP

    “这个世界上只有一种一致性算法,那就是Paxos算法,其它的算法都是残次品。”Google Chubby,Mike Burrows

    Zab算法(Zookeeper)

    Paxos是理论,Zab是实践

    Zab增加了崩溃恢复的功能。

    2020-04-19

    区块链共识问题

    区块链本质是一个去中心化的数据库。

    CAP中的Consistency,侧重内容在时间顺序上的一致和统一。COnsensus(共识)指许多参与者对某项内容达成共识。

    拜占庭将军问题

    一版在网络通信中,把节点故障,也就是信道不可靠的情况称为“非拜占庭错误”,恶意响应,也就是系统被攻击,传递错误消息称为“拜占庭错误”。

    核心:所有将军如何能达成共识去攻打拜占庭帝国。

    拜占庭将军问题、Paxos算法和逻辑时钟都是由Leslie Lamport提出的。其获得了2013年的图灵奖。

    POW(Proof of Work)工作量证明

    POS权益证明

    DPOS委托权益证明

    分布式事务

    数据库事务:ACID

    脏读:一个事务中访问到了另外一个事务未提交的数据。

    不可重复读:一个事务读取同一条记录2次,得到的结果不一致。

    幻读:一个事务读取2次,得到的记录数不一致。

    数据库隔离级别

    SQL 标准根据三种不一致的异常现象,将隔离性定义为四个隔离级别(Isolation Level),隔离级别和数据库的性能呈反比,隔离级别越低,数据库性能越高;而隔离级别越高,数据库性能越差

    (1)Readuncommitted读未提交

    在该级别下,一个事务对数据修改的过程中,不允许另一个事务对该行数据进行修改,但允许另一个事务对该行数据进行读,不会出现更新丢失,但会出现脏读、不可重复读的情况。

    (2)Read committed 读已提交

    在该级别下,未提交的写事务不允许其他事务访问该行,不会出现脏读,但是读取数据的事务允许其他事务访问该行数据,因此会出现不可重复读的情况。

    (3)Repeatable read 可重复读

    在该级别下,在同一个事务内的查询都是和事务开始时刻一致的,保证对同一字段的多次读取结果都相同,除非数据是被本身事务自己所修改,不会出现同一事务读到两次不同数据的情况。因为没有约束其他事务的新增Insert操作,所以 SQL 标准中可重复读级别会出现幻读。

    值得一提的是,可重复读是 MySQL InnoDB 引擎的默认隔离级别,但是在 MySQL 额外添加了间隙锁(Gap Lock),可以防止幻读。

    (4)Serializable 序列化

    该级别要求所有事务都必须串行执行,可以避免各种并发引起的问题,效率也最低。

    对不同隔离级别的解释,其实是为了保持数据库事务中的隔离性(Isolation),目标是使并发事务的执行效果与串行一致,隔离级别的提升带来的是并发能力的下降,两者是负相关的关系。

    分布式事务产生原因

    存储层拆分

    服务层拆分

    解决方案

     

     

  • 相关阅读:
    版本管理
    图解电路
    Java语言基础
    电工学入门
    11个例子教会你看电路图
    如何提高STM32的学习效率
    开发板入门
    Altium Designer
    电子设计从零开始
    推荐书籍
  • 原文地址:https://www.cnblogs.com/godlessspirit/p/12675608.html
Copyright © 2011-2022 走看看