分布式协调与同步
- 分布式互斥的实现方案:
- 集中算法, 也叫中央处理, 容易出现单点故障,
- 分布式算法, 算法可用性比较低, 容易产生通信风暴, 适合小的,变动少的架构, 比如hadoop的htfs
- 令牌环算法, 轮值, 用一个令牌实现, 有令牌的程序有权访问资源, 结束访问后传递令牌
- 分布式事务:两阶段提交, 三阶段提交
- 分布式锁:msyql, redis(setnx命令),zookeeper(有序的临时节点)
- 分布式结构分两种, 集中式和非集中式, 集中式比如k8s, master负责api, 调度,etcd存储worker信息, 而任务全部由work节点负责. 非集中式的比如redis cluster, zookeeper等, 每一个节点都是平等的, 投票选举主节点, 投票方式
分布式资源管理和负载调度
- 单层调度: 任务和资源一层调度, 比如Brog的调度有可行性分析和评分算法, 评分算法有最佳匹配(节点任务尽量满, 空出机器执行更大的任务), 和最差匹配(往不通的机器塞任务)
- 两层调度, 第一层调度资源, 第二层将资源与任务匹配, 比如Apache Mesos 和 Hadoop YARN,
Mesos负责收集节点的资源上报给框架, 框架进行任务和资源的匹配,下发下去
有两种资源调度算法: 最大最小公平算法, 主导资源公平算法 - 单层调度容易出点单点故障, 可扩展性低, 而二层调度呢, 第二层只能获取部分的资源信息, 无法获取全局的资源信息, 解决办法就是
分布式通信
- rpc远程调用, 涉及到tcp封装解封, 还有信息的序列化与反序列化
- 还要一种通信是发布订阅模式, 一条消息可以被多个消费者消费
分布式存储
- 哈希, 一致性哈希, 带负载的一致性哈希, 带虚拟节点的一致性哈希: 虚拟节点一致性哈希可以解决异构性问题
- 流量控制: 消息队列,漏桶策略和令牌桶策略。
- 漏桶策略适合场景:漏桶策略适用于间隔性突发流量且流量不用即时处理的场景
- 令牌桶策略:适用于有突发特性的流量,且流量需要即时处理的场景。
- 常见的故障检测方法是心跳机制
设计一个分布式系统
- 功能性需求, 谁使用, 怎么用
- 非功能性需求, qps, 每秒写入数, 每秒读取数, 数据同步延迟, 高可用
- 写入路径, 读取路径设计
- 技术选型
消息队列
- 术语叫消费偏移, 头指针减去尾指针就是消息数
限流的一些方法
- 常用的有令牌法, 漏桶法, 固定窗口法, 滑动窗口法