写点什么

[架构实战] 学习笔记二

  • 2022 年 10 月 01 日
    广东
  • 本文字数:1971 字

    阅读完需:约 6 分钟

[架构实战] 学习笔记二

架构设计复杂度模型:

架构设计复杂度模型:

  • 业务复杂度:主要体现为“难以理解”、“难以扩展”例如:业务数量多、业务流程长、业务之间关系复杂

  • 质量复杂度:高性能、高可用、成本、安全等质量属性的要求。

如何设计可扩展架构

鸡蛋篮子第一法则:如果一个篮子数不清,拆分到多个篮子再数


可扩展:

系统适应变化的能力,包含 “可理解”与“可复用”两个部分

可伸缩:

系统通过添加更多资源来提升 性能的能力


拆分复杂度模型:

  • 拆分粒度:

  • 内部复杂度: 又称为 “单体复杂度”,指单个对象内部的复杂度,例如传统的单体系统,所有业务都在一个系统里面。可以用 参与的“开发人数”来衡量单个拆分对象的复杂度

  • 例如:3 个人负责一个 子系统/子模块 是比较合理的,20 个人在同一个子系统上开发,则内部复杂度过高。

  • 外部复杂度:又称为“群体复杂度”,指拆分后的多个对象之间的关系复杂度。可以用业务流程“涉及到对象数量”来衡量外部复杂度。

  • 例如:一次用户请求 需要 5 个子系统参与是比较合理的,如果需要 20 个子系统参与,则外部复杂度过高。

  • 拆分原则:

  • 内外平衡

  • 先粗后细原则

可扩展性设计:封装


  • 预测第一原则:2 年原则,只预测 2 年内可能的变化

  • 预测第二原则:3 次法则,预测没有把握的不要封装,等到需要的时候“重构”即可



高性能复杂度模型:

鸡蛋篮子理论第二法则(叠加法则):如果一个篮子装不下你的鸡蛋,用多个篮子


集群高性能:任务分配

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

  • 复杂度分析:

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

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

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

集群高性能任务分配架构设计关键点:


集群高性能:任务分解

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

  • 复杂度分析:

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

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

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

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

集群高性能任务分解架构设计关键点


高可用复杂度模型

鸡蛋篮子理论第三法则(冗余法则):不要把所有鸡蛋装在一个篮子,放到多个篮子!


计算高可用

  • 任务分配:

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

  • 复杂度分析:

  • 增加“任务分配器”节点,可以是独立的服务器,也可以是 sdk

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

  • 任务分配器需要根究不同的需求采用不同的算法分配。

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

  • 高性能任务分配考虑的是“正常处理”

  • 高可用任务分配考虑的是“异常处理”

  • 高可用任务分配架构设计的关键点:


  • 任务分解:

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

  • 复杂度分析:

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

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

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

  • 任务分解器需要根据不同的需求采用不同的算法分配

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

  • 计算高可用任务分解器架构设计的关键点:


  • 任务分解案例:

  • 微服务的拆分

存储高可用


  • 数据复制格式:

  • 复制命令

  • 优缺点:

  • 实现简单,复制数据量较小;

  • 数据可能不一致(SQL 函数)

  • 适用场景:

  • 增量复制

  • 复制数据

  • 优缺点:

  • 实现简单

  • 保证数据一致

  • 复制流量可能会很大

  • 适用场景

  • 增量复制

  • 复制文件

  • 优缺点:

  • 实现复杂,复制的时候数据在变

  • 保证数据一致

  • 数据流量可能会很大

  • 适用场景:

  • 全量复制

  • 数据复制方式:

  • 同步复制:

  • 优缺点:

  • 最强一致性,故障容忍度低;

  • 写入性能低

  • 适用场景:

  • 主备/主从架构

  • 异步复制

  • 优缺点:

  • 写入性能高,故障容忍度高;

  • 容易出现数据不一致。

  • 适用场景:

  • 数据存储集群

  • 半同步复制:

  • 优缺点:

  • 同步复制和异步复制的折中方案

  • 适用场景:

  • 数据存储集群

  • 多数复制:

  • 优缺点:

  • 数据强一致性,最强可用性,故障容忍度高

  • 写入性能不高,实现复杂

  • 适用场景:

  • 分布式一致性,分布式协同(OceanBase , ZooKeeper)

  • 存储高可用状态决策:

  • 独裁式:

  • 优缺点:

  • 决策逻辑简单

  • 决策者要做到高可用,整体架构复杂,常用(ZooKeeper 、Raft, Keepalived)

  • 数据一致性强度中等

  • 应用场景:

  • 绝大部分业务都可以应用

  • 协商式

  • 优缺点:

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

  • 如果是链路问题,会导致双主,可以用“双通道”来缓解

  • 数据一致性弱

  • 应用场景:

  • 内部系统,网络设备(用串口相连)

  • 民主式、选举式

  • 优缺点:

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

  • 可用性最高,数据一致性最强

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

  • 应用场景:

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

用户头像

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
[架构实战] 学习笔记二_爱学习的麦子_InfoQ写作社区