分布式架构解决方案
- 分布式架构问题和解决方案
- 1.一致性hash算法
- Hash算法最经典就是hash表,如果设计合理,时间复杂度接近O(1)
- 第一种方案:直接把数据放下标,一次查询到结果。
- 缺点是浪费空间,如果重复过多,存储不了这么多内容
- 第二种方案:根据数组空间取模存放,叫除留余数法。是简单的hash算法
- 第三种方案:在以上取模空间下放链表
- 普通hash算法的问题,如果节点数量发生变化,取模值会改变
- 一致性hash hash值为0-2的32次方的hash环
- 一致性hash 节点少时会有数据倾斜问题,可以用虚拟节点解决
- 集群时钟同步问题
- 时钟不同步会导致很多问题
- rpm -qa|grep ntpdate
- ntpdate -u ntp.api.bz
- 可以使用linux的定时任务,同步时间
- 如果集群中有部分机器不能联网,可以把某一台可以联网的机器做为时间服务器
- 分布式唯一Id
- 1.UUID
- 2.数据库
- 3.雪花算法
- long型64位数字,1位符号位+41位时间戳+10bit机器id+序列号10bit
- 4.redis incr
- 分布式调度问题
- 定时任务与消息队列的区别
- 共同点
- 1.异步处理
- 2.解耦
- 3.流量肖峰
- 不同
- 定时任务是时间驱动,MQ是事件驱动
- Quartz任务调度框架,单应用
- Elastic-job(当当网开源分布式调度框架):依赖ZK
- 分布式调度协调
- 丰富的调度策略
- 弹性扩容
- 失效转移
- 错过执行作业重新触发
- 支持并行调度
- 作业分片一致性
- 用ZK的leader节点来记录当前执行的节点,
- instances是所有实例
- 轻量级仅仅依赖zk,all in jar集成在应用中,任务分片,自动分发节点,高可用
- session一致性问题