阅读笔记《架构师修炼之道》
职责与影响力
软件架构师做什么
从系统全局出发,指导开发团队一起实现系统的短中长期业务目标,推进项目成功。
- 挖掘和确定关键架构需求。需要与主要利益相关方、最终用户深入交谈。
- 从工程角度定义问题。关注软件的上下文语境,定义质量属性。
- 分解系统,分配职责。确定构成软件的主要模块(子系统)及模块(子系统)之间的关联。
- 确定系统关键质量属性。需要在质量属性之间权衡取舍。
- 关注核心功能实现。确定系统所面临的核心技术难题,并推进确定对应的技术决策和方案。
- 展示和评估系统的关键决策。通过各种视图、图表从多个视角展示软件的全景图和主要组成部分。
- 管理技术债务。
- 提升团队成员的设计技能。
针对每个项目提问
- 利益相关方是谁,主要业务目标是什么?
- 整体解决方案是什么?
- 涉及哪些技术?
- 最大风险是什么?如何克服?
- 有机会重做,如何改进?
架构之于软件开发
架构在软件开发中的作用
- 将大问题分解为容易处理的小问题。
- 为协同工作提供总体指导和方向。
- 为讨论复杂设计提供基本词汇。
- 重点解决系统质量属性。
- 兼顾考虑成本、约束、进度、风险、交付。
- 避免犯重大错误。
- 让软件更加灵活。
架构不做什么:有所为有所不为
- 不做过于细节的具体决策,除非细节与系统关键质量属性相关。
- 不涉及非核心功能的实现,除非影响系统核心功能。
- 不关注功能需求的实现,但关注关键架构需求。
架构目标与衡量
从“质量-效率-成本”铁三角维度来说,架构的目标就是站在系统整体看待和解决问题,提升研发效率和关键质量,降低长期维护成本。
架构思维
基本思维
- 系统全局:始终坚持站在系统和全局的视角看待和解决问题。
- 以人为本:理解利益方需求,关心最终用户,考虑程序员、测试人员、项目经理、运维等。
- 推迟决策:不到成熟一刻,不着急做出最终决策;低优先级的事情,推迟决策。
- 善于借鉴:研究和借鉴已有的设计成果和设计模式。
- 化虚为实:让想法具体化形象化,将架构展现出来。
- 极简主义: 只关注高优先级的质量属性,提升这些质量属性同时降低风险。
基本方法
- 思考循环:分解问题 => 理解问题 => 澄清问题 => 清晰描述问题 => 探索设计 => 展示设计 => 评估设计可行性和适用性 => 实施设计 => 反馈效果
- TDC循环:思考、动手、检查。
知识与技能
架构师的知识体系是建构在组件级别和团队的级别上的。
- 深入理解各种软件设计原则和工程思想;
- 善于系统需求分析,擅长沟通,能够挖掘出关键架构需求;
- 熟悉领域建模,能够为业务建立合适的架构模型;
- 熟悉各种技术架构模式,确立系统关键质量属性;
- 能够推演系统可能面临的技术难题并设法解决;
- 熟悉各种组件模块之间的依赖、复用、解耦关系和方法;
- 熟悉开发架构、业务架构、部署架构、数据架构等多种架构视图;
- 熟悉如何引导、探索、展示、评估设计的各类方法和工具箱;
- 有能力在团队里提倡架构思维,提升团队成员的架构设计能力。
架构师在关于质量和目标的权衡取舍、判断力和直觉上有很强的敏锐度和丰富的经验。
影响大的功能需求分类
将系统功能需求分类为少数有代表性的类别,筛选出影响力大的功能需求,针对每一类影响力大功能需求,确立质量属性需求。
影响力较大的功能需求具有如下特征:
- 高优先级的
- 有难度的
- 反映一种类别的架构问题
比如入侵检测系统的影响较大的功能需求分类:
- 入侵行为检测流程:准确度、及时性、稳定性、可扩展性;
- 告警列表和详情:查询性能;信息的丰富度;
- 规则管理:大量规则下发的性能与稳定性;
- 检测配置:检测和响应行为的灵活度控制;
- 威胁情报: 性能与稳定性;威胁情报的准确度、及时性、丰富度。
需要着重考虑这些功能需求所需要的架构特征、质量属性。