第一章
1.1演进式架构
对于软件架构师来说,架构水平体现了他们在权衡业务需求和其他重要因素后找到最佳方案的能力。
近年来,软件开发核心工程实践的持续发展给我们提供了条件,使我们得以重新思考架构随时间的推移要如何变
化,以及当这样的演进发生时,如何保护重要的架构。
特征。
有一种不幸的退化叫作架构比特衰减,它在很多组织中均有发生。架构师选择特定的架构模式来满足业务需求及让系统具备某些能力,但这些特征常常意外地随着时间推移而退化。
演进能力是一种元特征和保护其他所有架构特征的架构封装器。
演进式架构支持跨多个维度的引导性增量变更。
1.2 增量变更
增量变更描述了软件架构的两个方面:如何增量地构建软件和如何部署软件。
允许旧的和新的并存,并通过监测是否迁移完成,迁移完成垃圾回收。
1.3引导式变更
适应度函数:该函数是一种目标函数,用于计算潜在的解决方案与既定目标的差距。在演化计算中,适应度函数决定一个算法是否在持续提升。换句话说,随着每个算法变体的产生,基于设计者对算法“适应度”的定义,适应
度函数决定每个变体的“适应程度”。
当架构师确定了需要保护的架构特征时,他们会定义一个或多个适应度函数来提供保护。
适应度函数驱动架构设计决策,并引导架构变更适应业务和技术环境的变化。
1.4多个架构维度
每个项目都有许多维度,架构师在考虑架构演进时必须要想到。下面是一些影响现代软件架构演进能力的常见维度。
技术
架构中的实现部分:框架、依赖的库和实现语言。
数据
数据库模式、表格布局、优化计划等。通常由数据库管理员(DBA)处理这类架构。
安全
定义安全策略、指导方针和指定工具来帮助发现缺陷。
运维与系统
关注架构如何映射到现有的物理或虚拟的技术设施中,包括服务器、机器集群、交换机、云等。
1.5 康威定律
社会结构,特别是人与人之间的沟通途径,将不可避免地影响最终的产品设计。
康威特别提醒软件架构师,不要只关注软件架构和设计,还应关注团队之间委派、分配和协调工作的方式。
在很多组织中,团队是根据职能来划分的。示例如下。
前端开发团队
负责用户界面(UI)技术(如 HTML、移动端和桌面端)。
后端开发团队
专门构建后端服务(有时还包括 API 层)。
数据库开发团队
专门构建存储和逻辑服务。
分团队来进行开发,问题在于团队之间的沟通会加剧成本,逆康威定律则是每个团队抽调出人员组成一套完成的团队来进行开发。
1.6小结
演进式架构主要由三方面构成:增量变化、适应度函数和适当的耦合。