mirror of
https://github.com/doocs/advanced-java.git
synced 2026-08-18 10:43:29 +08:00
feat: update duplicate files and generate pagination
移除冗余文件,激活页面底部导航
This commit is contained in:
@@ -27,11 +27,11 @@ redis cluster,主要是针对**海量数据+高并发+高可用**的场景。r
|
||||
|
||||
**集中式**是将集群元数据(节点信息、故障等等)几种存储在某个节点上。集中式元数据集中存储的一个典型代表,就是大数据领域的 `storm`。它是分布式的大数据实时计算引擎,是集中式的元数据存储的结构,底层基于 zookeeper(分布式协调的中间件)对所有元数据进行存储维护。
|
||||
|
||||

|
||||

|
||||
|
||||
redis 维护集群元数据采用另一个方式, `gossip` 协议,所有节点都持有一份元数据,不同的节点如果出现了元数据的变更,就不断将元数据发送给其它的节点,让其它节点也进行元数据的变更。
|
||||
|
||||

|
||||

|
||||
|
||||
**集中式**的**好处**在于,元数据的读取和更新,时效性非常好,一旦元数据出现了变更,就立即更新到集中式的存储中,其它节点读取的时候就可以感知到;**不好**在于,所有的元数据的更新压力全部集中在一个地方,可能会导致元数据的存储有压力。
|
||||
|
||||
@@ -71,7 +71,7 @@ ping 时要携带一些元数据,如果很频繁,可能会加重网络负担
|
||||
#### hash 算法
|
||||
来了一个 key,首先计算 hash 值,然后对节点数取模。然后打在不同的 master 节点上。一旦某一个 master 节点宕机,所有请求过来,都会基于最新的剩余 master 节点数去取模,尝试去取数据。这会导致**大部分的请求过来,全部无法拿到有效的缓存**,导致大量的流量涌入数据库。
|
||||
|
||||

|
||||

|
||||
|
||||
#### 一致性 hash 算法
|
||||
一致性 hash 算法将整个 hash 值空间组织成一个虚拟的圆环,整个空间按顺时针方向组织,下一步将各个 master 节点(使用服务器的 ip 或主机名)进行 hash。这样就能确定每个节点在其哈希环上的位置。
|
||||
@@ -82,7 +82,7 @@ ping 时要携带一些元数据,如果很频繁,可能会加重网络负担
|
||||
|
||||
燃鹅,一致性哈希算法在节点太少时,容易因为节点分布不均匀而造成**缓存热点**的问题。为了解决这种热点问题,一致性 hash 算法引入了虚拟节点机制,即对每一个节点计算多个 hash,每个计算结果位置都放置一个虚拟节点。这样就实现了数据的均匀分布,负载均衡。
|
||||
|
||||

|
||||

|
||||
|
||||
#### redis cluster 的 hash slot 算法
|
||||
redis cluster 有固定的 `16384` 个 hash slot,对每个 `key` 计算 `CRC16` 值,然后对 `16384` 取模,可以获取 key 对应的 hash slot。
|
||||
@@ -91,7 +91,7 @@ redis cluster 中每个 master 都会持有部分 slot,比如有 3 个 master
|
||||
|
||||
任何一台机器宕机,另外两个节点,不影响的。因为 key 找的是 hash slot,不是机器。
|
||||
|
||||

|
||||

|
||||
|
||||
### redis cluster 的高可用与主备切换原理
|
||||
redis cluster 的高可用的原理,几乎跟哨兵是类似的。
|
||||
|
||||
Reference in New Issue
Block a user