在前一部分,学习了很多系统质量属性,这些刻画都是通过场景的集合进行的,所以了解到了质量属性能够使我们获取质量需求,但是无法学习到如何实现它们。所以,接下来,我就学习了如何实现每个质量属性的构架,质量属性需求和构架决策之间的关系。
使一个设计具有可移植性,一个设计具有高性能,一个设计具备可集成性,实现这些质量属性的关键都在于基本的设计决策。我们将这些设计决策称为“战术”,即影响质量属性响应控制的设计决策。我们又把战术的集合称为“构架策略”。而系统设计由决策集合组成,在这些决策中,一些可以帮助控制质量属性响应,而另外一些可以确保系统功能的实现。对于设计师来说,每个战术都是一个设计的选择,所以设计师在实践中所使用的的战术,对于我们来说是需要去学习和借鉴的重要内容。比如,在提高可用性方面有两个最近的分支。(1)战术可以求精其他战术,我们可以将冗余确定为一个战术,但是同样,也可以把它求精为数据冗余(在数据库系统中)或计算冗余(在嵌入式系统中)。这两种类型也都是战术,而设计人员需要做的就是进一步求精以使每种类型的冗余更急具体,对于每一个质量属性,可以将战术组织为层级形式。(2)模式可以把战术打包。支持可用性的模式很可能会使用冗余战术和同步战术,也有可能会使用这些战术的更具体的形式。接下来学习了实现质量属性的战术方法,并将每个系统质量属性的战术组织为层次形式。
1.可用性战术:维持可用性的所有方法包括某种类型的冗余,用来检测故障的某种类型的健康监视,以及当检测到故障时某种类型的恢复,并且某些情况下,监视或恢复是自动进行的,还有些情况是手动进行的。对于错误检测部分,广泛应用于识别错误的3个战术是命令/响应、心跳和异常。错误恢复部分由准备恢复和修复系统两部分组成。主要使用的一些准备和修复战术有表决、主动冗余(热重启)、被动冗余(暖重启/双冗余/三冗余)、备件、shadow操作、状态再同步、检查点/回滚。错误预防战术主要有从服务中删除、事务、进程监视器。
为控制实现、测试和部署变更的时间和成本给出的可修改性战术。对在一定的时间限制内到达系统的事件生成一个响应的性能战术。与抵抗攻击有关、与检测攻击有关以及与从攻击中恢复的安全性战术。允许在完成软件开发的一个增量后,较轻松地对软件进行测试的可测试性战术。还有易用性战术,都是我们在设计师实践中学习到的经验。
在学习了设计师用于实现特定质量属性的战术集合后,可以明白的任何模式都会实现几个战术,这与不同的质量属性有关,但是该模式的任何实现都对战术做出了选择。