分布式基础知识文章索引

1. 介绍

最近看到一些文章不错,这里推荐下。下面每个标题都对应一片文章,我都对其内容做了简单几句话的总结。大家可以点击查看原文。

2. 分布式系统理论基础 - 选举、多数派和租约

原文地址: 分布式系统理论基础 - 选举、多数派和租约

该文主要理解以下的选举算法:

bully选举算法:最基本的选举算法,序号最大的作为leader。缺点是网络分区的时候可能导致有多个leader。

多数派方法:弥补bully选举算法的缺点,网络分化的时候只有具备多数派节点的部分才可能选出leader,这避免了多leader的产生。

租约:就是判断leader是否挂了的时候,设定......

时钟与分布式系统

1. 逻辑时钟和物理时钟

在分布式场景中,我们需要时间来判断不同节点上事件发生的先后顺序。

物理时钟可以用严格的绝对时间来表明事件的发生顺序,但是在分布式环境中,各个节点由于网络等因素无法做到完全一致的时间。即使使用NTP时间同步,也会有纳秒的误差。在这个误差时间内,可能会发生很多事件,那么这些事件的先后顺序就很难判断了。

Time, Clocks and the Ordering of Events in a Distributed System这篇论文的作者Leslie Lamport 在1978年提出逻辑时钟的概念。在分布式环境中,通过一系列规则来定义逻辑时钟的变化。......

分布式全局自增ID

1. 全局自增ID啥用?

MQ有序消费

MVCC实现

分表分库场景

more...

2. 生产全局唯一ID方法

2.1 数据库自增ID

当服务使用的数据库只有单库单表时,可以利用数据库的auto_increment来生成全局唯一递增ID.

优势:

简单,无需程序任何附加操作

保持定长的增量

在单表中能保持唯一性

劣势:

高并发下性能不佳,主键产生的性能上限是数据库服务器单机的上限。

水平扩展困难,在分布式数据库环境下,无法保证唯一性。

2.2 UUID

一般的语言中会自带UUID的实现,比如Java中UUID方式UUID.r......

聊聊一致性哈希

其实,这次主要不是我聊。而是推荐一篇知乎专栏的文章:聊聊一致性哈希

我这里就简单讲下一致性哈希应该明白的几个重点:

使用一致性哈希可以避免重新计算分布(分布式多节点场景下,重新分布代价可是很大的);

使用一致性哈希可以让分布式系统无锁化、无状态化(通过引入虚拟桶来避免哈希碰撞;HASH到哪里都确定了,一人一个坑)

跳表(logN)来改进HASH到桶的时间复杂度。(PS: 普通的HASH算法,都是常量时间)

环状来保证顺利找到要HASH的桶

防止雪崩效应。采用一致性哈希,如果一个节点由于压力太大挂了,不会发生大量数据HASH到下一个节点上,引起压力。如果按照原来的哈希方式......

zookeeper vs Eureka

1.介绍

现在提到做服务发现、分布式协调同步可以想到很多工具:zookeeper、eureka、etcd、Consul(直接集成了服务发现的系统,不用自己实现)等等。很多时候选择哪一个,关键是看对CAP的选择。

本篇主要简单讨论下zk和eureka这两个。

2. 关于服务发现

根据 服务发现方案梳理及NetflixEureka简介一文可知,做分布式下的服务发现还是使用eure......