系统架构战略体系
分布式系统理念
FLP
CAP
BASE
分布式共识算法
Paxos
Raft
Gossip
架构设计方法论
架构设计方法论
分而治之
人类解决复杂问题的根本方法:分而治之,把复杂问题拆解成若干足够小的问题
关注点分离
好的架构必须使每个关注点相互分离,也就是说系统中的一个部分发生了变化,不会影响其他部分。即使需要改变,也能够清晰地识别出那些部分需要改变。如果需要扩展架构,影响将会最小化,已经可以工作的每个部分都将继续工作。
架构设计思维
架构设计的核心思维
抽象思维
抽象思维可以解决单个软件系统的复杂性问题,但是解决不了软件中的规模问题
拆解思维
拆解思维通过将规模庞大的软件系统拆解成足够小的模块,然后针对每个模块分而治之
分层思维
分层思维可以达到隔离各层的关注面,每层只需要聚焦本层要解决的问题
演进思维
软件架构需要根据业务的发展不断的变化演进,而不是试图一步到位设计一个完美的架构
架构设计之道
道是道路、方向和原则,是自然发展规律,道路和方向是错的,无论你怎么努力,都很难成功
演进原则
架构随着业务的发展而不断演化
简单原则
简单优于复杂(奥卡姆剃刀定律:如无必要,勿增实体)
合适原则
合适优于业界领先
架构设计之术
术是方法、手段和技巧,好的方法和工具可以让你事半功倍,前提是你走在正确的道路上
高内聚低耦合
经典设计模式
领域驱动设计
面向复杂业务逻辑
-
核心域
-
通用域
-
支撑域
-
子领域
-
界限上下文
-
充血模型
SOLID原则
-
单一职责原则
-
开放闭合原则
-
里氏替换原则
-
接口分离原则
-
依赖倒置原则
层次化
纵向视角拆分出层次,每一层只需要关注自己的职责
模块化
横向视角拆分出模块,每个模块只需要聚焦自己的职责,模块内部高内聚,模块之间低耦合
配置化
通过可配置的方式构建系统,可以有效解决业务系统灵活性、动态可变的问题
插件化
通过提供可插拔的插件机制,实现灵活应对业务系统中的差异化逻辑扩展,完美契合 开闭原则
流程化
将业务系统的完整逻辑流程化,通过流程编排引擎来支持高效灵活的业务迭代
高可用设计
系统的稳定性建设需要体系化,包括系统架构设计、研发变更体系、稳定性意识、组织机制等多方面如何缩短故障影响时长
如何减少故障影响范围
如何避免出现单点故障
如何避免系统间相互影响
如何保护自身不受影响
-
事前预防
-
副本冗余(存储副本、服务集群、网络热备、同城多活等)
-
资源隔离(存储隔离、服务隔离、动静隔离、快慢隔离、轻重隔离)
-
配额保护(分布式限流、单机限流、过载保护)
-
业务降级(强弱依赖、关键路径、降级配置、兜底)
-
容灾预案(提前预案、应急预案、容灾预案演练)
-
流程机制(容灾应急响应机制、容灾应急小组、发布变更流程)
-
-
事中止损
-
失效转移(流量调度、主从切换、异构存储切换、容器迁移)
-
监控观测(立体化监控、多维度告警、自动巡检)
-
变更回滚(版本回滚、配置回滚)
-
-
事后改进
-
事故复盘机制(事故定级、事故通知、事故复盘会)
-
事故改进计划
-
事故总结最佳实践
-
高性能设计
影响系统性能的四大杀手:数据拷贝、上下文切换、内存分配、锁竞争
-
无状态化
-
异步化
-
多线程
-
缓存
-
弹性扩容
-
数据预热
-
零拷贝
-
高性能IO模型(IO多路复用、异步IO)
-
高性能网络模型(Reactor、Preactor)
一致性设计
一致性包括弱一致、最终一致、强一致
-
最终一致性
-
强一致性
-
分布式共识算法
可扩展性设计
可扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力,包括业务可扩展、计算可扩展、存储可扩展
-
水平拆分
-
垂直拆分
-
主从架构
-
读写分离
-
负载均衡
-
一致性哈希
-
Shared Nothing
-
无状态化
-
服务化拆分
-
消息队列解耦
-
业务逻辑配置化
-
业务逻辑流程化
-
业务逻辑插件化
安全性设计
安全性包括基础架构安全、应用安全、业务安全等多个方面
-
事前防御
-
安全设计原则
-
最小化受攻击面
-
默认安全
-
终身防御
-
权限最小化
-
-
5A安全架构
-
身份认证(Authentication)
-
授权(Authorization)
-
访问控制(Acccess control)
-
可审计(Auditable)
-
资产保护(Asset protection)
-
-
零信任架构
-
安全应急响应机制
-
-
事中监控检测
-
风控反欺诈
-
-
事后止损溯源
-
安全故障复盘
-