分布式系统

为什么对数据的复制有需求

  1. 为了提升系统可用性,防止单点故障导致系统不可用
  2. 提升系统整体性能,可以通过负载均衡对用户的操作进行分发

    数据复制带来的问题

    数据复制会带来数据一致性问题,就是指对一个副本进行更新时,也能保证更新其他副本,否则数据就会存在不一致的问题

    解决问题的一种思路

    将写入的动作阻塞,知道数据复制完成,才完成写入动作。
    但这回造成性能急剧下降,如果一直在更新,那就一直在阻塞。
    无法找到既能保证系统一致性,又不影响系统性能的方案。
    在这种背景下,总结出如下一致性级别

    一致性级别

    强一致性

    就像上面的解决方案,对系统影响比较大

    弱一致性

    不承诺在写入后马上能读到写入的值,也不承诺过多久会数据一致,但会尽可能保证到某个时间级别后(比如秒级别),数据达到一致状态。
    还可以细分为:
  • 会话一致性:对同一个客户端的会话保证马上读到最新写入的值
  • 用户一致性:对同一个用户保证马上读到最新写入的值

    最终一致性

    属于弱一致性,但他承诺在一定时间内,能够达到一个数据一致的状态。
    之所以单独提出来,是因为他是现在大型分布式系统中比较推崇的数据一致性模型。

    分布式特点

    分布性

    空间上可以随意分布

    对等性

    没有主从之分,每个节点的能力都是一样的

    并发性

    有更高的并发性能,但也会并发操作一些共享资源,比如数据库,其中也会存在一些问题

    缺乏全局时钟

    缺乏一个全局的时钟序列控制,很难定义两个事件的先后

    故障总是会发生

    系统结构复杂了,故障肯定也会变多
    墨菲定律