当我谈架构的时候,我谈些什么?——欧阳辰

来源:互联网 发布:qq一键加群好友软件 编辑:程序博客网 时间:2024/04/29 05:57

       过去一年,业务增长迅猛,架构不断改进,但我却看不清楚架构未来的样子,经过思考悟出一些简单的道理,架构是为业务服务的,一切不以业务为指标的架构都是耍流氓。

为什么要谈架构?

       谈一谈过去一年,自己在建设小米广告平台的一些关于架构收获。最近一年,小米广告的业务飞速发展,架构不断进化,单一业务变成了近10个业务,研发人员也翻了3倍,广告请求流量翻了10倍还多,部署的机器也翻了近8倍,各个业务将继续保持高速发展。最近碰到一个困扰,我能看清楚三个月内架构进化的目标。但是,我却无法想清楚半年或一年后架构演化的蓝图?这个问题给我带来不少思考,直到最近,才理清楚了一些道理:不为业务服务的架构演化都是耍流氓,对架构长期目标的不清楚,就来源于对于业务多变性的不可预测。

       先讲讲近一年项目的架构演化,年初的时候,业务单一,基础薄弱,算法朴素。首先,在线上事故的教训下,增加了全面的监控,包括主动监控、被动监控,并且将可监控性作为每一个服务的基本属性,问题检测时间缩短到分钟级,问题排除效率也大大提高;另外,在业务压力的推动下,朴素的广告算法逐步升级成基于大数据的模型,模型数据的实时性也从每日更新,变成每分钟更新,进行一个算法实验变得更加敏捷;在牵一发而动全身的设计困惑下,“大泥团”的架构实体渐渐理顺了层次和关系,分清了主和次。业务也从单一大业务,变成了3个骨干业务+5初创业务的复合服务。


软件架构的蓝图在哪里?

        虽然架构一直在进化,新旧问题也不断在被解决,但是对于半年或一年后的架构,依旧无法看透。架构需要不断的优化和改进,但是以什么为指南针,来判定架构改进任务的优先级,如何平衡短期和长期的投入和收益?一直没有悟透这个道理,为此找来了几本书看看。一本是《架构之美》,还有一本是《恰如其分的架构设计》,还有Martin Fowler的一些文章,有了一些启发。


       首先对于架构的理解,找到了些共鸣。

      大师Grady Booch对于软件架构的定义是“架构是一种设计,但并非所有设计都是架构。架构代表着发展一个系统的重要决定,而这种重要性是通过引入变化的成本来衡量的”。引入变化成本将成为架构决策的重要因素,这与我的想法不谋而合,其实架构的演化就是与业务息息相关。

      《恰》里提到“对定一个系统,需要多少专门的架构设计工作? 一个关键问题是,如果一个项目没有太多的设计风险,说明架构在一个好的状态,不需要太多的架构工作;如果一个系统的设计风险很大,每一个业务实现都需要过多的考虑设计风险,那么说明这个项目的架构需要大力投入了。这就是风险驱动的架构设计。”

       这些理解都和我的想法不谋而合,架构是一个过程,而不是一个结果。架构的需求来源于系统的状态和业务的需求,说一句俗气的话“不为业务服务的架构都是耍流氓”,遵守奥卡姆剃刀定律,如无业务必要,无需增加不必要的架构工作。

架构师和建筑师

       架构师和建筑师相同点是都需要负责一些框架,建筑师需要保证建筑的美观,实用和坚固,架构师也需要负责软件架构的简单,实用和可靠。他们之间很大的区别是:架构师随着时间的演化,需要继续对架构进行演化,以支持业务的发展,他比建筑师多一个时间的维度。所以,架构师的角色更像是一个城市的规划师,负责长期的演化工作,应对以后的变化,包括很多未知的可能性。遥想建国初年,梁思成提出来的《梁陈方案》如果能够演化下来,北京的古城保护将会是另外一番景象。


架构师的KPI

       好了,搞清楚了架构师的作用之后,如何评定架构师的成绩(OKR或者KPI)、响应时间、并发数量、开发效率、缺陷数量等。这些都是工程师眼中的工程师目标,这些指标到底和业务增长有多少关系呢? 有些可能是直接相关的,有些可能是间接相关的,并非是面向业务的演化。如果将业务的KPIs作为架构师的KPIs呢,例如营收、用户数、使用时长、留存数等?初想这个问题,感觉很难关联上,但是仔细想想,关联还是非常大的。架构师在系统演化过程中,最重要的技能就是能够平衡好成本、速度、质量和风险,那么在平衡这些因素的时候,总是需要一个基本原则来指导,这就是通常说的True North,用最简单的指标来决定方向。那么,业务的关键指标将是非常重要的。

       为什么只选一个关键指标,因为真正的北方只有一个。有一本书叫做《Lean Analytics》里面介绍了一种观点 OMTM(One Metric That Matter),每个组织都应该找到它的关键指标,这个指标必须简单直接,寻找这个指标也许不容易,但是一旦确定下来,就可以快速迭代、进行优化、周而复始的为之努力。架构的演化也必须找到这个指标。

       总结一下,当我谈架构的时候,我谈的是架构需要对业务负责,演化指标必须与业务关联,为情怀而生的架构是难以落地的。

0 0
原创粉丝点击