1.1 分布式和集群

分布式一定是集群,但是集群不一定是分布式。

单体应用:所有服务写在一个机器上。(用户、支付、物流、商品)。

分布式:各个子系统是一个服务。(拆分系统)

集群:多个实例一起工作。

分布式一定是集群,集群不一定是分布式

 

 

1.2 一致性Hash算法

HD5(加密)

普通hash算法存在的问题

  • 浪费空间
  • 相同内容,存不了同样的数据

改进:

1,6,7,8 对5 取余数

1)可以对数区模运算

2)开放寻址法。

如果空闲,可以向前、先后找空闲

3)拉链法

横向放不下,纵向放置链表

4)除留余数法

H = H*a + x%b

 

1.3 Hash算法负载均衡算法应用

应用场景

1)负载均衡(Nginx)

ip或者sessionid跟机器数区模运算,可以实现会话粘滞

分布式存书(redis)

hash(key)%3=index

 

1.4 一致性hash算法

1)1~2**32-1 组成一个闭合环。

2)集群ip地址求hash值hash(ip),

3)顺时针算 hash(user)最近的 hash(ip)

 

1.6 扩容,缩容

1)普通hash算法如果扩容,缩容 % 服务器数目的话,所有节点都要重新算,重新分配

2)一致性hash算法只影响从 服务器hash(ip1) ~ hash(ip2)之前的逆时针用户

 

1.7 一致性Hash虚拟节点

如果够成的Hash环分布不均匀容易有数据倾斜问题。可以用虚拟节点解决。

虚拟节点:对现有ip计算多个hash值。(好像这个hash环增加了ip一样)

 

2.1 时钟不同步问题

可以从前向后带时间

可以设置为处理的服务器时间

可以选一个服务器用来记录时间

数据混乱。

 

3.1 为什么需要分布式ID

可能导致数据重复

 

3.2 分布式ID生成方案 UUID

直接用java带的接口。缺点:太长,没规律

 

3.3 分布式ID生成方案数据库方式

去找一个数据库。有一张表,需要的时候就插入一个记录,生成一个唯一id

 

3.3 分布式ID生成方案雪花算法

时间戳+机器码+随机数

 

4.1 分布式调度问题