非功能质量需求

服务调用幂等性实现
https://www.jianshu.com/p/51d6379d33b2

本文以下内容摘抄自《分布式服务架构》第三章

架构设计

1、架构设计分为需求分析和整理,概要设计和详细设计等三个阶段

1、需求分析和整理阶段:梳理所有用例和场景,并抽象出系统面向的用户和角色,梳理对于每个用户和角色应该提供的功能需求,非功能质量需求和限制。其中非功能质量需求包括:高可用性、高性能、可伸缩、可扩展、安全性、稳定性、健壮性、可测试性等,然后对功能性需求和非功能性质量需求进行整理,识别核心需求和特色需求,最后以核心需求和特色需求为根本来展开架构设计。

2、概要设计阶段:根据需求分析和整理阶段产出的核心需求和特色需求,对整个系统进行模块划分,并定义良好的模块之前的关系和交互。

3、详细设计阶段:通常会使用多视图的方法来描述系统的架构,多视图包括:数据视图、逻辑视图、开发视图、进程视图、物理视图、性能视图、安全视图等。

互联网架构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM)

ATAM是一个能够在项目开始实施之前评估架构是否能够满足这些非功能质量的方法论。这个方法论通过在架构设计的不同阶段提出不同的问题,来帮助架构设计人员发现架构设计上的问题,并在实践中总结出设计的模式,进而可以将这些模式应用到将来更多项目中。

核心非功能质量指标 描述
高性能 运行效率高、性价比高
可用性 持续可用行、缩短宕机时间、出错恢复、可靠性
可伸缩性 垂直伸缩、水平伸缩
可扩展性 可插拔、组建重用
安全性 数据安全、加密、熔断、防攻击

对于一个线上服务:
高性能:指单节点服务的吞吐量和响应时间;
可用性:以全年时间减去宕机时间,并用得到的差值初一全年时间计算得出,通常是表明服务质量最核心的指标;
可伸缩性:指横向扩展的能力,也就是随着节点的增加,服务能力能够随着节点增加而线性增加,如果不能,则也可以使用百分比开衡量;
可扩展性:指架构上的灵活性及插拔性,将来可以不断的在系统上叠加新业务和新功能。
安全性:系统的安全保护措施,要防止攻击和数据泄漏。

其他非功能质量指标 描述
可监控性 快速发现、定位解决
可测试性 可灰度、可预览、可mock、可拆解
鲁棒性 容错性、可恢复性
可维护性 易于维护、监控、运营和扩展
可重用性 可移植性、解耦
易用性 可操作性

可监控性:一个线上服务如果没有监控系统,那么系统的可用性就没法保障,监控系统可以帮助开发人员和应急人员快速发现问题;
可测试性:指我们开发的服务一定要在不同的阶段有相应的方法和途径来测试,包括QA测试、准生产测试和生产测试等;对不具备测试条件的系统使用Mock等方式来解决;
鲁棒性:表明系统的容错性、健壮性和可恢复性;
可维护性:指系统要易于监控、运营和扩展;
可重用性:指系统具有模块化、可移植、可通过迭代增加新功能的特性;
易操作性:指系统对用户友好,方便系统的各类用户使用

非功能质量需求的具体指标针对不同系统主要分为4部分:应用服务器、数据库、缓存和消息队列。

1、应用服务器:

访问量至关重要,主要关心每秒请求的峰值以及对请求的响应时间等指标,通过这些指标可评估我们需要的应用服务器资源的数量。

序号 部署结构相关指标
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收集器的选型和配置

2、数据库:

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

序号 部署结构相关指标
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 水平分库分表实现方法(客户端、代理、NoSQL)

3、缓存

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

序号 部署结构相关指标
1 复制模型
2 失效转移
3 持久策略
4 淘汰策略
5 线程模型
6 预热方法
7 哈希分片策略
序号 容量和性能指标
1 缓存内容的大小
2 缓存内容的数量
3 缓存内容的过期时间
4 缓存的数据结构
5 每秒的读峰值
6 每秒的写峰值
序号 其他指标
1 冷热数据比例
2 是否有可能发生缓存穿透
3 是否有大对象
4 是否使用缓存实现分布式锁
5 是否使用缓存支持的脚本(Lua)
6 是否避免了Race Condition
7 缓存分片方法(客户端、代理、集群)

4、消息队列

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

序号 部署结构相关指标
1 复制模型
2 失效转移
3 持久策略
序号 容量和性能指标
1 每天平均的数据增量
2 消息持久的过期时间
3 每秒的读峰值
4 每秒的写峰值
5 每条消息的大小
6 平均延迟
7 最大延迟
序号 其他指标
1 消费者线程池模型
2 哈希分片策略
3 消息的可靠投递
4 消费者的处理流程和持久机制

你可能感兴趣的:(架构知识)