概述
一个应用必须满足 功能性需求(它应该做什么,比如允许以各种方式存储,检索,搜索和处理数据) 和 非功能性需求(通用属性,例如安全性,可靠性,合规性,可扩展性,兼容性和可维护性)。
非功能型需求是区分一个程序员技术能力的关键要素,它主要包括可靠性(Reliability),可拓展性(Scalability),可维护性(Maintainability),下面我会深入探索这三个特性。
深入探索
1. 可靠性
意味着即使发生故障,系统也能正常工作。故障可能发生在硬件(通常是随机的和不相关的),软件(通常是系统性的Bug,很难处理),和人类(不可避免地时不时出错)。
2. 可拓展性
意味着即使在负载增加的情况下也有保持性能的策略。为了讨论可扩展性,我们首先需要定量描述负载和性能的方法。
例如:描述负载(某个接口 4.6k请求/秒),描述性能(响应时间p99或直方图)
3. 可维护性
许多不同的人(工程师、运维)在不同的生命周期,都能高效地在系统上工作(使系统保持现有行为,并适应新的应用场景),这就需要我们对系统的模块设计进行抽象,以适应后续需求的变化和系统的维护。