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