架构实战营四期 - 毕业总结
核心思想提炼
1. 何为架构
新视角:4R 架构
Rank,Role,Relation,Rule
2. 如何画架构图
业务架构,客户端/前端架构,系统/后端架构,应用架构,部署架构
架构是分层级的,故架构图也分层级,不同的层级上,可以提供不同的架构图
如果内容的维度太多,无法在一张架构图上有效反应出来,可以提供两张架构图
诸多架构图中,最重要的是业务架构图和系统架构图,而业务架构又是其他架构的基础和对内或对外沟通的首选
注:
可以额外关注一下时序图
通常架构图上反应的是静态信息,业务规则较难体现,这时可以用时序图作为补充
3. 如何做架构设计
方法论:面向复杂度的架构设计
设计原则:合适、简单、演化
先做复杂度分析,然后遵守设计原则设计多套备选架构,分析优缺点后取舍得到最终的架构
4. 架构设计实战依据
(1)可扩展架构设计
可扩展设计的起点一定是复杂度分析,复杂度包括业务复杂度和质量复杂度,不同类型的复杂度,会带来技术和业务上的不同侧重点
类型:架构可扩展、应用可扩展和代码可扩展
手段:拆分、封装
拆分
可以按 SOLID 原则作为指导,目标是高内聚低耦合,这在架构、应用和代码层面均适用
拆分给复杂度带来的影响是,产生了外部复杂度和内部复杂度
拆分不会降低复杂度,只是转移复杂度,故实践中的拆分粒度本质上是对内外部复杂度对权衡和平衡,可以把先少后多作为原则应用于实践中
封装
本质上对变化的预测和封装,这在代码层面,面向对象的编程思想已经提供了丰富的理论和实践经验,拿来即用,而且这样理论和经验通用适用于架构层面,可以借鉴
(2)高性能架构设计
关键点:
核心焦点是分工和调度,单机与集群均适用
分工包括工作分配和工作分解;分配,即让更多的人来“搬砖”;分解,即把一个工作分解为多项工作的协作,即“流水线作业”,提高单点效率和整体效率
有了分工,需辅以合适的管理和调度,才能有效发挥分工的效能
IO 模型、缓存设计和存储设计,也是高性能架构的关键因素,通常选取当前有效的成熟套路即可
高性能架构设计可用从单机和集群两个方面分别设计。
单机高性能
计算:
进程模型,用好多线程,用有效的并发来提高计算性能
网络模型,对高并发场景,当前最成熟有效的方式是,采用 reactor 模式,即多路复用 IO
缓存模型,本地缓存或独立缓存(redis)
存储:
读多写少:B+ 树
写多读少:LSM
集群高性能
主要考虑任务分配和任务分解
任务分配,主要是架构各层级上,负载均衡的实现
任务分解,可重点研究当前微服务架构中,各微服务间的通信交互套路
(3)高可用架构设计
关键点:
本质是冗余和备份,冗余必然是集群
高性能架构中的集群架构设计,一定程度上与高可用设计重合,但二者的侧重点不同
可在高性能集群架构设计的基础上,进一步补充高可用维度的设计
存储高可用:
数据复制,包括复制命令、复制数据和复制文件几种方式
决策模式,包括独裁式,协商式和民主式,其中,民主式的实现,要基于民主选举算法,独裁式为保证决策者的高可用,可能需要把决策者本身设计为集群民主式,协商式,常用于数据一致性弱的内部系统或网络设备
计算高可用:
与集群的计算高性能基本一致
(4)其他设计维度
完成初步的可扩展、高性能和高可用架构设计后,从低成本、安全性、可测试性/可维护性/可观测性等维度,对架构设计做优化和微调
5. 架构设计过程
(1)前期
开展需求分析,主要完成以下内容:
分析明确业务需求
干系人分析,对业务需求做 double check,进一步明确需求的范围、合理性、优先级等因素
复杂度分析,为架构设计做铺垫
成果:业务架构
(2)中期
主要工作如下:
设计备选架构方案,准守“合适、简单、演化”原则,采用 4R 架构设计方法论
评估备份架构方案
确定最终架构方案
(3)后期
后期的工作核心为,推动架构方案落地,形成相关的文档和经验积累。
架构方案通常比较粗,只能作为系统开发实现的参考依据,但并为涵盖具体实现方案的细节,因此后期需要基于架构方案,补充实施方案,才能让架构真正落地。
架构方案实施工程中,难免与领导、干系人汇报(备选)架构方案,与下一级架构师和开发团队沟通系统实现的细节和开发方案。
故,主要工作汇总如下:
详细架构设计
架构文档编写
沟通
领导、干系人
下一级架构师、开发团队
实战应用技巧提炼
1. 高性能高可用存储架构设计
分类:
数据库存储架构
复制架构
分片架构
分区架构
存储架构设计方法:
估算性能需求
选择存储系统
设计存储方案
2. 高性能高可用计算架构设计
多级缓存架构
负载均衡架构
3. 微服务架构设计
一种可扩展的架构设计
落地前先想清楚其陷阱与挑战
微服务基础设施必不可少,其选择及基础设施的优先级很重要
微服务拆分要合理,可以借鉴设计模式里的思想
4. 异地多活架构设计
基础是高可用架构设计
灾备架构设计
异地多活架构设计
5. 中间件系统设计
中间件要贴合业务,结合业务发展的团队技术背景,满足合适、简单、演进的设计原则,若已有的轮子不能很好的满足这些要求,不妨重造轮子。
评论