50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

构建可持续架构的三大秘籍

作者:Grygoriy Gonchar

  • 2023-05-25
    北京
  • 本文字数:2785 字

    阅读完需:约 9 分钟

构建可持续架构的三大秘籍

软件工程师必须在已经做出架构决策的情况下才能进行开发。我们可以在新的微服务中使用 Python 而不是 Java 吗?在开发新的前端库时,我们可以使用另一个捆绑器吗?我是否应该与经理或其他团队在代码库结构问题上达成一致?


在设计 REST API 时应该使用 snake_case 还是 camelCase 来命名 API?公司需要建立一个明确的框架来做出这些决策、需要谁参与,以及在哪里可以找到关于已经做出的决策的信息。


制定一个正确的框架非常重要,因为它将定义不同的团队将拥有多大程度的自由和自主权。这应该与公司在特定阶段试图建立的业务需求和公司文化相一致。


这可能会影响人们如何看待不同的领导角色、经理和个人贡献者在技术决策中的作用,以及不同职业级别的赋能水平。不同的公司需要根据其组织边界、成熟度和需求选择不同的负责人和不同程度的团队自主权,但框架应该提供非常相似的构建块。


在本文中,我将基于最近在不同规模的组织中工作的经验分享用来制定架构决策的框架应该提供的关键构建块。这些构建块包括内部技术雷达、技术标准和架构决策记录(ADR)。


建立自己的技术雷达


有些人可能知道 Thoughtworks,他们建立了自己的技术雷达。Thoughtworks 与行业内的客户一起捕获和发布他们所看到的东西。


类似地,你也可以建立自己的技术雷达,用于捕获公司使用或计划使用的不同的技术、工具和方法的成熟度。技术雷达是公司当前正在使用和期望使用的技术栈的可视化表示。


你需要定义不同的阶段——评估、试验、采用和保留,以及技术应该如何经历这些阶段的过程。



heycar的技术雷达示例


在 heycar,我们定义了以下这些阶段。首先,新技术处于评估(Assess)阶段,也就是说它们正在被评估。我们在评估阶段进行概念验证(PoC),并生成在我们的环境中使用这些技术的优缺点清单。然后,我们与各自的内部团队或可能与之发生交互的团队讨论结果。如果论证清单和概念验证足够令人信服,那么下一步就进入可控的试验期。在试验期,新技术只被用于生产环境的单一用例。如果这一步成功,我们就宣布新技术已被采用,并为其他团队的进一步使用打开绿灯。如果新技术取代了以前使用的技术,可能需要发出信号。于是我们定义了“保留(Hold)”阶段——对于那么不打算再使用并且有了替代方案的技术。


技术雷达可以帮助团队了解技术前景,并就使用哪些技术做出明智的决策。如果你保持技术雷达是最新的,公司里的每一个人就都会知道正在使用的技术的最新状态及其对业务的影响。


引入内部技术标准


第二个部分是引入技术标准。技术雷达捕获技术、平台、工具、语言和框架,以及它们在整个组织中的采用程度,但这些可能还无法满足所有的需求。为系统的不同部分建立一致的实践会有所裨益。例如,你可能希望所有的日志都使用相同的格式,并包含相同的信息。或者,如果你正在使用 REST API,可能想要一些关于 API 设计和使用的约定,比如使用什么标头或如何命名。此外,如果你正在使用多种类似的技术,那么为何时该使用何种技术提供指导可能会很有帮助。技术标准定义了在公司内部选择和使用技术的规则。它们确保了一致性,降低以次优方式采用新技术所带来的风险,并在整个组织范围内推动保持一致性。


应该由谁来负责制定和维护这些标准?技术标准应由相关领域的跨职能专家团队负责制定和维护。技术标准需要进行定期的评审,并根据需要进行更新,以跟上技术领域的变化。应该鼓励团队遵循这些标准,并就其有效性提供反馈。格式可以不同,但最好可以提供详细的解释和代码示例。它可以是正式的,并遵循一些格式(如RFC格式框架),也可以是随意的,这取决于具体的偏好和工程文化。Zalando的RESTful API和事件指南是共享内部技术标准的一个很好的例子。除了 API 标准之外,你可能还想引入日志记录和监控、部署和 QA 标准。


你可以基于内部标准建立质量检验关卡,例如测试覆盖率检查、检查命名约定或格式的集成代码 linter、验证架构或代码库结构的适应性函数 (Fitness Functions)。自动检查、在新人加入时使用标准、代码评审或结对编程的组合将有助于确保标准被遵循并为我们带来价值。除了检查是否符合标准,这也是一个讨论平台工程价值的机会。不要只是简单地告诉人们他们做错了什么,而要让他们在一开始就做对。


架构决策记录(ADR)实践


架构决策框架的第三个构建块是创建 ADR 或轻量级RFC。ADR 是记录架构决策及其推理过程的一种方式。它们提供了重要决策的历史记录,并帮助团队理解为什么选择了特定的方法。ADR 应该由负责做出架构决策的团队创建。它们应该包括正在解决什么问题、有哪些替代方案、做出的决策以及背后的原因等信息。它们是不可变的文档。在重新审视给定的决策时,通常需要创建一个新的文档。ADR 实践正变得越来越流行,因此AWSGCP等主要云供应商已将其添加到各自的文档中。


技术雷达和技术标准为技术决策提供指导和预期边界,ADR 则捕获推理过程并记录特定的一次性决策——创建新服务或包、引入新技术或主要架构变更的原因。ADR 通常被保存在一个集中式的存储库或文档工具中,所有相关团队都可以访问它们。它们还可以帮助新团队成员快速了解整体架构和重大决策背后的原因。


ADR 评审有多种目的——评审决策和分享知识。每一个受决策影响的人都会参与到 ADR 评审中,但如果可以与更多人分享,它还有助于提高整个组织的整体架构意识。此外,ADR 可用于在内部收集更多的反馈。有时候,一些工程师可能在过去解决过类似的问题,只是现在没有在做相关的工作。


与前两个构建块一样,每个组织在最终确定 ADR 时的最终发言权以及哪些决策被认为足够重要而需要使用 ADR 的过程都是不同的。为了避免重复,你可以在做出新的主要系统变更时使用 ADR 来就特定的设计决策达成一致,而在决定使用何种编程语言、工具和实践时则采用技术雷达和技术标准。有了内部技术雷达和技术标准,采用 ADR 就应该是一个简单而直接的实践,因为最实质性的技术选择和原则已经达成了一致。


结论


技术雷达、技术标准和 ADR 共同构成了一种架构决策框架,这个框架为制定架构决策提供了清晰且一致的方法,降低了采用新技术的风险,并提供了决策历史记录。通过建立架构决策框架,团队可以确保他们的技术栈与他们的业务目标保持一致,并且他们的团队拥有做出明智决策所需的信息和指南。


团队所拥有的自由度,以及改变技术雷达、技术标准或 ADR 的过程,将塑造组织的工程文化。一些组织的目标是实现彻底的团队自治,而一些组织的目标则是保持高度的一致性。例如,一种可能的方法是让高级技术人员参与技术雷达和标准的制定,为进一步的技术决策提供指导,并将 ADR 留给负责实现软件功能的团队。你可以采用这种架构决策框架,并根据公司的需要做出调整。


原文链接

https://www.infoq.com/articles/framework-architectural-decisions/


相关阅读:

软件技术栈商品化:应用优先的云服务如何改变游戏规则

ThoughtWorks CTO:2025 年之前,我们会看到架构的演进,但不会看到革命

避免成为“象牙塔”架构师:架构师和组织之间的关系

2023-05-25 08:004832

评论

发布
暂无评论
发现更多内容

SpringBatch入门

五毛

sping ETL

新思科技推动产业革新 为智能网联车系好“安全带”

InfoQ_434670063458

软件 车联网 新思科技

现在,怎么挑选舞台租赁LED显示屏?

Dylan

LED LED显示屏

【Python】:如何处理异常报错?

翼同学

Python 编程语言 异常处理 8月月更 入门学习

MySQL 原理与优化:Limit 查询优化

老崔说架构

【超级账本开发者系列】专访——肖慧 : 不忘初心,方得始终

旺链科技

区块链 技术 超级账本

视频聊天源码——一对一直播如何提高直播质量?

开源直播系统源码

软件开发 直播系统源码 开源源码 语音聊天 视频聊天源码

2022年中国第三方证券APP创新专题分析

易观分析

App 金融 证券

43%非常看好TypeScript…解读“2022前端开发者现状报告”

华为云开发者联盟

typescript 开发者 前端

uniapp电影购票选座系统源码

清风

源码 计算机毕业设计

crm系统哪家好?好用的crm管理系统推荐

优秀

CRM系统

Substrate 源码更新导读八月第1周: 新版事务化存储层启用默认模式, Polkadot v0.9.27发布

彭亚伦

Substrate polkadot 波卡

大咖说·对话生态|当Confluent遇见云:实时流动的数据更有价值

大咖说

数字化转型 Confluent 大数据应用

开源一夏 | 使用 HTML、CSS 和 JS 制作一个中国象棋

海拥(haiyong.site)

开源 前端 8月月更

为什么我要迁移 SpringBoot 到函数计算

阿里巴巴云原生

阿里云 云原生 springboot 函数计算

九章云极DataCanvas APS机器学习平台获得中国信通院“领先级”评级

九章云极DataCanvas

人工智能 机器学习 大数据 数据分析 数据智能

Python语言基本语法元素

北极的三哈

Python 学习 开发语言

【活动报名】8月13日杭州站-开源遇上大数据

亚马逊云科技 (Amazon Web Services)

大数据 开源

用Python自动生成 图文并茂的数据分析 报告

程序员晚枫

Python pip Office 自动化办公

【燃】是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点

华为云开发者联盟

云计算 华为云 开发者大赛

看得见风和日丽,看不见风起“云”涌

天翼云开发者社区

云计算 大数据

走得通,看得见!你的交通“好帮手”

天翼云开发者社区

云计算 大数据 AI

Python零基础入门的第一天——开发环境的搭建

北极的三哈

学习 后端 开发语言 Python.

融云 x N 世界:构建无限用户实时交互的「元宇宙会场」

融云 RongCloud

isc 元宇宙

如何通过 open-local 玩转容器本地存储? | 龙蜥技术

OpenAnolis小助手

开源 云原生 分布式存储 龙蜥技术 open-local

[ Kitex 源码解读 ] Kitex 请求重试的分类及实现原理

baiyutang

Go 微服务架构 云原生 kitex CloudWeGo

玩转云端 | 天翼云电脑的百变玩法

天翼云开发者社区

云平台 云电脑

华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款

华为云开发者联盟

云计算 后端 华为云 流浪方舟

6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!

阿里云数据库开源

阿里巴巴 开源 开源数据库 阿里巴巴开源开放周 阿里技术

开源星「001 号」落地 FlyFish,欢迎登陆赢神秘大礼包!

云智慧AIOps社区

大前端 低代码 开源项目 数据可视化 大屏可视化

架构实战营第九模块作业-毕业项目

Geek_53787a

构建可持续架构的三大秘籍_架构_InfoQ精选文章