分布式核心原理解析
2023-09-24 00:09:39 0 举报
AI智能生成
分布式核心原理解析
作者其他创作
大纲/内容
分布式系统指标
性能
吞吐量
QPS查询数每秒:对应IM中对外所有thor接口的QPS
TPS事务数每秒:对应IM中并发消息量
BPS比特数每秒:对应IM上述两种场景的数据量,也可以理解为网卡吞吐量
响应时间:上行消息用户转圈时间&thor接口响应时间
完成时间:消息整体送达时间&thor接口响应时间
资源占用
空载资源占用:无负载时系统负载
满载资源占用:满负荷时系统负载
可用性
可用性的两种衡量指标
停止服务时间/总服务时间
请求失败次数/总请求次数
可拓展性
可扩展性的方向
垂直/纵向扩展:升级系统性能
水平/横向扩展:增加机器
分布式互斥
集中式算法
“临界资源”由一个集中协调者管理,其他应用需要通过协调者内部的队列依次获得临界资源访问权限
缺点
协调者性能会成为瓶颈&单点风险
适用场景
比较广泛,结合协调者内部的主备/选举等策略可提升可用性
分布式算法
“临界资源”的申请者,需要向其他所有潜在使用者发送资源访问请求并获得全部同意后,才可访问临界资源
缺点
大型系统中消息数量会指数级增加,会产生消息风暴
单点故障会导致集群不可用,可用性会比集中式更低
适用场景
临界资源使用频度较低,系统规模较小
令牌环算法
适用场景
系统规模较小,临界资源使用频度高且时间短
分布式选举
长者为大:Bully算法
ID最大的节点作为主节点
使用产品:MongoDB,使用最后操作时间戳作为ID
优点:选举速度快,复杂度低,易实现
缺点:所有节点需要知道全局节点信息,存储较多;长者节点抖动会导致集群频繁选举
民主投票:Raft算法
获得一半以上票数的节点为主节点,选举周期性进行或主节点故障时立即进行
使用产品:etcd集群管理器etcds
优点:选举速度快,复杂度低,易实现。不存在Bully长者抖动问题
缺点:每个节点需要可以互相通信,且需要有半数以上投票,通信量大
具有优先级的民主投票:ZAB算法
少数服从多数,ID大的节点优先成为主(数据ID最大者成为Leader,若数据ID相同,服务ID最大者成为Leader)
使用产品:ZooKeeper
优点:性能高,稳定性好,新节点加入不一定切主,减少抖动
缺点:容易产生广播风暴
三种选举算法对比
分布式共识
概念:分布式共识就是在多个节点均可独自操作或者记录的情况下,使得所有节点针对某个状态达成一致的过程
两个关键点
获得记账权
所有节点或服务器达成一致
分布式共识算法
PoW:以算力获得区块记账权
PoS:以系统权益代替算力来决定区块记账权
DPos:委托权益证明法。被社区选举的可信账户拥有记账权。选举成功的受托节点之间使用算力竞争。
分布式事务(飞书面试)
事务:包含一系列操作的,有边界的工作序列,有明确的开始和结束标志,要么被完全执行,要么完全失败
ACID
原子性
一致性
持久性
隔离性
分布式事务:分布式系统中运行的事务,由多个本地事务组合而成
BASE
和ACID相比,牺牲强一致性,保证最终一致性,获得高可用性,是对ACID的弱化
基本可用
柔性状态
最终一致性
实现方法
基于XA协议的二阶段提交协议-2PC(ACID)
角色
协调者:事务管理器
事务参与者:本地资源管理器
过程
第一阶段:投票
协调者向参与者发送CanCommit请求,参与者返回Yes or No信息,代表是否可以执行
第二阶段:提交
协调者收到的都是Yes,择发送DoCommit,否则发送DoAbort,参与者之行结束返回HaveCommit
二阶段提交存在的问题
同步阻塞
执行过程中本地资源管理器会一直占有临界资源
单点故障
过于依赖事务管理器,如果其发生故障,择一直锁定事务资源,导致系统阻塞
数据不一致
DoCommit如果出现丢包,导致部分执行,数据不一致
三阶段提交协议-3PC(ACID)
过程
第一阶段:CanCommit阶段
协调者向参与者发送CanCommit请求,参与者返回Yes or No信息,代表是否可以执行
第二阶段:PreCommit阶段
协调者收到的都是Yes,则发送PreCommit,参与者收到后执行事务操作,并记录Undo和Redo日志,参与者返回ACK
协调者收到No,则发送Abord,参与者收到后或者超时后,执行事务终断操作。
第三阶段:DoCommit阶段
协调者收到所有参与者的Ack,则向所有参与者发送DoCommit,参与者收到后提交事务,并返回Ack,所有参与者Ack后事务完成
协调者向所有参与者发送Abort,参与者执行事务回滚并返回Ack
本阶段参与者发送Ack后无响应超时后,默认进行事务提交。
解决了二阶段的问题
同步阻塞
引入了超时处理策略
数据不一致
一二阶段之间引入预提交阶段,预提交阶段排除不一致的情况
缺点
数据不一致问题
性能较低,系统吞吐量不高
基于分布式消息的最终一致性方案(BASE)
简单来说就是基于MQ的事务消息来保证
特点
最终一致性
异步执行
无同步阻塞
无单点故障
性能高,吞吐量高
缺点
算法复杂度高
三种方法对比
分布式锁
实现方式
基于关系数据库
创建一张锁表,获得所相当于建立一条记录,释放锁相当于删除记录。利用唯一索引进行互斥。
问题
单点故障
死锁:数据库锁没有失效时间
基于缓存-如redis
主要利用了redis的setnx机制,同时也有lua脚本等方法
基于ZooKeeper
zk临时顺序节点实现分布式锁
子主题
羊群效应
分布式资源管理与负载调度
分布式体系结构
集中式结构
Google Borg
Kubernetes(Borg的开源版本)
Mesos
子主题
非集中式结构
Akka集群
分布式调度架构
单体调度
两层调度
共享状态调度
0 条评论
下一页