C++ 全栈知识体系C++ 全栈知识体系
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
  • 编程语言与技术

    • Effective C++: 改善程序与设计的55个具体做法

      • 第2章 - 构造/析构/赋值运算(一)
      • 第2章 - 构造/析构/赋值运算(二)
      • 第2章 - 构造/析构/赋值运算(三)
      • 第3章 - 资源管理
      • 第4章 - 设计与声明(一)
      • 第4章 - 设计与声明(二)
      • 第5章 - 实现(一)
      • 第5章 - 实现(二)
      • 第6章 - 继承与面向对象设计
      • 第7章 - 模板与泛型编程
    • 深度探索C++对象模型

      • 第1章 - 关于对象
      • 第2章 - 构造函数语意学
      • 第3章 - Data 语意学
    • STL源码剖析

      • 第1章 - STL概论和版本简介
      • 第2章 - 空间配置器
      • 第3章 - 迭代器(iterators)概念与traits编程技法(一)
      • 第3章 - 迭代器(iterators)概念与traits编程技法(二)
      • 第4章 - 序列式容器 vector
      • 第4章 - 序列式容器 list
      • 第4章 - 序列式容器 deque
      • 第4章 - 序列式容器 stack和queue
      • 第4章 - 序列式容器 heap
      • 第4章 - 序列式容器 priority_queue
      • 第4章 - 序列式容器 slist
      • 第5章 - 关联式容器 RB-tree
      • 第5章 - 关联式容器 set和map
      • 第5章 - 关联式容器 hashtable
      • 第6章 - 算法
      • 第6章 - 算法之set
      • 第7章 - 仿函数
      • 第8章 - 配接器
  • 系统与架构

    • 深入理解计算机系统

      • 第1章 - 计算机系统漫游
      • 第2章 - 信息的表示和处理
      • 第3章 - 程序的机器级表示
      • 第5章 - 优化程序性能
      • 第6章 - 存储器层次结构
      • 第7章 - 链接
      • 第8章 - 异常控制流
      • 第9章 - 虚拟内存
      • 第10章 - 系统级I/O
      • 第11章 - 网络编程
      • 第12章 - 并发编程
    • 大型网站技术架构——核心原理与案例分析

      • 第1章 - 大型网站架构演化
      • 第2章 - 大型网站架构模式
      • 第3章 - 大型网站核心架构要素
      • 第4章 - 瞬时响应:网站的高性能架构
      • 第5章 - 万无一失:网站的高可用架构
      • 第6章 - 永无止境:网站的伸缩性架构
      • 第7章 - 随需应变:网站的可扩展架构
      • 第8章 - 固若金汤:网站的安全架构
    • 从零开始学架构

      • 架构基础
      • 架构设计原则
      • 高性能架构
      • 高可用架构
    • 程序员的自我修养————链接、装载与库

      • 第1章 - 简介
      • 第2章 - 静态链路
      • 第3章 - 目标文件里有什么
      • 第4章 - 静态链接
      • 第7章 - 动态链接
      • 第8章 - 共享库版本
      • 第10章 - 内存
      • 第11章 - 运行库
      • 第12章 - 系统调用与API
      • 第13章 - 运行库实现
  • 软件开发实践

    • 重构改善既有代码的设计

      • 第1章 - 重构,第一个示例
      • 第2章 - 重构的原则
      • 第3章 - 代码的坏味道
      • 第5章 - 重构列表
      • 第6章 - 重新组织函数
      • 第7章 - 在对象之间搬移特性
      • 第8章 - 重新组织数据
      • 第9章 - 简化条件表达式
      • 第10章 - 简化函数调用
      • 第11章 - 处理概括关系
      • 第12章 - 设计之大型重构
    • 代码大全2

      • 第1章 - 欢迎进入软件构建的世界
      • 第2章 - 用隐喻来更充分地理解软件开发
      • 第3章 - 三思而后行: 前期准备
      • 第4章 - 关键的构建决策
      • 第5章 - 软件构建中的设计
    • Linux多线程服务端编程——使用muduo C++ 网络库

      • Buffer类的设计
      • 设计与实现
      • 定时器与TimerQueue
      • Protobuf网络传输和Protobuf编解码器与消息分发器
      • EventLoop类剖析
      • EventLoopThread和EventLoopThreadPool剖析
      • TCP网络库和核心类
      • Connector剖析
      • TcpClient剖析
      • 学习总结
      • timing wheel
      • 消息广播服务
      • 线程安全的对象生命期管理
  • 数据处理与应用设计

    • 数据密集型应用系统设计

      • 第1章 - 可靠、可扩展与可维护的应用系统
      • 第2章 - 数据模型与查询语言
      • 第3章 - 数据存储与检索
      • 第4章 - 数据编码与演化
      • 第5章 - 数据复制
      • 第6章 - 数据分区
      • 第7章 - 事务

从零开始学架构 - 高可用架构

    CAP

    • CAP理论
    • BASE理论

    高可用的本质是通过冗余来实现

    存储高可用

    • 常用的高可用存储架构有主备、主从、主主、集群、分区。

      • 主备复制:客户端的操作都是通过主机完成,备机仅起到备份作用,不参与实际业务读写操作。

      • 主从复制:主机负责读写操作,从机只负责读操作,不负责写操作。

      • 主备倒换与主从倒换

        • 设计关键

            - 1.主备间状态判断:包括状态传递的渠道和状态检测的内容。
            - 2.倒换决策:倒换时机、倒换策略、自动程度。
            - 3.数据冲突解决:故障主机恢复后,数据如何同步。
          
        • 常见架构

            - 互连式:主备直接建立状态传递的渠道。
            - 中介式:主备机之间不直接连接,而都去连接中介,并且通过中介来传递状态信息。
            - 模拟式:主备之间并不传递任何状态数据,而是备机模拟成一个客户端,向主机发起模拟的读写操作,根据读写的响应情况来判断主机的状态。
          
      • 主主复制

        • 概念:两台主机都是主机,互相将数据复制给对方,客户端可以任意挑选其中的一台机器进行读写操作。
        • 很多数据不能双向复制:例如用户注册ID、库存等。
      • 数据集群

        • 概念:集群就是多台机器组合在一起形成一个统一的系统。(主备、主从、主主架构本质上隐含一个假设:主机能够存储所有数据。)

        • 集群分类

            - 数据集中集群
            - 数据分散集群
          
            	- Elasticsearch集群
          
        • 分布式事务算法

            - 目的:保证分散在多个节点上的数据统一提交或回滚,以满足ACID要求。
            - 二阶段提交(Two-Phase Commit Protocol,2PC)
          
            	- Commit请求阶段和Commit提交阶段
          
            - 三阶段提交(Three-Phase Commit Protocol,3PC)
          
            	- 提交判断阶段;提交准备阶段;提交执行阶段。(针对二阶段提交算法存在的协调者单点故障导致参与者长期阻塞问题,引入准备阶段(超时机制),当协调者故障后,参与者可以通过超时提交来避免一直阻塞。)
          
        • 分布式一致性算法

            - 目的:保证同一份数据在多个节点上的一致性
            - 机制:复制状态机
          
            	- 副本:多个分布式服务器组成一个集群,每个服务器都包含完整状态机的一个副本。
            	- 状态机:状态机接受输入,然后执行操作,将状态改变为下一个状态。
            	- 算法:使用算法来协调各个副本的处理逻辑,使得副本的状态机保持一致。
          
            - 算法:Paxos、Raft、ZAB
          
      • 数据分区

        • 概念:指将数据按照一定的规则进行分区,不同分区分布在不同的地理位置上,每个分区存储一部分数据,通过这种方式来规避地理级别的故障所造成的巨大影响。

        • 需要考虑的问题

            - 数据量:数据量越大,分区规则会越复杂,考虑的情况也越多。
            - 分区规则:洲际分区、国家分区、城市分区
            - 复制规则
          
            	- 集中式:存在一个总的备份中心,所有分区的数据备份到备份中心。
            	- 互备式:每个分区备份另外一个分区的数据。
            	- 独立式:每个分区自己有独立的备份中心。
          

    计算高可用

    • 主备

      • 冷备:备机业务未启动
      • 热备:备机业务已启动
    • 主从

    • 对称集群:集群中每个服务器的角色一致,可以执行所有任务。

    • 非对称集群:集群中的服务器分为多个不同的角色,不同的角色执行不同的任务。

    业务高可用

    • 异地多活

      • 目的:应对系统级的故障。

      • 架构:同城异区、跨城异地、跨国异地。

      • 设计技巧

        • 1.保证核心业务的异地多活

        • 2.核心数据的最终一致性

        • 3.采用多种手段同步数据

            - 消息队列
            - 二次读取
            - 存储系统同步
            - 回溯读取
            - 重新生成数据方式
          
        • 4.只保证绝大部分用户的异地多活

      • 设计步骤:业务分级、数据分类、数据同步、异常处理

    • 接口级的故障应对方案

      • 降级:将某些业务或接口的功能降低,可以是只提供部分功能,也可以是完全停掉所有功能。

        • 系统后门降级
        • 独立降级系统
      • 熔断:通过设定阈值,来应对依赖的外部系统故障的情况。

      • 限流:只允许系统能够承受的访问量进入,超出部分的请求将丢弃。

        • 基于请求限流
        • 基于资源限流
      • 排队:让用户等待很长时间,才能得到处理或长时间等待后仍然无法得到响应。

    Last Updated:
    Contributors: klc407073648
    Prev
    高性能架构