为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。
1、QPS保障目标
一开始就要明确定义QPS保障目标,以此来推算所需的服务、存储资源。可根据历史同期QPS,或者平时峰值的2到3倍估算。
压测目标示例:
- qps达到多少时,服务的负载正常,如平均响应时间、95分位响应时间、cpu使用率、内存使用率、消费延迟低于多少
- 不要让任何一个环节成为瓶颈,需考虑服务实例、数据库、Redis、ES、Hbase等资源
2、服务注意点
2.1、服务qps上限
服务qps上限 = 工作线程数 * 1/平均单次请求处理耗时
主要关注以下几点:
(1)工作线程数,对qps起到了直接影响。
dubbo工作线程数配置举例:
<dubbo:protocol name="dubbo" threadpool="fixed" threads="1000" />
(2)cpu使用率:跟服务是I/O密集型,还是计算密集型有关。
- I/O密集型:调用多个下游服务,本身逻辑较简单,cpu使用率不会很高,因此服务实例的个数不用很多
- 计算密集型:本身逻辑很复杂