知识卡片
外部质量指标:性能与可用性
内容
外部质量指基于架构开发出的系统在运维过程中体现出来的质量属性。性能指系统的响应能力——对某个事件需要多长时间才能响应,或单位时间内能处理多少事件;架构层面可以通过观察服务请求的到达/分发速率、处理时间、队列大小、延迟长短来了解和建模系统性能,还可以根据预计工作负载构建随机队列来模拟性能。性能主要面对四类问题:响应时间增加/吞吐量降低/服务器过载——对策是让跨进程或跨层交互使用粗粒度接口、最小化调用次数,或改用异步交互;内存消耗增加导致缓存未命中变多——对策是设计有效合理的缓存机制;数据库处理压力增加导致吞吐量降低——对策是选择有效的事务处理/锁/线程/队列方法,避免只取一小部分数据却拉取全部数据;网络带宽消耗增加导致响应延迟——对策是设计高性能的跨层交互机制、减少跨边界转换、批量化处理以减少网络调用次数。书中特别指出:性能曾长期是驱动架构设计的最重要力量、常以牺牲其他质量属性为代价,但随着硬件性价比骤降、软件开发成本提高,其他质量属性的地位已逐渐能与性能分庭抗礼——这是[[质量属性之间此消彼长的关系]]所揭示的取舍格局,会随硬件和开发成本的时代背景发生系统性偏移。可用性指系统正常运行的时间比例,用两次故障之间的时间长度、或系统崩溃后恢复正常运行的速度来衡量,通常受系统错误、基础设施问题、恶意攻击、系统负载等因素影响。可用性主要面对的问题及对策包括:物理层故障导致整体失败——用失效备援、网络负载均衡、RAID冗余磁盘阵列应对;大规模负载无法及时处理——需要合理的限流和拒绝策略;资源使用不当(过早获取、长期占用)会造成资源匮乏、降低并发处理能力;应用程序错误导致系统级失败——需要设计合理的异常处理机制降低恢复难度;频繁升级(安全补丁等)会降低可用性——需要更好的运行时升级策略;网络故障导致应用不可用——需要设计客户端具备偶尔连接的能力;此外还要考虑信任边界、子系统访问控制和防火墙、外延数据有效性以提升系统弹性。