第一节:基本概念、业务分析、单体架构的搭建
一. 基本概念
1.QPS(Queries Per Second)
A. 指每秒查询率,是一台服务器每秒能够响应的查询次数(数据库中的每秒执行查询sql的次数)。
B. 是数据库中的概念,每秒执行条数(查询),被引申到压测中来了,但是不包括插入、更新、删除操作,所以不建议用qps来描述系统整体的性能。
2.TPS(Transactions Per Second)
A. 指每秒事务数,具体事务的定义,都是人为的,可以一个接口、多个接口、一个业务流程等等。一个事务是指事务内第一个请求发送到接收到最后一个请求的响应的过程,以此来计算使用的时间和完成的事务个数。
B. 以单接口定义为事务为例,每个事务包括了如下3个过程: 如果每秒能够完成N次这三个过程,tps就是N.
a.向服务器发请求
b.服务器自己的内部处理(包含应用服务器、数据库服务器等)
c.服务器返回结果给客户端
C. 如果多个接口定义为一个事务,那么,会重复执行abc,完成一次这几个请求,算做一个tps.
3.QPS和TPS对别
A. 如果一个接口是单场景的查询接口,且接口内部不再请求其它接口,此时QPS=TPS.
B. 如果一个接口内部请求了n个其它单一的查询接口,此时QPS=n * TPS.
C. 如果没有特别定义事务,会把1个http请求作为1个事务,即1个TPS可能包括多个QPS.
PS. Jmeter中的Throughput,即吞吐量,也就是TPS, 这里TPS = 样本总数/运行时间。
4. 响应时间(RT)
执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。响应时间RT(Response-Time),是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。
5. 并发数
并发数是指系统同时能处理的请求数量(即1个时间段内系统能处理的请求总数),这个也是反应了系统的负载能力。
6. 吞吐量
A.含义:吞吐量是指系统在单位时间内能处理请求的数量,TPS、QPS都是吞吐量的常用量化指标.
B.一个系统的吞吐量(承压能力)与request(请求)对cpu的消耗,外部接口,IO等等紧密关联。单个request 对cpu消耗越高,外部系统接口,IO影响速度越慢,系统吞吐能力越低,反之越高。
7. 扩展
TPS=并发数/平均响应时间
二. 业务分析
1.背景说明
某商城在双十一的0点对部分商品进行秒杀促销活动,秒杀持续一个小时,如果提前卖完则秒杀结束,1小时后商品恢复原价, 预估峰值为2000并发。
2.具备的资源
A. 最多两台服务器(2核8G 5M带宽),可以Win系统 或 Centos系统
B. 数据库可以用 SQLServer 或 MySQL
C. 技术人员和运维人员各1名
3. 需达到目标
A. 1s能处理1000个并发
B. 秒杀期间服务不能宕机
C. 用户体验要友好,不能出现页面长时间卡顿假死现象(自身的设备或者网络条件差除外)
4.可能遇到的问题
(1).正常抢单的人数超过预期值2000
(2).出现了黄牛屯单现象
(3).用户的网络存在延迟或者下单设备卡顿
(4).不法分子大量恶意请求
(5).商品受欢迎程度不同,比如抢A的非常多,抢B的相对少一些
(6).服务宕机
三. 单体架构搭建
1.技术选型
A. 数据库:SQLServer 2014
B. 缓存:Redis缓存 + (服务端缓存)
C. 消息队列: RabbitMQ
D. 负载均衡:Nginx
E. 服务器:WinServer 2016
F. 阿里云CDN
G. 基础框架:Asp.Net Core + EFCore + xxxx
2.DB设计
详见《数据库设计说明书》,主要包括用户表、商品表、订单表、支付记录表、秒杀商品表、秒杀时间模型表.
3.架构图
后续和最终微服务架构图一块补充
4.空接口测试
前提:将IIS的队列长度改为足够大,比如改为:65535,其它配置不做调整。
测试:分析结果90%的百分位,统计2s下能处理并发请求数,要求异常率为0.
测试结果:多次取平均值,2s内能处理的并发请求数约为2400,如下图:
6.数据准备
A.用户表:id=100001
B.商品表:id=200001
C.秒杀商品表:id=300001、articleId=200001、articleStockNum=10000、limitNum=10(随时改)
注:接下来的6节主要演示演变过程,单纯从技术上实现,不考虑太多规范问题。
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。