31、软件架构师的职业发展与技术实践

软件架构师的职业发展与技术实践

在当今快节奏的软件开发环境中,忙碌的架构师们常常面临着时间紧张的挑战。对于他们而言,在繁忙的日程中挤出时间进行深入思考,是培养独特思维方式的唯一途径。

1. 开源可视化工具

为满足大众需求,ThoughtWorks 于 2016 年 11 月发布了一款工具,助力技术人员构建自己的雷达可视化图。当 ThoughtWorks 为企业开展此项工作时,会将会议成果记录在电子表格中,每个象限对应一个页面。该工具以 Google 电子表格为输入,利用 HTML 5 画布生成雷达可视化图。这不仅能引发有价值的讨论,还能生成实用的可视化成果。

2. 利用社交媒体拓展技术视野

架构师可借助社交媒体发现新的技术和技巧。Andrew McAfee 在《Enterprise 2.0》中指出,人际关系网络可分为强连接、弱连接和潜在连接三类。强连接包括家人、同事等经常联系的人;弱连接如泛泛之交、远亲等,一年只见几次面;潜在连接则是尚未结识的人。有趣的是,一个人的下一份工作更可能来自弱连接而非强连接。架构师可利用社交媒体的这一特性,关注值得尊敬的技术专家,从而构建新的技术网络,紧跟技术发展的步伐。

3. 持续实践提升架构技能

实践是提升技能的关键,对于架构师来说也不例外。鼓励新老架构师不断磨练技能,既提升个人技术广度,也精进架构设计的技艺。可以参考相关网站上的架构练习,这些练习能帮助架构师锻炼架构设计能力。需要注意的是,架构设计没有绝对的对错,只有权衡和取舍。在培训课程中使用架构练习时,我们发现仅保留学生的设计图是不够的,因为决策背后的原因才是更有价值的,它包含了权衡的过程。

4. 自我评估问题

以下是一系列自我评估问题,涵盖了软件架构的多个方面,有助于架构师检验自己的知识和技能:
- 架构基础
1. 定义软件架构的四个维度是什么?
2. 架构决策和设计原则有何区别?
3. 软件架构师的八项核心期望有哪些?
4. 软件架构的第一定律是什么?
- 架构思维
1. 描述传统架构与开发方法,并解释为何这种方法不再适用。
2. 列出知识三角的三个层次,并各举一例。
3. 为何架构师应更注重技术广度而非深度?
4. 架构师有哪些方法保持技术深度并亲力亲为?
- 模块化
1. “connascence”一词是什么意思?
2. 静态和动态 connascence 有何区别?
3. 类型 connascence 是什么意思?它是静态还是动态 connascence?
4. 最强和最弱的 connascence 形式分别是什么?
5. 在代码库中,静态和动态 connascence 哪个更受青睐?
- 架构特征定义
1. 一个属性要成为架构特征,需满足哪三个标准?
2. 隐式和显式架构特征有何区别?各举一例。
3. 给出一个操作特征的例子。
4. 给出一个结构特征的例子。
5. 给出一个跨领域特征的例子。
6. 可用性和性能哪个更值得追求?
- 识别架构特征
1. 为何限制架构支持的特征数量是一种好的做法?
2. 大多数架构特征是否来自业务需求和用户故事?
3. 如果业务涉众认为上市时间是最重要的业务关注点,架构需要支持哪些特征?
4. 可扩展性和弹性有何区别?
5. 公司即将进行重大收购以扩大客户群,应关注哪些架构特征?
- 测量和管理架构特征
1. 为何圈复杂度对架构分析如此重要?
2. 什么是架构适应函数?如何用它分析架构?
3. 给出一个测量架构可扩展性的适应函数示例。
4. 架构特征允许架构师和开发人员创建适应函数的最重要标准是什么?
- 架构特征范围
1. 什么是架构量子?它对架构为何重要?
2. 一个包含单个用户界面和四个独立部署服务(每个服务有独立数据库)的系统,有一个还是四个量子?为什么?
3. 一个有管理静态参考数据的管理部分和处理订单的客户部分的系统,应该有多少个量子?为什么?如果有多个量子,管理量子和客户量子能否共享数据库?若可以,数据库应位于哪个量子中?
- 基于组件的思考
1. 组件通常在应用程序或服务中如何体现?
2. 技术分区和领域分区有何区别?各举一例。
3. 领域分区的优势是什么?
4. 在什么情况下,技术分区比领域分区更合适?
5. 什么是实体陷阱?为什么它不是识别组件的好方法?
6. 在识别核心组件时,何时应选择工作流方法而非参与者/动作方法?
- 架构风格
1. 列出分布式计算的八个谬误。
2. 分布式架构有哪些单体架构没有的挑战?
3. 什么是印记耦合?
4. 解决印记耦合有哪些方法?
- 分层架构风格
1. 开放层和封闭层有何区别?
2. 描述隔离层概念及其好处。
3. 什么是架构陷阱反模式?
4. 哪些主要架构特征会促使你使用分层架构?
5. 为何分层架构风格对可测试性支持不佳?
6. 为何分层架构风格对敏捷性支持不佳?
- 管道架构
1. 管道架构中的管道可以是双向的吗?
2. 列出四种过滤器及其用途。
3. 过滤器可以通过多个管道发送数据吗?
4. 管道架构风格是技术分区还是领域分区?
5. 管道架构如何支持模块化?
6. 给出两个管道架构风格的例子。
- 微内核架构
1. 微内核架构风格的另一个名称是什么?
2. 在什么情况下,插件组件可以依赖其他插件组件?
3. 有哪些工具和框架可用于管理插件?
4. 如果有一个不符合核心系统标准插件合同的第三方插件,该怎么办?
5. 给出两个微内核架构风格的例子。
6. 微内核架构风格是技术分区还是领域分区?
7. 为什么微内核架构总是一个单一的架构量子?
8. 什么是领域/架构同构?
- 基于服务的架构
1. 典型的基于服务的架构中有多少个服务?
2. 在基于服务的架构中,是否必须拆分数据库?
3. 在什么情况下,你会想拆分数据库?
4. 可以使用什么技术来管理基于服务的架构中的数据库更改?
5. 领域服务是否需要容器(如 Docker)来运行?
6. 基于服务的架构风格支持哪些架构特征?
7. 为什么基于服务的架构对弹性支持不佳?
8. 如何增加基于服务的架构中的架构量子数量?
- 事件驱动架构风格
1. 代理和中介拓扑的主要区别是什么?
2. 为了更好地控制工作流,应使用中介还是代理拓扑?
3. 代理拓扑通常使用带主题的发布 - 订阅模型还是带队列的点对点模型?
4. 异步通信的两个主要优点是什么?
5. 给出基于请求模型中典型请求的例子。
6. 给出基于事件模型中典型请求的例子。
7. 事件驱动架构中,启动事件和处理事件有何区别?
8. 在从队列发送和接收消息时,有哪些防止数据丢失的技术?
9. 使用事件驱动架构的三个主要驱动架构特征是什么?
10. 事件驱动架构不支持哪些架构特征?
- 基于空间的架构
1. 基于空间的架构名称从何而来?
2. 基于空间的架构与其他架构风格的主要区别是什么?
3. 列出构成基于空间的架构中虚拟化中间件的四个组件。
4. 消息网格的作用是什么?
5. 基于空间的架构中,数据写入器的作用是什么?
6. 在什么条件下,服务需要通过数据读取器访问数据?
7. 小缓存大小会增加还是减少数据冲突的可能性?
8. 复制缓存和分布式缓存有何区别?基于空间的架构通常使用哪种?
9. 列出基于空间的架构中最受支持的三个架构特征。
10. 为什么基于空间的架构的可测试性评分很低?
- 编排驱动的面向服务架构
1. 面向服务架构的主要驱动力是什么?
2. 面向服务架构中的四种主要服务类型是什么?
3. 列出导致面向服务架构衰落的一些因素。
4. 面向服务架构是技术分区还是领域分区?
5. 在 SOA 中,如何解决领域重用和操作重用问题?
- 微服务架构
1. 为什么边界上下文概念对微服务架构如此关键?
2. 确定微服务粒度是否合适有哪三种方法?
3. 边车可能包含哪些功能?
4. 编排和编排有何区别?微服务支持哪种?在微服务中,哪种通信风格更容易?
5. 微服务中的 saga 是什么?
6. 为什么微服务对敏捷性、可测试性和可部署性支持良好?
7. 微服务中性能通常是问题的两个原因是什么?
8. 微服务是领域分区架构还是技术分区架构?
9. 描述一个微服务生态系统可能只有一个量子的拓扑。
10. 在微服务中,如何解决领域重用和操作重用问题?
- 选择合适的架构风格
1. 数据架构(逻辑和物理数据模型的结构)如何影响架构风格的选择?
2. 它如何影响你对架构风格的选择?
3. 架构师确定架构风格、数据分区和通信风格的步骤是什么?
4. 什么因素会促使架构师选择分布式架构?
- 架构决策
1. 什么是“保护自己”反模式?
2. 避免“邮件驱动架构”反模式有哪些技术?
3. Michael Nygard 定义的识别架构重要事项的五个因素是什么?
4. 架构决策记录的五个基本部分是什么?
5. 通常在架构决策记录的哪个部分添加架构决策的理由?
6. 假设不需要单独的替代方案部分,在架构决策记录的哪个部分列出建议解决方案的替代方案?
7. 将架构决策记录标记为“提议”的三个基本标准是什么?
- 分析架构风险
1. 风险评估矩阵的两个维度是什么?
2. 在风险评估中,有哪些方法可以显示特定风险的方向?你能想到其他表明风险是变好还是变差的方法吗?
3. 为什么风险头脑风暴必须是一个协作练习?
4. 为什么风险头脑风暴中的识别活动必须是个人活动而不是协作活动?
5. 如果三个参与者将架构特定区域的风险评为高(6),而另一个参与者评为中(3),你会怎么做?
6. 你会给未经证实或未知的技术分配什么风险评级(1 - 9)?
- 架构图绘制和展示
1. 什么是不合理的工件依恋?它对架构文档和绘图有何重要性?
2. C4 建模技术中的 4 C 指的是什么?
3. 绘制架构图时,组件之间的虚线表示什么?
4. 什么是“千疮百孔的尸体”反模式?创建演示文稿时如何避免这种反模式?
5. 演示者在进行演示时有哪两个主要信息渠道?
- 使团队高效
1. 三种架构人格类型是什么?每种人格创建的边界类型是什么?
2. 确定你在团队中应表现出的控制水平的五个因素是什么?
3. 可以观察哪三个警告信号来确定团队是否变得太大?
4. 列出对开发团队有用的三个基本清单。
- 谈判和领导技能
1. 为什么谈判对架构师如此重要?
2. 当业务涉众坚持要求五个九的可用性,但实际上只需要三个九时,有哪些谈判技巧?
3. 从业务涉众说“我昨天就需要它”中可以推断出什么?
4. 为什么在谈判中最后讨论时间和成本很重要?
5. 什么是分而治之规则?在与业务涉众谈判架构特征时如何应用它?举个例子。
6. 列出架构的 4 C。
7. 解释为什么架构师既要有务实精神又要有远见卓识。
8. 有哪些管理和减少受邀参加会议数量的技巧?
- 职业发展路径
1. 20 分钟规则是什么?何时最适合应用它?
2. ThoughtWorks 技术雷达的四个环是什么意思?如何将其应用到你的雷达中?
3. 描述软件架构师的知识深度和广度的区别。架构师应追求最大化哪个?

5. 架构风格与特征

不同的架构风格具有各自的特点和适用场景,以下是一些常见架构风格的特点总结:
| 架构风格 | 特点 | 适用场景 | 架构特征评级 |
| — | — | — | — |
| 分层架构 | 具有隔离层,可增加层次;技术分区常见 | 适用于需要分层管理和隔离的系统 | 可用性、性能等有一定评级 |
| 管道架构 | 由管道和过滤器组成,支持模块化 | 适用于数据处理流程明确的场景 | 可扩展性、可维护性等有相应评级 |
| 微内核架构 | 核心系统与插件组件分离 | 适用于需要灵活扩展功能的系统 | 可扩展性、可定制性等有评级 |
| 服务基于架构 | 由多个服务组成,可独立部署 | 适用于大型分布式系统 | 可用性、可扩展性等有评级 |
| 事件驱动架构 | 基于事件进行通信和处理 | 适用于需要异步处理和实时响应的系统 | 异步性、可扩展性等有评级 |
| 空间基于架构 | 利用虚拟化中间件和数据缓存 | 适用于需要处理大量数据和高并发的系统 | 可扩展性、性能等有评级 |
| 编排驱动的面向服务架构 | 通过编排引擎管理服务 | 适用于复杂业务流程的系统 | 可重用性、可维护性等有评级 |
| 微服务架构 | 基于边界上下文划分服务 | 适用于需要快速迭代和部署的系统 | 敏捷性、可测试性等有评级 |

6. 架构决策与风险分析

架构决策是架构设计中的关键环节,需要避免一些常见的反模式,如“保护自己”和“邮件驱动架构”。同时,要通过架构决策记录(ADRs)来记录决策过程和理由。在分析架构风险时,可以使用风险评估矩阵和风险头脑风暴等方法,识别和评估风险,并采取相应的缓解措施。

7. 团队协作与领导

架构师在团队中扮演着重要的角色,需要具备良好的领导和协作能力。要根据团队的特点和需求,确定合适的控制水平,观察团队的警告信号,及时调整管理策略。同时,要利用清单等工具,为开发团队提供指导和支持。

8. 技术发展与趋势

技术的不断发展对架构风格和设计产生着深远的影响。架构师需要关注技术趋势,如容器化、微服务、人工智能等,及时调整架构设计,以适应新的需求和挑战。同时,要利用开源工具和社区资源,不断提升自己的技术水平。

通过以上内容,架构师可以全面了解软件架构的各个方面,不断提升自己的技能和能力,在职业发展中取得更好的成绩。

架构决策流程 mermaid 图

graph LR
    A[明确业务需求] --> B[识别架构特征]
    B --> C[选择架构风格]
    C --> D[进行架构决策]
    D --> E[记录决策理由]
    E --> F[评估决策风险]
    F --> G[实施决策并监控]

架构特征识别流程 mermaid 图

graph LR
    A[收集业务需求和用户故事] --> B[提取架构关注点]
    B --> C[分析领域关注点]
    C --> D[确定架构特征]
    D --> E[评估特征优先级]
    E --> F[纳入架构设计]
9. 架构特征的测量与管理

架构特征的测量和管理对于确保架构的质量和性能至关重要。以下是一些关键的测量指标和管理方法:
- 圈复杂度 :圈复杂度是一种衡量代码复杂度的指标,对于架构分析非常重要。通过计算代码中的独立路径数量,可以评估代码的可维护性和可测试性。例如,使用 McCabe 方法计算函数或方法的圈复杂度,公式为:$V(G) = E - N + 2$,其中 $V(G)$ 是圈复杂度,$E$ 是边的数量,$N$ 是节点的数量。
- 架构适应函数 :架构适应函数用于评估架构是否满足特定的特征要求。例如,可以定义一个适应函数来测量架构的可扩展性,通过模拟不同负载下的系统性能来评估架构的扩展能力。
- 测量指标分类 :架构特征的测量指标可以分为操作指标、结构指标和过程指标。操作指标关注系统的运行性能,如响应时间、吞吐量等;结构指标关注系统的结构特性,如耦合度、内聚度等;过程指标关注系统的开发和维护过程,如开发周期、代码审查通过率等。

指标类型 示例指标 作用
操作指标 响应时间、吞吐量、可用性 评估系统的运行性能
结构指标 耦合度、内聚度、依赖关系 评估系统的结构合理性
过程指标 开发周期、代码审查通过率、缺陷率 评估系统的开发和维护效率
10. 不同架构风格的技术细节

不同的架构风格在技术实现上有各自的特点,以下是一些常见架构风格的技术细节:
- 分层架构 :分层架构通常分为表示层、业务逻辑层和数据访问层。各层之间通过接口进行通信,实现了隔离和松耦合。例如,在 Java 开发中,可以使用 Spring 框架来实现分层架构,通过依赖注入和面向接口编程来提高代码的可维护性和可测试性。
- 管道架构 :管道架构由管道和过滤器组成,管道用于传输数据,过滤器用于对数据进行处理。在实现上,可以使用 Unix 管道和过滤器的思想,通过 shell 脚本或编程语言来实现数据处理流程。例如,在 Python 中,可以使用生成器和迭代器来实现管道和过滤器的功能。
- 微内核架构 :微内核架构的核心系统提供基本的服务和接口,插件组件可以根据需要进行扩展。在实现上,需要定义插件的接口和规范,使用反射和动态加载技术来实现插件的加载和管理。例如,在 Eclipse IDE 中,通过扩展点和插件机制来实现功能的扩展。
- 服务基于架构 :服务基于架构由多个服务组成,服务之间通过网络进行通信。在实现上,需要考虑服务的发现、注册、调用和容错等问题。例如,可以使用 Spring Cloud 框架来实现服务的注册和发现,使用 Netflix Hystrix 来实现服务的容错。
- 事件驱动架构 :事件驱动架构基于事件进行通信和处理,通过事件队列和事件处理器来实现异步处理。在实现上,需要考虑事件的发布、订阅、处理和错误处理等问题。例如,可以使用 Apache Kafka 作为事件队列,使用 Spring Integration 来实现事件的处理。
- 空间基于架构 :空间基于架构利用虚拟化中间件和数据缓存来处理大量数据和高并发。在实现上,需要考虑数据的分布、缓存和一致性等问题。例如,可以使用 Hazelcast 来实现数据网格和缓存,使用 Kubernetes 来实现容器的编排和管理。
- 编排驱动的面向服务架构 :编排驱动的面向服务架构通过编排引擎来管理服务的调用和流程。在实现上,需要考虑编排引擎的设计和实现,以及服务之间的通信和协调。例如,可以使用 Apache ODE 作为编排引擎,使用 BPEL 语言来定义业务流程。
- 微服务架构 :微服务架构基于边界上下文划分服务,每个服务可以独立开发、部署和维护。在实现上,需要考虑服务的拆分、通信、容错和监控等问题。例如,可以使用 Docker 容器来实现服务的独立部署,使用 Prometheus 和 Grafana 来实现服务的监控。

11. 架构实践中的案例分析

通过实际案例分析,可以更好地理解架构设计和决策的过程。以下是一些案例分析的要点:
- 案例背景 :介绍案例的业务背景、系统需求和面临的挑战。
- 架构设计 :描述采用的架构风格和设计思路,包括架构的分层、组件的划分和服务的设计等。
- 决策过程 :分析架构决策的依据和考虑因素,包括业务需求、技术可行性、成本效益等。
- 实施效果 :评估架构实施后的效果,包括系统的性能、可维护性、可扩展性等方面的提升。

例如,在一个电商系统的案例中,业务需求是支持高并发的商品展示和订单处理,面临的挑战是数据量大、业务复杂和性能要求高。采用微服务架构进行设计,将系统划分为商品服务、订单服务、用户服务等多个微服务,每个微服务独立开发和部署。在决策过程中,考虑到微服务架构的敏捷性、可扩展性和可维护性,以及团队的技术能力和开发效率。实施后,系统的性能得到了显著提升,能够支持高并发的访问,同时开发和维护的效率也得到了提高。

12. 架构师的职业素养与技能提升

架构师不仅需要具备扎实的技术知识,还需要具备良好的职业素养和软技能。以下是一些架构师需要具备的素养和技能:
- 技术广度与深度 :架构师需要具备广泛的技术知识,了解不同的架构风格、编程语言、开发框架和工具。同时,也需要在某个领域有深入的研究和实践经验,能够解决复杂的技术问题。
- 沟通与协作能力 :架构师需要与不同的团队成员进行沟通和协作,包括开发人员、测试人员、业务人员等。需要具备良好的沟通技巧和团队协作能力,能够有效地传达架构设计的意图和要求。
- 问题解决能力 :架构师在工作中会遇到各种问题和挑战,需要具备分析问题和解决问题的能力。能够快速定位问题的根源,提出合理的解决方案,并推动问题的解决。
- 领导力与决策力 :架构师在团队中通常扮演着领导角色,需要具备领导力和决策力。能够带领团队制定架构设计方案,做出合理的决策,并推动项目的顺利进行。
- 学习与创新能力 :技术在不断发展和变化,架构师需要具备学习和创新能力。能够及时学习新的技术和知识,不断创新架构设计方法和思路,以适应市场的需求和变化。

架构师技能提升路径 mermaid 图

graph LR
    A[技术学习] --> B[实践项目]
    B --> C[经验积累]
    C --> D[技能提升]
    D --> E[领导力培养]
    E --> F[创新思维]
    F --> G[持续学习]
    G --> A
13. 总结与展望

在当今快速发展的软件开发领域,架构师扮演着至关重要的角色。通过不断学习和实践,架构师可以掌握各种架构风格和技术,做出合理的架构决策,有效地管理架构风险,并带领团队实现高质量的软件系统。

未来,随着技术的不断进步,如人工智能、大数据、区块链等的发展,架构师将面临更多的挑战和机遇。架构师需要不断提升自己的技能和素养,紧跟技术发展的趋势,创新架构设计方法,以适应新的业务需求和技术环境。同时,架构师也需要注重团队协作和沟通,培养领导力和决策力,为企业的发展提供有力的支持。

总之,架构师的职业发展是一个不断学习和成长的过程,需要持续关注技术的发展和行业的动态,不断提升自己的能力和价值。只有这样,才能在激烈的市场竞争中立于不败之地,为软件开发行业的发展做出更大的贡献。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值