知识卡片
质量属性之间此消彼长的关系
内容
质量属性从来不能以孤立方式实现——任何一个质量属性的达成,都会对其他质量属性带来积极或消极的影响,这是架构设计中最容易被忽视、却最本质的一条约束。安全性和容错性彼此制约:最安全的系统一般有安全内核、失败点最少;容错性最好的系统反而失败点最多,因为要配置冗余处理器或进程来保证单点失败不拖垮整个系统——”减少失败点”和”用冗余吸收失败”是两种方向相反的策略,同时追求两者本身就存在张力。几乎每个质量属性都对性能有消极影响,以可移植性为例:保证系统可移植的主要手段是降低系统内部的相互依赖性,而任何降低相互依赖性的手段(如给进程或过程的边界加限制)都会加大系统执行的开销,直接拖累性能——这条链路揭示了一个更普遍的规律:几乎所有为了”隔离变化”“降低耦合”而引入的抽象层,都要以牺牲一部分运行时效率为代价换取。理解这种质量属性之间的正负关系矩阵,价值在于让架构设计从”我要把所有质量属性都做到最好”这种不现实的期望,转向”哪些质量属性对这个系统最重要,我愿意用哪些属性的下降去换取它们”这种更贴近工程现实的权衡决策——这也是[[ATAM架构评估法的敏感点与权衡点]]之所以要专门识别”权衡点”的根本原因:权衡点存在的前提,正是质量属性之间这种此消彼长、无法同时最优的内在结构。
参考来源
- 位置:《软件架构理论与实践》第11章《软件架构质量》"11.2 软件架构与质量属性"节(源文件:_epub-src/OEBPS/text00088.html)
- 结论依据:原文说明"任何一个质量属性的实现都会对其他质量属性的实现带来积极或者消极的影响。例如,安全性和容错性是相互影响的……几乎每个质量属性都对系统的性能具有消极的影响。以可移植性为例,保证软件系统具有良好的可移植性的主要手段就是降低系统的相互依赖性,任何降低相互依赖性的手段都会加大系统执行的开销",直接支撑本卡片结论。
- 原始内容:最安全的系统一般都有安全的内核,其失败点最少;容错性最好的系统则失败点最多,通常在这样的系统中要配置冗余的处理器或进程,从而保证一个处理器或进程的失败不会导致整个系统的崩溃。