阅读笔记《架构师修炼之道》

职责与影响力

软件架构师做什么

从系统全局出发,指导开发团队一起实现系统的短中长期业务目标,推进项目成功。

  1. 挖掘和确定关键架构需求。需要与主要利益相关方、最终用户深入交谈。
  2. 从工程角度定义问题。关注软件的上下文语境,定义质量属性。
  3. 分解系统,分配职责。确定构成软件的主要模块(子系统)及模块(子系统)之间的关联。
  4. 确定系统关键质量属性。需要在质量属性之间权衡取舍。
  5. 关注核心功能实现。确定系统所面临的核心技术难题,并推进确定对应的技术决策和方案。
  6. 展示和评估系统的关键决策。通过各种视图、图表从多个视角展示软件的全景图和主要组成部分。
  7. 管理技术债务。
  8. 提升团队成员的设计技能。

针对每个项目提问

  • 利益相关方是谁,主要业务目标是什么?
  • 整体解决方案是什么?
  • 涉及哪些技术?
  • 最大风险是什么?如何克服?
  • 有机会重做,如何改进?

 

架构之于软件开发

架构在软件开发中的作用

  1. 将大问题分解为容易处理的小问题。
  2. 为协同工作提供总体指导和方向。
  3. 为讨论复杂设计提供基本词汇。
  4. 重点解决系统质量属性。
  5. 兼顾考虑成本、约束、进度、风险、交付。
  6. 避免犯重大错误。
  7. 让软件更加灵活。

架构不做什么:有所为有所不为

  • 不做过于细节的具体决策,除非细节与系统关键质量属性相关。
  • 不涉及非核心功能的实现,除非影响系统核心功能。
  • 不关注功能需求的实现,但关注关键架构需求。

架构目标与衡量

从“质量-效率-成本”铁三角维度来说,架构的目标就是站在系统整体看待和解决问题,提升研发效率和关键质量,降低长期维护成本。

可阅:架构设计开篇:架构设计的目标与衡量

架构思维

基本思维

  • 系统全局:始终坚持站在系统和全局的视角看待和解决问题。
  • 以人为本:理解利益方需求,关心最终用户,考虑程序员、测试人员、项目经理、运维等。
  • 推迟决策:不到成熟一刻,不着急做出最终决策;低优先级的事情,推迟决策。
  • 善于借鉴:研究和借鉴已有的设计成果和设计模式。
  • 化虚为实:让想法具体化形象化,将架构展现出来。
  • 极简主义: 只关注高优先级的质量属性,提升这些质量属性同时降低风险。

基本方法

  • 思考循环:分解问题 => 理解问题 => 澄清问题 => 清晰描述问题 => 探索设计 => 展示设计 => 评估设计可行性和适用性 => 实施设计 => 反馈效果
  • TDC循环:思考、动手、检查。

知识与技能

架构师的知识体系是建构在组件级别和团队的级别上的。

  • 深入理解各种软件设计原则和工程思想;
  • 善于系统需求分析,擅长沟通,能够挖掘出关键架构需求;
  • 熟悉领域建模,能够为业务建立合适的架构模型;
  • 熟悉各种技术架构模式,确立系统关键质量属性;
  • 能够推演系统可能面临的技术难题并设法解决;
  • 熟悉各种组件模块之间的依赖、复用、解耦关系和方法;
  • 熟悉开发架构、业务架构、部署架构、数据架构等多种架构视图;
  • 熟悉如何引导、探索、展示、评估设计的各类方法和工具箱;
  • 有能力在团队里提倡架构思维,提升团队成员的架构设计能力。

架构师在关于质量和目标的权衡取舍、判断力和直觉上有很强的敏锐度和丰富的经验。

影响大的功能需求分类

将系统功能需求分类为少数有代表性的类别,筛选出影响力大的功能需求,针对每一类影响力大功能需求,确立质量属性需求。

影响力较大的功能需求具有如下特征:

  • 高优先级的
  • 有难度的
  • 反映一种类别的架构问题

比如入侵检测系统的影响较大的功能需求分类:

    • 入侵行为检测流程:准确度、及时性、稳定性、可扩展性;
    • 告警列表和详情:查询性能;信息的丰富度;
    • 规则管理:大量规则下发的性能与稳定性;
    • 检测配置:检测和响应行为的灵活度控制;
    • 威胁情报: 性能与稳定性;威胁情报的准确度、及时性、丰富度。
      需要着重考虑这些功能需求所需要的架构特征、质量属性。
posted @ 2023-10-26 08:32  橘子味芬达水  阅读(15)  评论(0编辑  收藏  举报