虽然我们经常提到风险管理,但还没有阐述我们对风险的观点,以及如何进行风险管理。本文大致涵盖了在任何的技术或业务决策过程中如何确定和管理风险。风险管理是提高和保持可用性及可扩展性的最基本和最重要的方面。
风险管理的重要性
商业在本质上是一种冒险的尝试。举一些风险的例子,比如业务经营模式不成立或者过时,产品成本太高或者产品不再受客户的青睐。在经营中,你必须能够识别和平衡风险与相关的回报。比如,推出一个新版本,显然会有风险,但也应该有回报。
大多数组织监控风险并聚焦在降低风险事故发生的概率。在产品开发生命周期中引入更多的测试是降低风险的典型方法。这种方法的问题是,测试只能减少错误或者降低错误出现的概率,但是毕竟这还是有限的非零数量。而且需要在长时间里持续测试,比如尽管卫星软件已经研发完成,但是仍然不能确保代码没有缺陷。1999年9月23日,美国航空航天局失去了价值1.25亿美元的绕火星轨道飞行的卫星,原因是有一个关键的航天器计算,洛克希德·马丁公司的工程团队使用英制的测量单位,而NASA团队则使用标准的公制测量单位。为什么在测试中没有发现这种不一致的问题呢?正如质量专家所熟知的,答案是:即使是中度复杂程度的系统,要想确保软件无缺陷,在数学上也是不可能的。
在AKF,我们倾向于把风险看成是一个多元化的产品,如图所示。我们将风险分为事件发生的概率,以及如果该事件发生会产生什么样的影响。事件的概率部分是由在版本发布中所涉及的变更量和每一个变更所涉及的测试量而所决定的。变更的量越大,事件发生的几率就越高。测试做得越多,事故发生的概率就越低。降低事故概率的主要措施应该包括较小的版本和更有效的测试。
相比之下,事故的影响包括影响范围(按客户的百分比计算的用户影响或交易的百分比)和持续时间。如图16-1所示,架构决定如故障隔离和X、Y和Z轴分割(所有这些都会在第三部分中讨论),将有助于降低影响范围。有效的监控以及问题和事故管理将有助于缩短持续时间。我们曾经在第一部分涉及这些领域。
如果从本质上看企业都是有风险的,那么那些成功企业的风险管理难道就是做得好吗?我们认为,这些公司要么是风险管理很有效,要么是迄今为止非常幸运。我们都知道,运气迟早会耗尽的。
如果只是因为幸运,那么你现在应该开始担心了。人们可能争辩说,风险遵循马尔可夫特性,这意味着未来的状态是由现在的状态决定的,与过去的状态无关。我们认为,在某种程度上风险是一个累积的过程,也许是呈指数衰减但仍然是不断增加的。今天的一个危险事件,可能会导致未来的失败,不是直接相关(例如,今天的变更是未来某个事故产生的原因)就是间接相关(例如,组织对风险容忍度的增加会导致未来更大风险的行为)。无论是哪种方式,行动都可能会带来近期和长期的后果。
有些人可以自然地感知和管理风险。这些人可能经过多年的技术工作累积了这方面的经验和技能。也可能有一种与生俱来的感知风险的能力。虽然有这样的人很好,但是这样一个人仍然是一个单点故障。因此,我们需要培养组织里其他的人更好地测量和管理风险。
因为风险管理对可扩展性非常重要,我们需要了解风险管理过程的组成和步骤。试图准确地确定风险的方法有很多,有些比较准确,有些涉及的面比较广。重要的是为你的组织选择合适的方法,这意味着要平衡严密性和精确性。在对风险进行评估后,必须对急性风险和整体风险积极管理。急性风险是与特定行为相关联的风险,例如在服务器上更改配置。整体风险是由于在过去数天、数周甚至数月内发生的所有行动在系统中所累积的风险。