知识卡片

腐蚀预防的联动架构与自适应策略

普通读书笔记卡

内容

相比只能”降低发生率”的腐蚀最小化方法,腐蚀预防方法的目标是从机制上杜绝和根除腐蚀,包含两个策略。联动架构策略试图在架构和实现之间建立持续的双向关联,让架构和实现可以独立演变、同时又必须遵守预先定义的一致性规则——一旦实现出现与架构相背离的部分,就会被这套关联机制直接剔除,从源头上让”腐蚀”这件事无法发生(而不是发生后再检测)。ArchJava就是这一思路的典型实现:把架构和实现统一描述为同一个实体,让规约和代码天然绑定在一起;后续Parsa等人受此启发开发了支持分布式架构的ArchC#。但书中指出,由于实施代价太大,联动架构在工业界还未得到广泛应用——这揭示了一个”理论上最彻底、实践上最难落地”的典型矛盾:把架构和代码强制绑定,虽然能从根本上防止两者背离,但这要求整个系统的实现都必须依赖专门的架构感知语言,迁移和采纳的成本极高。自适应策略针对的病因是:架构腐蚀大多源于定期维护人员没有严格遵守架构指南——解法是让系统自己长出一个闭合反馈回路:用传感器(探针)检测系统环境变化或内部状态,用比较器(计量表)评估传感器输出与预定义策略之间的差异,一旦发现偏离就自动纠正。Garlan等人提出的”彩虹”(Rainbow)自适应框架是代表性工作:它监控系统执行过程,一旦系统违反预定架构设计就自动修复——探测器返回的数据被转换成与模型相关的信息,进一步引导修复引擎采取正确的纠正方法。此外还有针对分布式组件系统、能在架构违反特性时自动增删组件的自适应架构,以及基于自主系统描述语言(ASSL)的运行时自适应架构等扩展工作。书中同样指出自适应技术的局限:它能非常有效地控制某些类型系统的腐蚀,且能自动化定期更新,但如果系统中大部分变化仍需人工干预,自适应带来的好处就会大打折扣;更根本的问题是自适应的有效性高度依赖设计师能否预见潜在的变化,而在复杂性极高的软件系统中这本身就非常困难——因此除了无人空间探测器这类极少数高度专业化的应用场景,自适应技术并没有在实际系统中被广泛采用。

参考来源

- 位置:《软件架构理论与实践》第17章《软件架构的腐蚀和对策》"17.3.2 腐蚀预防方法"节(源文件:_epub-src/OEBPS/text00139.html) - 结论依据:原文说明"联动架构试图建立架构及其实现的连续关联……与架构背离的实现将会被剔除,也就达到了预防架构腐蚀的目的……因为实施的代价太大,联动架构在工业界还未得到广泛的应用",并说明自适应策略"自适应的有效性在很大程度上取决于设计师能否预见潜在的变化,而这在复杂性极高的软件系统中是非常困难的。因此,除了极少数的高度专业化应用……自适应技术并没有被广泛地采用在实际系统中",直接支撑本卡片结论。 - 原始内容:Garlan等人提出了一种名为"彩虹"(rainbow)的自适应框架,它负责监控软件系统的执行过程,并在系统违反了预定的架构设计时自动修复。探测器返回的检测数据被转换为与模型相关的信息,进一步用来引导修复引擎,使其采取正确的纠正方法来处理当前系统。