技术人员的职业规划和发展:不仅要关注专业技术(术),还要有自己的分析能力(道),并且要懂得顺势而为(势)。很多事情你看似简单,但其中会有很多思考(认知层)、执行(技术层)和借势(战略层)的操作,不是每一个人都能做好的。
架构设计的关键思维是判断和取舍,程序设计的关键思维是逻辑和实现。
背景
架构设计的主要目的是为了解决软件系统复杂度带来的问题。分布式架构解决了“单点”和“性能容量”的问题,但却新增了系统设计,以及管理和运维的问题。
- 问题一:异构系统的不标准问题
- 问题二:系统架构中的服务依赖性问题
- 问题三:故障发生的概率更大
- 问题四:多层架构的运维复杂度更大
复杂度分析
高性能
- 单机复杂度:计算机内部复杂度最关键的地方就是
操作系统
。操作系统和性能最相关的就是进程
和线程
。 - 集群的复杂度:任务分配、任务分解
高可用
系统的高可用方案五花八门,但万变不离其宗,本质上都是通过
“冗余”
来实现高可用。通过冗余来实现的高可用系统,状态决策
本质上就不可能做到完全正确。
- 计算高可用
- 存储高可用
可扩展性
- 正确预测变化
“2年法则”:只预测2年内的可能变化,不要试图预测5年甚至10年后的变化。 - 完美应对变化
方案一:提炼出“变化层”和“稳定层”
方案二:提炼出“抽象层”和“实现层”
1写2抄3重构原则
低成本、安全、规模
- 低成本:往往只有“创新”才能达到低成本目标
- 安全:功能、架构
- 规模:规模带来复杂度的主要原因就是“量变引起质变”
模块一:架构原理与技术认知
原则:合适原则、简单原则、演化原则
技术认知:
- 架构设计认知:立足于点、连接成线、扩散成面
架构拆分->系统解耦->职责单一->开发效率 - 分析问题的认知:业务方、管理者和技术人员
- 能力边界认知:模块或者子系统层面、全系统层面、某一领域层面
架构设计方案:
复杂来源(识别复杂度)->解决方案(设计备选方案)->评估标准(评估和选择备选方案)->技术实现(详细方案设计)
模块二:分布式技术原理与设计
CAP 理论:C(Consistency)是数据一致性、A(Availability)是服务可用性、P(Partition tolerance)是分区容错性。C、A、P 只能同时满足两个目标,而由于在分布式系统中,P 是必须要保留的,所以要在 C 和 A 间进行取舍
。假如要保证服务的可用性,就选择 AP 模型,而要保证一致性的话,就选择 CP 模型。
知识体系包括四个角度:
- 存储器,即分布式存储系统,如 NoSQL 数据库存储;
- 运算器,即分布式计算,如分布式并行计算;
- 输入输出,即分布式系统通信,如同步 RPC 调用和异步消息队列;
- 控制器,即调度管理,如流量调度、任务调度与资源调度。
一致性
- 事务一致性
- 分布式锁
微服务 - RPC
模块三:中间件常用组件的原理和设计问题
- RPC 远程调用
- MQ(消息队列)
(系统解耦,流量削峰)
模块四:数据库原理与设计问题
逻辑数据集->分片->冗余->一致性
- MySQL
模块五:分布式缓存原理与设计问题
- Redis
模块六:互联网高性能高可用设计问题
- 高可用:SLA
- 可评估
- 可监控
- 可保证:系统容错、降级