为了成为一名架构师必须稳扎稳打,软件架构设计知行合一很重要

简介: 最近在看程序员向架构师转型这本书,同时也做了思维导图的笔记,确实也是有一些收获,在为做好一个架构师而做准备,通过学习架构设计的原则到设计架构的过程来对架构师的工作有更大而全的认识。

前言

大家好,我是小郭,最近在看程序员向架构师转型这本书,同时也做了思维导图的笔记,确实也是有一些收获,在为做好一个架构师而做准备,通过学习架构设计的原则到设计架构的过程来对架构师的工作有更大而全的认识。

书籍

软件架构设计-程序员向架构师转型

👍 架构设计的原则

在实际的工作中,作为程序员,我们做的工作是

获取需求 -》 需求分析 -》 需求评审 -》技术评审 -》代码落地。

那架构师的工作是什么呢?有一句话是“需求决定架构”,我认为架构师应该是从更高的角度来看整体的需求,找到需求之间的矛盾关系,以及 预见系统问题的思考,从而做到对需求的划分和技术设计。

【三大原则】

  1. 看透需求
    怎么看透需求呢?通过将需求找全,梳理需求项之间的矛盾关系,追溯关系并且搞清除关系。
  2. 架构大方向正确
    我们常说方向不对,努力白费,就好比我们出去和女孩子约会,都需要先问对方爱吃什么,有什么忌口吗,在考虑是自己做还是下馆子,通过投其所好来实现最终的目的。
    所以 关键需求 决定 概念架构。
  3. 设计好架构的各个方面方面一:细化架构
  • 根据需求级别来划分子系统
  • 确认采用的架构风格和开发技术
  1. 方面二:验证架构
    通过运行期质量评估和开发期质量评估进行验证架构,从而进行架构决策

👍 架构设计的过程

1. 需求分析

通过愿景分析搞清楚要做什么

愿景分析  = 业务目标 + 范围 + Feature + 上下文图

Feature:不同粒度的功能内容和特色
上下文图
- 顶层数据流图
- 黑盒的用例图
用例图:描述软件系统为用户或外部系统提供的服务
  参与者Actor
  用例Use Case
用例简述:谁在什么时间干了什么

在需求分析的环节,不是一上来就是一顿套用,我们可以先确认需求的大小,来决定分析的步骤。

三套理论

架构设计只有合适,没有最好。

无视条件差异进行照抄都是一件很危险的事情

需求大小 步骤
1. 确定业务目标
2. 编写用例
在小的基础上,新增范围+Feature+上下文图
在中的基础上,新增业务流程建模,通过角色角度来分析,
1. 谁使用系统,
2. 谁来维护,
3. 系统需要和外部哪些系统进行交互

速查手册

网络异常,图片无法展示
|

2. 领域建模

目的:利用需求分析提供问题领域的语境,透过问题领域,建立稳固的领域概念。

在领域建模的时候,更重要的是注重于用户/客户的沟通,避免用户参与不足,造成了需求分析中假设的成分过高。

利用好状态图,跟踪流转的情况

image.png

三大原则中,第一个原则就是看透需求,在实践的过程中,主要是利用需求分析和领域建模来完成。

下面就是我们确定大方向的时候了

3. 确定关键需求

架构师的难点在预见系统问题的思考方式,以及对问题的权衡。

  1. 权衡需求点,都需要我们去权衡和考量的
  • 功能需求,指的就是客户想要看到的东西,如果只考虑功能需求会导致过度理想。
  • 非功能需求,指的是质量属性,以及一系列的业务环境、使用环境、构建环境、技术环境给我们带来的约束。
  1. 关键需求决定架构,其余需求验证架构
    关键需求决定架构 这句话什么意思呢?总结下来就是以结果和数据说话,结合重要的功能、约束做出架构设计,注重所有功能的理想化,避免延期或者是方向错误造成的需求大改。
    其余需求验证架构,从每项非关键需求的角度对架构方案进行走查。

如何确定关键需求?

  1. 确定关键质量,确定着重提高哪些方面的质量属性要求,充分考虑质量属性的相互制约或相互促进关系,来调整不同质量属性的要求标准。
  2. 确定关键功能 确定关键质量,质量属性之间往往具有相互制约性
    主要确定的关键功能有核心功能、必做功能、高风险功能、特殊功能
    核心功能和必做功能都是一个系统的核心,必须对这些功能的设计更加充分,理清模块关系的同时增加对这些功能的扩展性和预见问题的思考。

4. 概念架构设计

概念架构设计指的是目标的设计思想和重大选择。

概念架构界定系统的高层组件,以及它们之间的关系,但是不涉及具体的实现细节。

1. 利用鲁棒图完成功能需求到设计的鸿沟

网络异常,图片无法展示
|


先完成角色与职责间的关系,然后开始增量建模,发散出来控制对象和边界对象。

利用目标-场景-决策表,来引入新的设计,进而改进老的设计,这就是架构师要考虑的因素,包括了价值、代价、开发难度、技术选型、出现次数等。

2. 设计任务

架构概念设计主要是功能和质量 以及设计任务,架构设计需要明确的是

  • 决定:如何划分顶级子系统
  • 选择:架构风格选型
  • 选择:开发技术选型
  • 选择:集成技术选型

3. 架构备选

不考虑备选架构是危险的,未来因为某些原因造成架构大改的时候就要付出更多的时间和经历。

通过上面的确定关键需求和概念架构设计,就已经确定了大方向,最后就是我们的设计好架构的各个方面环节

5. 细化架构设计

架构的重点,把难以处理的大问题分解成便于管理的小问题。

架构的难点就是系统之间各个部分的联系,如要深入理解系统,就需要学好系统思考,并对他一个整体进行审视。

从四个维度去做细化架构的工作

  • 逻辑架构:模块划分、接口定义、领域模型
  • 开发架构:技术选型、文件划分、编译关系
  • 物理架构:硬件部署、软件部署、方案优化
  • 数据架构:技术选型、存储方式、数据分布

6. 架构验证

不值得验证的架构,就不值得设计。

验证的方式

  1. 原型法 这里主要说下垂直演进原型,他和我现在说的多次交付,增量交付其实是差不多的
    但是为了验证架构,将选定的功能特性完整的实现,目的是让架构更快的跑起来,营造出我们想要的场景,进而更快的发现问题,对我们越有利。
  2. 框架法
  3. 测试运行期质量
    通过测试,发现架构的性能或者扩展性不能达到要求,尽快调整
  4. 评审开发期质量
    架构原型开发人员进行评估,基于此架构开发的可测试性和重用性

验证架构步骤

验证架构步骤

  1. 实现架构原型
  2. 进行运行期质量测试得到运行期质量属性评价
  3. 进行开发期质量评审得到评估结果
  4. 基于2和3的结果,进行架构决策

总结

可以看到每一个步骤直接都是相辅相成的,必须依靠环环相扣,才能让我们的架构更加的稳固,在实际的架构设计中我们既需要思考他的纵向也需要思考他的横向。

image.png

相关文章
|
7月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
83 0
|
7月前
|
存储 监控 微服务
微服务和单体架构是两种不同的软件架构风格
微服务和单体架构是两种不同的软件架构风格
86 1
|
4月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
7月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
149 5
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
5月前
|
人工智能 供应链 架构师
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
59 2
|
5月前
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
153 10
|
5月前
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
210 8
|
7月前
|
存储 监控 微服务
微服务和单体架构是两种不同的软件架构风格,每种都有其自身的优缺点
【1月更文挑战第1天】微服务和单体架构是两种不同的软件架构风格,每种都有其自身的优缺点
117 0