2、压测工具的使用
yum -y install httpd-tools
ab -V
2.1、检测接口最大qps
ab -n100【访问次数】 -c 10【并发数】http://【接口】
运行结果:Request per second:101.15[#/sec](mean) 表示结果的并发数qps为101
3、限流
3.1、nginx限流配置
①按连接数限速,即并发数(ngx_http_limit_conn_module)
②按请求速率限速,按照ip限制单位时间内的请求数(ngx_http_limit_req_module)
限流配置:
①//创建规则
limit_req_zone $binary_remote_addr zone = mylimit:10m rate=1r/s;
②limit_req zone=mylimit burst=1 nodelay;//应用规则
burst:应对突发情况,当ip访问超出以上情况,会把请求缓存起来
nodelay:burst设置的非常大
nginx限流配置应用:
#nginx限流配置,限制每秒只能访问1次
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
#nginx限流配置,对某个ip限制访问速度,跟前面的创建规则相对应。limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
localtion ~ \.php$ {
limit_req zone = mylimit burst=1 nodelay;
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
修改完配置后重启nginx:
Nginx状态管理:/etc/init.d/nginx {start|stop|reload|restart}
查询nginx状态:ps aux | grep nginx
接着用压测工具来检测nginx限流的效果,但检测之前需要清空nginx访问日志:tail -f /home/wwwlogs/nginx_error.log
ab -n1000 -c100 http://106.13.29.83/phpinfo.php 对当前域名以100并发循环访问1000次
3.2、限流算法与cdn原理
令牌桶算法:①令牌桶 ②匀速生产令牌
漏桶算法:①请求放入队列 ②漏桶匀速流出,桶满则溢出,返回503
计数器限流算法:单位时间计数器计数即可,一般在应用程序中写的比较多
3.3、cdn介绍
①cdn,内容分发网络
②缩短访问路径,减少源站压力,提高内容响应速度
③为源站提供安全保护 ,请求先到cdn服务器,没有在回源
秒杀系统使用场景
①商城活动抢购,优惠券,定时抢购 有效写100+ 并发抢1W+
②小米商城手机抢购 有效写1W+ 并发抢100W+
③12306的抢票 有效写1W+ 并发抢100W+
④天猫双十一凌晨促销秒杀 有效写10W+ 并发抢1000W+
秒杀系统-特点
①抢购人数多于库存,读写并发巨大
②库存少,有效写少
③写需强一致性,商品不能卖超
④读强一致性要求不高
秒杀系统-读非强一致性示例
四、秒杀服务核心实现
我们应该怎么去设计?
一、满足基本需求,做到单服务极致性能
比如:创建订单,查看订单都是订单流程。秒杀的核心是查库存,减库存,排队
二、请求链路流量优化,从客户端到服务端每层优化
客户端流量进来后的衰减
三、稳定性建设
基本需求
一,扣库存
二、查库存、排队进度
三、查订单详情、创建订单、支付订单
三、