架构设计策略之风险驱动设计


你今日预咗风险未?
每次与项目成员沟通后,应该都会预感项目有风险吧。
大概都会遇到这些问题:进度风险、技术难点、需求变动、资源分配问题等等。
别和我说,基本没啥风险,项目很稳定。真有这样没风险的项目,那就不须要架构师了。毕竟这样的项目确定会有成熟的“轮子”,直接借鉴就行了。
实际上,没风险的项目不多,须要开发的软件项目总有风险的,由于实际需求都是随时间变化的。
咱们平常生活不少事情都是看风险来作决定的,最明显莫过于股票、基金等投资行为,在本身能接受的风险范围内进行决策。这是由于风险能够反映出真实世界的不肯定性,并且是一个很好的决策指示器,它能帮助咱们看清障碍,作出合理的选择。
所以,风险是能够指导咱们进行优秀的架构设计,也就是说咱们能够采用风险驱动模型进行架构设计。

风险驱动设计

风险驱动模型就是以风险为中心,根据合乎逻辑的理由进行决策权衡的模型。web

采用风险驱动的话,必需要能回答如下这些问题:安全

  • 项目的主要失败风险有哪些?
  • 应对失败风险的技术有哪些?
  • 什么时候结束和恢复架构设计?

为了解答以上问题,主要的对策有:网络

  • 识别风险、描述风险
  • 选择技术下降风险
  • 设定风险阈值,权衡架构设计

下面就将详细讲解以上的问题和对策。架构

风险

风险是指一个事件产生咱们所不但愿的后果的可能性。对于已经发生的,应该称之为事故。
以上对风险的定义没法直观衡量,咱们借鉴下在工程领域对风险的定义,即:
风险 = 失败的几率 x 失败带来的影响
但定义中失败的几率和影响大部分的时候是难以精确度量的,除非咱们能觉察到风险,也就是说只能在已知的条件下去定义风险。所以,风险的定义就变为:
当前已知条件下的风险 = 觉察到的失败的几率 x 觉察到的影响
此定义是让咱们接受现实,尽力去下降觉察到风险,使架构设计达到已知的最优。
有了定义,首先咱们要识别风险,而后就能够去描述风险,更深刻地理解风险。框架

识别风险

识别风险的方法主要有:性能

  • 肯定难以实现的需求。例如,复杂难以理解的业务问题,就须要开需求会议来评估风险。
  • 识别不完整或难以理解的质量属性(非功能属性)需求。例如,“保证可靠性”这种不可测试的质量属性,就须要开发质量属性研讨会来识别风险。
  • 借鉴典型风险来识别。例如,web项目必需要关注安全性。
  • 风险分类排序。以利益相关方需求的优先级和开发者觉察到的难度来进行风险分类排序。

描述风险

根据风险的定义,描述风险至少须要三个部分:条件、后果、优先级。条件是当前风险可能发生的实际状况,后果(觉察到的影响)是由条件引起的未来可能出现的不良情况,优先级(觉察到的失败的几率和影响等来肯定)是已知条件下风险的重要程度。
然而,这样的描述方式缺少项目交叉引用的能力,所以为了标识风险以及便于沟通理解,咱们还须要加入四个部分:名称、编号、类型、来源。
咱们能够采用表格的形式记录风险。例如,能够用表1做为示例来描述风险。
表1 描述风险学习

风险名称 风险编号 风险类型 条件 后果 优先级 来源
数据处理风险 R1.1 数据风险 业务系统CPU、磁盘和网络带宽已占有80%,数据处理将消耗大量的时间和资源 可能没法顺利完成任务 数据需求D1.1:必须1小时内处理完数据

经过描述理解了风险后,咱们能够经过如下方式去下降或消除风险:测试

  • 下降几率。减小业务系统的资源占有。
  • 减小影响。优化数据处理的能力,提高资源的利用率。
  • 减少风险发生的时间窗口。在业务系统空闲时,进行数据处理。
  • 移除条件。增长CPU、磁盘和网络带等资源,或需求来源方沟通,下降质量属性的要求
  • 接受现状,等接近不可接受的程度再着手处理。优先级不高,数据处理超时和资源不够用的状况较少出现,等解决完优先级高的风险后或风险优先级上升后再处理。

风险指导架构设计

一旦能清楚地识别和描述所面临的风险,就能够借助风险来指导架构设计,进而运用合适的技术去下降或消除风。
能够把风险理解为架构设计的GPS,它帮助咱们进行架构设计的定位,告知咱们目前在何地距离要去的目的地还有多远优化

技术选择

根据风险选择技术是最敏捷高效的,这样就不会把时间和资源浪费在那些低效的技术上,也不会忽略那些危及项目的风险,主动地推进咱们进行最优的技术选型。
借助风险选择技术的方法主要有:url

  • 分析风险的条件、影响、几率、时间窗口,肯定能够解决的部分,进而选择解决问题的技术。
  • 借鉴业界成熟解决方案。
  • 研究密切相关的技术,寻找解决风险的技术

为了实现架构设计的可重复性,咱们还能够总结经验,作出风险指导架构设计的指南。例如:

面临的风险 解决的技术 时间和成本预计
数据处理没法顺利完成 增长硬件资源、引入数据处理框架 硬件资源每一年花费XX元,引入XX框架学习成本是x我的天

设定风险阈值

风险的阈值究竟是多少?
咱们参考下《恰如其分的软件架构》对风险阈值的定义:风险下降到再也不是系统中最大风险源的地步。固然这是主观的判断,但只要能保证所设计的架构能克服所面临的失败便可。

若是架构再也不是系统中最大的风险源,就能够从主动设计转为被动设计,不然从被动设计转为主动设计。主动设计是指主动设法下降或消除风险。被动设计是指在需求变动、出现未知的性能问题等须要及时纠正的状况。

须要注意的是,架构还能够随时从新变回重大的风险源,这多是由于现实环境的变化、重大的需求变动、不可控的项目管理风险等等。当这些状况出现时,确定要切换回主动设计模型。

总结

运用风险驱动设计的方法,能够识别和描述风险,并选择一套架构和设计技术来下降或消除这些风险,还能够根据风险的重要程度和阈值,把握住架构设计的度,进行最高效敏捷的设计。

相关文章
相关标签/搜索