文章目录加载中

架构复杂度分析

# 高性能

分为 2 部分:单机和集群。

# 单机复杂度

对于单机来说,直接相关的是进程和线程。

用进程来对应一个任务,每个任务都有自己独立的内存空间,进程间互不相关,由操作系统来进行调度。为了达到多进程并行运行的目的,采取了分时的方式,即把 CPU 的时间分成很多片段,每个片段只能执行某个进程中的指令。

线程是进程内部的子任务,但这些子任务都共享同一份进程数据。为了保证数据的正确性,又发明了互斥锁机制。

# 集群复杂度

# 任务分配

体现在 3 个方面:任务分配器、连接、分配器需要增加分配算法

随着书来给你增加,任务分配器本身又成为瓶颈。

# 任务分解

# 高可用

系统无中断地执行其功能的能力,代表系统的可用性程度

本质上通过“增加冗余”来实现高可用。高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。

1、计算高可用

计算有一个特点就是无论在哪台机器上进行计算,同样的算法和输入数据,产出的结果都是一样的。(无状态)

2、存储高于可用

将数据在机器间同步,需要时间。造成数据延迟,结果不通。存储高可用的难点不在于如何备份数据,而在于如何减少或者规避数据不一致对业务造成的影响

# 高可用状态决策

无论是计算高可用还是存储高可用,其基础都是“状态决策”,即系统需要能够判断当前的状态是正常还是异常。

1、独裁式

只有一个决策者,不会决策混乱。但是决策者本身不可故障。

2、协商式

常用的是主备决策。

过程:

  • 2 台服务器启动时都是备机。
  • 2 台服务器建立连接。
  • 2 台服务器交换状态信息。
  • 某 1 台服务器做出决策,成为主机;另一台服务器继续保持备机身份。

难点在于如果二者信息交换出现问题,怎么进行决策

3、民主式

少数服从多数,例如 ZooKeeper。民主式决策的系统一般都采用“投票节点数必须超过系统总节点数一半”规则来处理“脑裂”。

# 可扩展性

可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建

需要做到:正确预测变化、尽量封装变化。

# 参考链接

本文来自心谭博客:xin-tan.com,经常更新web和算法的文章笔记,前往github查看目录归纳:github.com/dongyuanxin/blog