Skip to content

Non Function

Calvin Xiao edited this page Dec 25, 2015 · 9 revisions

(草稿版,请勿转载)

非功能需求Check List

0.名词解释

  • 服务组件: 子系统内的服务节点
  • 定时任务组件:子系统内的定时任务节点
  • 三方组件: 子系统内的其他节点,包括数据库,缓存,Zookeeper,消息系统等
  • 依赖服务: 子系统外的被依赖服务

1. 性能与可伸缩性

1.1 流量模型 (Traffic Model)

日常不同时段的流量模型 / 大促时的流量模型

针对主要API的QPS,响应时间,并发连接数

从API的流量模型,以及缓存命中率等估算,推算数据库/缓存/消息系统的流量模型(读/写QPS分开估算)

1.2 单机性能

吞吐量(QPS,或其他的度量单位如每天2TB日志)

响应时间(包括不同吞吐量下的平均响应时间,99%,99.9%等分位数响应时间)

并发连接数

1.3 可伸缩性

服务组件是否全部支持水平扩展(考虑服务如何进行负载均衡/服务注册与发现,是否sharing nothing/stateless架构)

三方组件是否全部支持水平扩展(考虑分区策略,对读/写请求的伸缩性要分开评估)

如何进行扩容,是否需要停止服务(静态配置还是动态注册发现,存储层要考虑如何进行重新分区,数据迁移,缓存失效等)

是否支持节点收缩(scale-in)

1.4 目前系统容量

当前硬件配置下的系统总容量

QPS,响应延时,并发数

数据容量,数据保存的时长等

1.5 资源利用率

目前系统总容量与大促峰值流量对比的资源利用率

资源占用估算,指按照流量模型估算的各组件的资源占用情况 (包括CPU,内存,磁盘,IO,网络带宽等)

资源占用估算与各组件实际部署的硬件资源对比的资源利用率

资源占用估算与各组件所提供的性能数据对比的资源性价比

2. 高可用性

2.1 目前系统可用性指标

年度/季度/月度的可用性(999.9%, 99.99%, 99.999%)

平均故障间隔时间(MTBF),平均故障修复时间(MTTR)

2.2 单点故障节点(SPoF)

系统是否存在单点故障节点,是否都是主备或集群节点(热备,冷备,主动-主动,主动-被动等形式)

2.3 故障转移(FailOver)

故障包含组件自身故障,操作系统或服务器crash,网络故障(网络抖动,网络中断,脑裂,防火墙配置异常)以及依赖服务故障(崩溃,慢响应)

服务组件,三方组件发生故障时,如何进行故障发现和转移(如前端LB如何发现故障并进行转移,Master节点重新选举,数据重新分区,冗余节点启动等),人工还是自动化,所需的时长

如何隔离依赖服务的故障,防止雪崩效应(如超时控制,熔断,心跳等)

故障发生时的影响,用户无感知(重试),还是有短暂时间内的请求会失败

2.4 故障恢复(FailBack)

各组件与依赖服务恢复后,如何重新加入集群提供服务(系统如何将流量重新切换到恢复的节点上,是否需要进行数据的重新同步,是否需要考虑会话)

2.5 降级运行

服务能否隔离屏蔽部分非重要功能降级运行

服务能否隔离有问题的数据分区,其他数据分区继续运行

服务能否使用备用数据源继续运行,如使用Memcached、JVM内存、文件中的缓存等

2.6 容错性

对异常请求的处理(比如参数值超出边界阀值,超大请求/结果集)

2.7 数据可靠性及事务支持

数据/日志有没有冗余备,故障发生时会不会丢失,如果会丢失,会丢失多少数据(数据如何进行实时复制,归档备份的频率)

如何实现故障转移/恢复时保持数据一致性

数据恢复所需的时间

事务支持:

  • 是否支持回滚或补偿操作
  • 是否支失败自动重试(重试的策略),或日志记录后人工重试

2.8 突发峰值流量应对

对正常突发峰值的应对(比如限流,异步队列或关闭部分非主要功能)

对DDoS攻击的过滤

2.9 异地容灾

跨站点数据复制(备份的方式,频率等)

跨站点流量切换(切换的方式,需要的时间,影响,比如用户的会话数据会否丢失等)

3. 可监控性

应用traffic数据的监控 (QPS, 延时,错误率)

应用状态的监控(JVM数据,应用内部的指标如线程池/连接池情况,异步队列长度,其他的metrics如重试次数,超时次数等)

组件有否提供健康度检查接口

能否根据以上监控数据,进行自动告警

用于诊断问题的日志及其他信息是否足够

4. 安全性

API调用的认证,授权,签名,传输加密

管理界面的认证,授权,审计,传输加密

数据保密性

敏感信息过滤

5. 运维

5.1 升级

服务启动、关闭的时长

升级、回滚的时长

能否零停机时间升级(比如滚动升级),如果不能,停机升级窗口是多长

5.2 配置

比如更新配置是否需要重新启动系统

5.3 自动化

有否提供API,运维可通过自动化脚本而不是界面I进行管理

有否需要手工定期执行的任务

6. 可扩展性

API的向后兼容性,API是否带有版本标示,能否多版本并存

服务扩展功能是否需要必须修改的客户端节点

数据结构扩展是否方便

能否通过插件,SPI进行扩展

系统间的耦合度也对可扩展性影响很大,是否存在不通过服务API,直接访问其他系统的内部数据,有否通过消息系统对服务进行解耦

7. 互操作性

跨平台的访问支持 (Linux,Windows等)

跨语言的访问支持 (Java, Php, Python, Node.js等)

Clone this wiki locally