天天看点

微服务:非功能质量需求的具体指标。

非功能质量需求的具体指标针对不同的系统主要分为4部分:应用服务器、数据库、缓存和消息队列,本文会总结并列出这4部分指标,以帮助读者在实际生产实践中做非功能质量需求的设计方案。

应用服务器

应用服务器是服务的入口,请求流量从这里进入系统,数据库、缓存和消息队列的访问量取决于应用服务器的访问量。对应用服务器的访问量进行评估至关重要,应用服务器主要关心每秒请求的峰值及对请求的响应时间等指标,通过这些指标可以评估我们需要的应用服务器资源的数量。

部署结构的相关指标如下表所示。

序号 部署结构
1 负载均衡策略
2 高可用策略
3 I/O模型(NIO/BIO)
4 线程池模型
5 线程池中的线程数量
6 是否多业务混合部署

容量和性能的相关指标如下表所示。

序号 容量和性能
1 每天的请求量
2 各接口的访问峰值
3 平均的请求响应时间
4 最大的请求响应时间
5 在线的用户量
6 请求的大小
7 网卡的I/O流量
8 磁盘的I/O负载
9 内存的使用情况
10 CPU的使用情况

其他相关指标如下表所示。

序号 其他指标
1 请求的内容是否包含大对象
2 GC收集器的选型和配置

数据库

根据应用层的访问量和访问峰值,计算出需要的数据库资源的吞吐量、每天的数据总量等,由此来评估所需数据库资源的数量和配置、部署结构等。

部署结构的相关指标如下表所示。

序号 部署结构
1 复制模型
2 失效转移策略
3 容灾策略
4 归档策略
5 读写分离策略
6 分库分表(分片)策略
7 静态数据和半静态数据是否使用缓存
8 有没有考虑穿透并压垮数据库的情况
9 缓存失效和缓存数据预热策略

容量和性能的相关指标如下表所示。

序号 容量和性能
1 当前的数据容量
2 每天的数据增量(预估容量)
3 每秒的读峰值
4 每秒的写峰值
5 每秒的事务量峰值

其他相关指标如下表所示。

序号 其他指标
1 查询是否走索引
2 有没有大数据量的查询和范围查询
3 有没有多表关联,关联是否用到索引
4 有没有使用悲锁,是否可以改造成乐观锁,是否可以利用数据库内置行级锁
5 事务和一致性级别
6 使用得JDBC数据源类型及连接数等配置
7 是否开启JDBC诊断日志
8 有没有存储过程
9 伸缩策略(分区表、自然时间分表、水平分库分表)
10 水平分库分表实现方法(客户端、代理、NoSQL)

缓存

根据应用层的访问量和访问峰值,通过评估热数据占比,计算缓存资源的大小并估算缓存资源的峰值,由此来计算所需缓存资源的数量、部署结构、高可用方案等。

部署结构的相关指标如下表所示。

序号 部署结构
1 复制模型
2 失效转移
3 持久策略
4 淘汰策略
5 线程模型
6 预热方法
7 哈希分片策略

容量和性能的相关指标如下表所示。

序号 容量与性能
1 缓存内容的大小
2 缓存内容的数量
3 缓存内容的过期时间
4 缓存的数据结构
5 每秒的读峰值
6 每秒的写峰值

其他相关指标如下表所示。

序号 其他指标
1 冷热数据比例
2 是否有可能发生缓存穿透
3 是否有大对象
4 是否使用缓存实现分布式锁
5 是否使用缓存支持的脚本(Lua)
6 是否避免了Race Condition
7 缓存分片方法(客户端、代理、集群)

消息队列

根据应用层的平均访问量和访问峰值,计算出需要消息队列传递的数据量,进而计算出所需的消息队列资源的数量、部署结构、高可用方案等。

部署结构的相关指标如下表所示。

序号 部署结构
1 复制模型
2 失效转移
3 持久策略

容量和性能的相关指标如下表所示。

序号 容量与性能
1 每天平均的数据增量
2 消息持久的过期时间
3 每秒的读峰值
4 每秒的写峰值
5 每条消息的大小
6 平均延迟
7 最大延迟

其他相关指标如下表所示。

序号 其他指标
1 消费者线程池模型
2 哈希分片策略
3 消息的可靠投递
4 消费者的处理流程和持久机制

继续阅读