分布式全局自增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......