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