写点什么

从迪卡侬的架构流程看如何管理大规模软件架构

作者:Eran Stiller

  • 2024-08-13
    北京
  • 本文字数:2621 字

    阅读完需:约 9 分钟

大小:1.30M时长:07:35
从迪卡侬的架构流程看如何管理大规模软件架构

迪卡侬资深工程师Raphaël Tahar最近分享了他在大规模架构流程中进行协同领导的洞见。在四篇系列博文中,Tahar 描述了如何通过结合架构委员会、C4 模型和系统思维等方法,以及强调 ADR 和集中文档的重要性,来确保迪卡侬的团队能够做出明智且具有战略性的决策。


他所在的团队为超过 120 名工程师提供支持,这些工程师分布在 23 个团队中,是迪卡侬全球 1500 多名工程师的一部分。为这种规模的开发者提供支持并非易事,涉及为设计新系统、优化现有系统以及确保与全球战略对齐提供专业支持。为此,迪卡侬成立了一个架构委员会,该委员会在引导团队评审复杂决策过程方面发挥着至关重要的作用。


Tahar 利用垃圾桶模型来阐释架构委员会的重要性。这个在 20 世纪 70 年代发展起来的模型将组织决策描绘为一个混乱的流程,其中问题、解决方案和决策者分散在不同的流程中。这些流程以不可预测的方式相互交织,就像垃圾桶中的杂物一样,而决策的机会就是在这种动态中孕育出来的。


然而,根据 Tahar 的说法,这种“垃圾桶流”缺乏三个要素:决策替代方案、后果以及后果与目标的对比。


组织必须确保充分考虑了这三个要素,如果忽视了这些,项目延期、否决和反弹(例如不可靠的服务招致的罚款)的风险将大幅上升,进而可能导致巨大的预算浪费。



垃圾桶模型及其缺失的要素(source


架构委员会 介入正是为了填补这一空白。它的职责不在于代替软件工程师做出架构决策,而是提供必要的支持和指导,类似于一个建议流程。委员会帮助工程师明确和深化他们的问题理解与背景分析。它确保涉及正确的利益相关者,识别可能的解决方案,并筛选出最合适的替代方案。委员会成员深入理解每种解决方案的潜在后果,确保这些决策与迪卡侬的技术战略和指导原则保持一致,并借助 C4 模型,通过架构决策记录(ADR)和图表即代码(Code as Diagram)的方式记录下所有的决策。


迪卡侬利用一系列关键绩效指标(KPI)来评估架构委员会的成效。其中一项核心指标是工程师的满意度,这通过净推荐值(NPS)调查来衡量,反映团队在知识共享和识别潜在盲点方面的信心水平。


此外,委员会还密切关注对服务等级目标(SLO)的影响,特别关注与组织优先事项一致的关键指标,如高峰时段的系统可靠性。此外,委员会还评估其对 DORA 指标的影响,包括部署频率、变更前置时间、变更失败率和服务恢复时间。这些 KPI 有助于衡量委员会在提升部署效率和降低运营问题方面的贡献。。


迪卡侬采用C4模型来明确界定软件架构的范围和边界,有效管理架构的复杂性。根据问题的不同规模采取相应的方法来简化复杂度。还原论方法将问题分解为更小、更易于管理的任务,而整体论方法则强调理解系统内部的相互依赖性,这两种方法对于做出有效决策都至关重要。通过结合系统思维和这些方法来梳理相互交织的问题和解决方案之间的层次结构。


最后,架构决策记录(ADR)提供了一种结构化的方式来记录决策的背景、考虑到的可选项、决策结果及其潜在影响。这种文档确保决策是可追溯的,促进了知识的传递,并有助于避免重复过去的错误,因为记录架构决策对于维护大型组织的一致性和连续性起到了关键作用。迪卡侬使用Structurizr来存储 ADR,该工具支持“图表即代码”,并将文档集中管理,从而促进团队协作和保持一致性。



Structurizr 自动生成的页面示例 (source)


InfoQ 与 Tahar 就迪卡侬的架构流程、相关挑战和组织影响进行了交谈。


InfoQ: 运营架构委员面临着哪些挑战?你如何确保应该提交给委员会进行评审的决策确实被摆在了台面上?


Raphaël Tahar: 在运营架构委员会的过程中,我们面临两个主要的挑战。第一个挑战是确保一个庞大且多样化的组织,尽管涉及不同的职业角色并经历着人员的更替,仍然能够与我们的过程保持一致。


第二个挑战确保在关键时刻通知资深工程师,让他们知情参与,以协助在项目的功能性和技术探索阶段做出调整。鉴于我们有大量的倡议,但只有五名 Staff Engineer,所以并不总是能够让他们都参与每个倡议。


此外,我们资深工程师的专业特长以及在新倡议中不均衡的工作负载分配进一步增加了复杂性。为了解决这个问题,我们让工程副总裁、总监、集团产品经理、工程经理和技术领导也参与委员会的工作。


InfoQ: 在文章中,你提到了委员会的 KPI。这些 KPI 如何体现委员会的工作成效?反馈周期有多长,你又是如何根据这些指标来调整委员会的工作以提高 KPI?


Tahar: 量化架构委员会的影响力确实具有挑战性,这主要是因为它的作用是间接的。委员会的任务是影响团队,然后团队再影响他们的产品,最终影响业务。为了有效评估委员会初期影响,对每个步骤进行细致的监督至关重要。


通过从工程团队那里收集反馈,我们能够做出必要的调整,并澄清一些细节。例如,我们发现委员会需要关注的具体变化缺乏明确的定义,因此经过多次迭代才得出了准确的界定。这个过程还帮助我们识别并解决了一些虽小但至关重要的考虑因素,例如确定审查、研讨会和接触点的最相关时间段和最佳节奏。在委员会的最初几个月内收集这些反馈至关重要,之后应每季度进行一次。


最后,我们通常可以在决策后的六个月到一年内评估业务影响。决策必须被实施和部署,产品必须在生产环境中运行一段时间,才能看到对业务的影响。


InfoQ: 在迪卡侬实施 C4 模型带来了哪些最显著的影响,它如何帮助管理复杂性并提高工程师对系统的了解?


Tahar: C4 模型本质上是一种声明性方法。它要求团队成员明确并协调他们对代码、组件、容器乃至整个应用上下文的认知模型。这个过程激发了富有成效的讨论,促进了知识的共享和对固有信念的重新审视。


它还有助于领导层深入理解团队与外部系统之间的相互依存关系。换句话说,它有助于识别潜在风险,并为组织优化提供了清晰的视角。


最后,正如俗话说的,“一张图胜过千言万语。” C4 模型通过标准化的方式捕捉和分享上下文信息,极大地促进了跨团队和跨领域的沟通,使得讨论更加流畅和高效。


InfoQ: 根据你的观察,在项目中使用 ADR 最显著的好处是什么,你如何确保这些记录随着时间的推移仍然相关和有价值?


Tahar: ADR 通过在文档中详细记录决策背景,减少了模糊性和误解。它还有助于揭示在书面表达过程中可能存在的思考上的漏洞或偏见。


考虑到我们有 23 个团队,可能产生大量 ADR,所以我们希望避免不必要的信息过载。因此,C4 仓库仅记录 C1 和 C2 级别的变更,而 C3 和 C4 级别的决策则应整合到相关的代码库中。这种策略限制了 ADR 的数量,集中关注最关键的决策,有助于理解背景和产品演变背后的深层次原因。


原文链接

https://www.infoq.com/news/2024/07/decathlon-architecture-process/

2024-08-13 08:0011326

评论

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

醉三皇成为第12届北京国际网络电影展官方指定用酒品牌

联营汇聚

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

排障定位时间缩短一半, 博睿数据如何赋能青岛住房公积金管理中心

博睿数据

APM AIOPS 智能运维 博睿数据 精选案例

Java Netty框架自建DNS代理服务器教程

小小怪下士

Java 程序员 Netty DNS

前端高频react面试题整理

beifeng1996

React

分布式是大数据处理的万能药?

jiangxl

年终盘点丨最受开发者欢迎的文章 TOP20

阿里巴巴云原生

阿里云 云原生

一文了解 Go time 包的时间常用操作

陈明勇

Go golang time

前端二面经典vue面试题指南

bb_xiaxia1998

Vue

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

京音平台-一起玩转SCRM之电销系统

京东科技开发者

架构设计 系统 scrm 企业号 1 月 PK 榜 电销

安畅携手阿里云共建Landing Zone方案,助力企业上云无忧

云布道师

阿里云

简单谈谈Redis中的几种java客户端以及优缺点!

风铃架构日知录

Java redis 程序员 程序人生 客户端

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

社招前端react面试题整理

beifeng1996

React

WWW 是否应该属于 URL?

devpoint

Cookie url SEO www

从零开始实现一个Promise

helloworld1024fd

JavaScript

百度前端经典vue面试题整理

bb_xiaxia1998

Vue

高级前端常考手写面试题合集

helloworld1024fd

JavaScript

带你用20张图了解什么是 JVM 运行时数据区

风铃架构日知录

Java 程序员 JVM 码农 内存

表格集算表高性能原理——怎样实现纯前端百万行数据秒级响应

葡萄城技术团队

如何使用API Hub 实现一个图片列表

Towify

React面试:谈谈虚拟DOM,Diff算法与Key机制

beifeng1996

React

从零手写react-router

helloworld1024fd

JavaScript

阿里云开源大数据平台EMR全面升级 性能最高可提升6倍

阿里云大数据AI技术

大数据 云原生 大数据 开源

《隐私计算白皮书(2022年)》概览

京东科技开发者

技术 安全 隐私保护 白皮书 企业号 1 月 PK 榜

SOA 和微服务有何区别?

江南一点雨

Java 微服务 springboot SOA

前端必会手写面试题合集

helloworld1024fd

JavaScript

那些炫酷的CSS文字效果之诗词《兔》

南城FE

CSS css3 前端 动画

程序员该如何用“高科技”智能地教狗狗上厕所

风铃架构日知录

人工智能 深度学习 程序人生 后端 系统架构

如何实现发送评论时总数自动加一?

Towify

从迪卡侬的架构流程看如何管理大规模软件架构_架构_InfoQ精选文章