两台机器实现QPS3000的服务优化
服务流程:
输入为一句话, 分词、匹配百科词条,读redis过滤、从redis读词条summary信息、返回
需求:
业务方的峰值QPS为3000
按照之前相关百科的一套逻辑: 单机tornado服务进程数4个
模拟10个并发,压测的QPS为332, 响应时间为30ms
$siege -c10 -r5000 -f urls.lst
Transactions: 10000 hits
Availability: 100.00 %
Elapsed time: 30.05 secs
Data transferred: 3.31 MB
Response time: 0.03 secs
Transaction rate: 332.78 trans/sec
Throughput: 0.11 MB/sec
Concurrency: 9.75
Successful transactions: 10000
Failed transactions: 0
Longest transaction: 0.65
Shortest transaction: 0.00
模拟20个并发
$siege -c20 -r5000 -f urls.lst
Transactions: 20000 hits
Availability: 100.00 %
Elapsed time: 58.39 secs
Data transferred: 6.72 MB
Response time: 0.06 secs
Transaction rate: 342.52 trans/sec
Throughput: 0.12 MB/sec
Concurrency: 19.77
Successful transactions: 20000
Failed transactions: 0
Longest transaction: 0.41
Shortest transaction: 0.00
压测的QPS跟刚才几乎差不多,但是响应时间已经上升到了60ms,可见,此时服务已经处理不过来了,大量的请求是处理等待状态的, 然而20个并发在业务方来说应该还算少的
优化策略:
第一步:
先增加服务进程数, 将单机的服务进程从4提高到10
压测:
$siege -c20 -r5000 -f urls.lst
QPS为700, 此时的response time是30ms
Transactions: 20000 hits
Availability: 100.00 %
Elapsed time: 28.26 secs
Data transferred: 6.72 MB
Response time: 0.03 secs
Transaction rate: 707.71 trans/sec
Throughput: 0.24 MB/sec
Concurrency: 19.47
Successful transactions: 20000
Failed transactions: 0
Longest transaction: 0.35
Shortest transaction: 0.00
第二步:
减少词表的数量
词表是百科所有词条的title和词条id的映射关系, 总量为2300w,因为这个需求只要求PV大于75000的才返回结果,所以词表也按照这个条件进行过滤, 过滤后,词表只剩下了13w
再次压测:
$siege -c20 -r5000 -f urls.lst
可以看到QPS提高到了1081, response time降低到了20ms
Transactions: 20000 hits
Availability: 100.00 %
Elapsed time: 18.50 secs
Data transferred: 5.84 MB
Response time: 0.02 secs
Transaction rate: 1081.08 trans/sec
Throughput: 0.32 MB/sec
Concurrency: 19.67
Successful transactions: 20000
Failed transactions: 0
Longest transaction: 0.09
Shortest transaction: 0.00
第三步:
对query做缓存
因为query都是短文本,根据业务方的反馈,会存在大量的重复的query, 所以对query做缓存肯定会起到效果
具体策略:
对query分词,分词后拼接,并计算md5值作为缓存的key, query对应的返回结果作为value缓存到redis中
因为有缓存,所以这个压测不太好测,而且我们暂时也没有线上真实的数据,所以这里无法给出压测的结果,但是效果应该会很好
目前可以大概预估下, 加了缓存后,单机的QPS应该能到1500, 那么部署两台机器就可以满足需求了
两台机器实现QPS3000的服务优化相关推荐
- 基于 keepalived 实现两台机器服务(主备)故障自动切换
前言 本文要说的是基于 keepalived 实现两台服务器之间的主备切换 .当一台机器的 Java 进程异常关闭,另一台机器能够自动监测到并启动本机的 Java 进程. keepalived 的工作 ...
- 关于SSH服务|两台机器之间建立免密通道
ssh:用在linux或者unix的远程控制服务协议 sshd占用22端口 在linux系统下面/etc/ssh文件中 sshd_config文件是服务器端的配置 ssh_config是客户端的配置 ...
- kaldi的egs/sitw实验调试过程(ssh.pl并行两台机器)
本实验在两台机器上运行.(172.16.46.105和172.16.46.108) 1. 按照kaldi官网的parallel部分的doc进行配置,需要将cmd.sh中的queue.pl改成ssh.p ...
- 打通两台机器的ssh功能
为什么80%的码农都做不了架构师?>>> 打通两台机器的ssh功能主要方便每次登录时候不用每次都需要输入密码,对于多台服务器这已经是必备了. 前提:机器需要安装ssh,详细安装 ...
- Muduo 网络编程示例之五: 测量两台机器的网络延迟
Muduo 网络编程示例之五: 测量两台机器的网络延迟 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice t.sina.com.cn/giantchen ...
- 测量两台机器的的网络延迟和时间差
一.roundtrip 用于测量两台机器之间的网络延迟,即"往返时间(round trip time,RTT)",其主要考察定长TCP消息的分包与TCP_NNODELY作用 代码: ...
- CentOS7:内网中两台机器不能连接的问题(Destination Host Unreachable),实际为AP隔离问题
1. 声明 当前内容主要为记录解决内网中两台机器不可访问的问题,最终发现是路由器问题设置了AP隔离导致的 2. 情况描述 主机1为WIndow10机器,主机2和主机3为Linux CentOS7的机器 ...
- 小白必看!您知道如何判断两台机器是否能正常通信吗?详解IP地址组成,网络地址和主机地址的区分!...
坚持原创输出,点击蓝字关注我吧 目录 一.ip协议的概念 1.ipv4地址 2.ipv6地址 二.ip地址的组成 1.ip地址的详细组成 2.网络号和主机号 3.子网掩码 三.总结 一.ip协议的概念 ...
- 华为云两台机器内网互联
文章目录 1. 前言 2. ping公网ip 3. 不同账号需要在同一大区 4. 创建虚拟私有云 5. 更换服务器所属的VPC网段 6. 创建对等连接 7. 填写对端项目ID和对端VPC ID 8. ...
最新文章
- CSAPP:第三章程序的机器级表示1
- 探索Apache Camel Core –文件组件
- react学习(46)----react渲染组件
- ppt演讲计时器_靠这招,我成了领导眼中的PPT演讲高手!
- 模型参考自适应控制器(MRAC)系列: 2.提升瞬态性能
- C# 使用HTMLhelp生成chm文件添加搜索并解决搜索找不到主题的问题
- 80端口为什么要备案_搞网站的你,不了解一下共享虚拟主机和备案问题
- MapReduce的核心资料索引
- python猴子分桃问题_阶乘
- 又一大动作,海致BDP似卷收购风波
- 微分方程3_求解偏微分方程
- ssh开启图形界面_【工具大道】ssh登录Linux服务器,并显示图形化界面
- SQLsever数据库期末复习笔记
- java socketacceptor_rsocket-java小试牛刀
- 生命不息折腾不止 ---- 开发编辑器第二话
- xp系统无法使用ip地址代理服务器,xp电脑ip地址无法更改
- 信息学奥赛一本通 1398:短信计费 | OpenJudge NOI 1.12 02:短信计费
- 情感故事(我替新郎入了洞房)
- 光脚丫思考Vue3与实战:第04章 模板语法 第01节 概述+插值
- C#JSON文件操作