架构设计的关键思维是判断和取舍
架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。
高性能带来的复杂度:
- 单台-多进程/多线程/通信等方方面面,比如:Nginx 可以用多进程也可以用多线程,JBoss 采用的是多线程;Redis 采用的是单进程,Memcache 采用的是多线程,这些系统都实现了高性能,但内部实现差异却很大
- 集群-任务分配(分配器 / 分配算法)/任务分解
高可用 - 冗余:
- 计算高可用
- 存储高可用,难点不在于如何备份数据,而在于如何减少或者规避数据不一致对业务造成的影响
状态决策:
- 独裁式的决策方式不会出现决策混乱的问题,因为只有一个决策者,但问题也正是在于只有一个决策者。当决策者本身故障时,整个系统就无法实现准确的状态决策。如果决策者本身又做一套状态决策,那就陷入一个递归的死循环了。 master/slave
- 协商式两台连接通信,先2备,再通信协商谁是主
- 民主式多个独立的个体通过投票的方式来进行状态决策
可扩展:
- 预测变化
- 应对变化,分离变化层和稳定层,面向接口,如下例
成本:
安全:
规模: