如何设计高可用架构

高可用复杂度模型

如何设计高可用架构



计算高可用 – 任务分配

【任务分配】

将任务分配给多个服务器执行。

【复杂度分析】

1. 增加“任务分配器”节点,可以是独立的服务器,也可以是 SDK。

2. 任务分配器需要管理所有的服务器,可以通过配置文件,也可以通过配置服务器(例如 ZooKeeper)。

3. 任务分配器需要根据不同的需求采用不同的算法分配。

4. 任务分配器需要监控业务服务器的状态,在故障时进行切换。

如何设计高可用架构

计算高可用任务分配架构设计关键点

如何设计高可用架构


计算高可用任务分配案例

如何设计高可用架构

计算高可用 – 任务分解

【任务分解】

将服务器拆分为不同角色,不同服务器处理不同的业务。

【复杂度分析】

1. 增加“任务分解器”节点,可以是独立的服务器,也可以是SDK。

2. 任务分解器需要管理所有的服务器,可以通过配置文件,也可以通过配置服务器(例如 ZooKeeper)。

3. 需要设计任务拆分的方式,任务分解器需要记录“任务”和“服务器”的映射关系。

4. 任务分配器需要根据不同的需求采用不同的算法分配。

5. 任务分解器需要监控业务服务器的状态,在故障时进行切换。

如何设计高可用架构


存储高可用复杂度模型

如何设计高可用架构

存储高可用 – 数据复制格式

如何设计高可用架构

存储高可用 – 数据复制方式1

如何设计高可用架构

存储高可用 – 数据复制方式2 

如何设计高可用架构

高可用存储复制案例

如何设计高可用架构

Redis

复制格式:命令(AOF) + 文件(RDB)

复制方式:异步 + wait(指定半同步)

如何设计高可用架构

MySQL

复制格式:命令(statement) + 数据(Row)

复制方式:异步 + 半同步


存储高可用状态决策 –   独裁式

如何设计高可用架构

存储高可用状态决策 – 协商式

如何设计高可用架构

【优缺点】

1. 架构实现简单,决策逻辑简单,一般是心跳机制;

2. 如果是链路问题,会导致双主,可以用双通道来缓解;

3. 数据一致性弱。

【应用场景】

内部系统、网络设备(用串口相连)。

存储高可用状态决策 –  民主式/选举式

如何设计高可用架构

【优缺点】

1. 决策过程复杂,决策逻辑复杂,一般用标准算法进行选举,例如 Raft、ZAB、Paxos;

2. 可用性最高,数据一致性最强;

3. 可能出现“脑裂”问题,可以采用 quorum 来控制。

【应用场景】

对数据一致性要求很高的场景,例如余额、库存。


存储高可用状态决策 –   独裁式案例

如何设计高可用架构

Redis:使用 sentinel 集群来解决“决策者”单点问题,sentinel 又是通过 Raft 算法进行选举的。

Hadoop:NameNode 是集群决策者,使用 ZooKeeper 集群来解决NameNode 单点问题

存储高可用状态决策 – 民主式案例1 

如何设计高可用架构

ZooKeeper:基于 ZAB 算法选举

如何设计高可用架构

MongoDB:3.2.0 以前基于 bully 算法,3.2.0 开始基于 Raft 算法。

思维导图:

如何设计高可用架构

原文始发于微信公众号(二进制跳动):如何设计高可用架构

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/167346.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!