风险对架构设计的驱动力

我在博客文章《以RAID分析作为架构驱动力》中介绍了RAID分析方法。这个方法将风险作为其中的一个重要驱动力,指导我们进行架构设计,避免陷入未知的陷阱。

无独有偶,Simon Brown在其著作Software Architecture for Developers中专门列出一个章节来阐释风险。他认为:

识别风险是恰如其分的预先设计的一个关键的部分,简而言之,风险就是未来可能发生的坏事,比如所选技术无法满足供应商的承诺。

△ Software Architecture for Developers中译本

George Fairbanks在其著作Just Enough Software Architecture中更是将风险看做架构设计的核心,提出“风险驱动设计”的方法论。我作为本书的译者之一,深刻地理解了这一方法,并在诸多项目中尝试实践。

古语云:为将者,未虑胜先虑败,故可百战不殆矣。这种“未虑胜先虑败”的思维实则就是我们时常提及的风险思维。由于软件架构是整个系统中最重要也是最不容易改变的部分(另一层意思就是改变成本太高),若不能正确地预见风险,并给出应对之道,一旦风险成为事实上的问题,就可能导致整个系统架构要推到重来,又或者付出即为沉重的重构成本。

George Fairbanks在Just Enough Software Architecture书中给出一个风险驱动设计的案例,介绍了Rackspace日志处理系统的演化,分别从本地日志文件演化到中央数据库,进而演化到基于HDFS的索引簇方案。这种演化固然说明了在当时当刻做出的所谓“恰如其分”的架构,但从另外一个层面来看,也可以视为风险意识不够,没有充分考虑到日志分析系统的可伸缩性,从而带来两次高成本的架构重构(甚至可以认为是重写)。

与RAID分析方法相似,Simon Brown在Software Architecture for Developers书中提出了一种帮助团队识别风险并排定优先级的协作手段——风险风暴。步骤如下:

  • 首先在白板上绘制系统最高层的架构图(可以参考书中给出的C4模型);
  • 团队成员(架构师、开发者、项目经理、业务分析师)在架构图前,各自写下他们能够识别的风险,一个风险用一张便利贴,并量化该风险;
  • 将各自的便利贴贴在架构图上,邻近风险被识别的区域;
  • 对风险设定优先级。

△ C4模型

识别风险并评估其优先级并非最终的目的。风险可以提前给我们以警示,之所以采用风险风暴的形式,是希望通过团队成员的群策群力尽可能让隐藏的风险暴露出来,从而为架构设计提供重要的参考。

于是乎,识别风险大多数时候又与技术决策以及技术选型相关,这才是真正考验架构师技术能力、敏锐性、知识广度与深度,以及设计经验的关卡。这是一个很大的话题,我希望能结合广泛的案例来深度探讨这部分内容。这里揭过不提,算是一个不礼貌的收尾。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2016-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

为什么编程这么难学?

曾经上学时就有过这样的经历,学习一个东西的时候刚开始大家的起点都一样。一个星期过后就会出现差距,一些人开始慢慢落下步法,一些人却高歌猛进。其实大家的智商99%的...

3085
来自专栏程序员的知识天地

多年前端开发程序员论述:这些必然的前端疲劳

前端疲劳是非常真实的。 我看到过一些关于JavaScript疲劳的文章,但我认为问题远不止于这种特定的语言。

733
来自专栏java一日一条

成为聪明程序员必知的5个技能

软件开发人员在任何项目的架构和设计上起着非常关键的作用。当前的现代化架构世界需要现代化或聪明的开发人员,这些开发人员装备了各种务实的技能。了然于心,社会化以及聪...

542
来自专栏web前端教室

与一个移民新西兰的前端同学的聊天记录(节选)

今天早晨在跟一个先行者计划的同学聊天中,觉得他的情况和需求很有代表性,所以在征得他同意之后,把我俩的聊天记录发出来,他的个人隐私信息已经隐藏。

1335
来自专栏互联网杂技

腾讯CDC:如何有效进行跨团队、多角色的沟通?

作为设计方接口人,我近期参与了某产品新版本的交互设计及开发跟进工作。该项目的产品规划、设计、开发、运营由京深两地四方多个团队合作进行。结合自身项目经历,现将我对...

883
来自专栏ThoughtWorks

持续交付模式下的安全活动|洞见

在上一篇文章《开发团队面临的三大安全挑战》中,我们对现如今敏捷精益团队所面临的安全挑战进行了总结和分析,这三大挑战分别是: 一次性的安全检查无法匹配持续性的交付...

2816
来自专栏程序员互动联盟

【编程指导】如何系统、科学地自学编程知识?

对于什么样的学习才算得上“系统”几乎是一个哈姆雷特式的问题——人们很难在这一问题上达成一致。 因此抛出答案几乎只是在引发更多的争议。所以在讨论这个问题的时候,我...

34713
来自专栏跟着阿笨一起玩NET

Google译者工具包

Google近日对其免费在线翻译平台译者工具包(Translator Toolkit)进行了大规模升级,一口气增加了多达285种语言,总数达到了345种。

1191
来自专栏腾讯社交用户体验设计

怎样让引导不再是无用小透明 - 腾讯ISUX

892
来自专栏SDNLAB

SDN与NFV技术对运营商后续网络的影响

随着云计算、大数据等新兴信息技术业务应用的规模落地,新业务应用对网络的需求越来越高,运营商的通信网络已进入快速变革时期。灵活性、易扩展和简单易用将成为运营商未来...

3275

扫码关注云+社区