服务流程:

输入为一句话, 分词、匹配百科词条,读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的服务优化相关推荐

  1. 基于 keepalived 实现两台机器服务(主备)故障自动切换

    前言 本文要说的是基于 keepalived 实现两台服务器之间的主备切换 .当一台机器的 Java 进程异常关闭,另一台机器能够自动监测到并启动本机的 Java 进程. keepalived 的工作 ...

  2. 关于SSH服务|两台机器之间建立免密通道

    ssh:用在linux或者unix的远程控制服务协议 sshd占用22端口 在linux系统下面/etc/ssh文件中 sshd_config文件是服务器端的配置 ssh_config是客户端的配置 ...

  3. kaldi的egs/sitw实验调试过程(ssh.pl并行两台机器)

    本实验在两台机器上运行.(172.16.46.105和172.16.46.108) 1. 按照kaldi官网的parallel部分的doc进行配置,需要将cmd.sh中的queue.pl改成ssh.p ...

  4. 打通两台机器的ssh功能

    为什么80%的码农都做不了架构师?>>>    打通两台机器的ssh功能主要方便每次登录时候不用每次都需要输入密码,对于多台服务器这已经是必备了. 前提:机器需要安装ssh,详细安装 ...

  5. Muduo 网络编程示例之五: 测量两台机器的网络延迟

    Muduo 网络编程示例之五: 测量两台机器的网络延迟 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice  t.sina.com.cn/giantchen ...

  6. 测量两台机器的的网络延迟和时间差

    一.roundtrip 用于测量两台机器之间的网络延迟,即"往返时间(round trip time,RTT)",其主要考察定长TCP消息的分包与TCP_NNODELY作用 代码: ...

  7. CentOS7:内网中两台机器不能连接的问题(Destination Host Unreachable),实际为AP隔离问题

    1. 声明 当前内容主要为记录解决内网中两台机器不可访问的问题,最终发现是路由器问题设置了AP隔离导致的 2. 情况描述 主机1为WIndow10机器,主机2和主机3为Linux CentOS7的机器 ...

  8. 小白必看!您知道如何判断两台机器是否能正常通信吗?详解IP地址组成,网络地址和主机地址的区分!...

    坚持原创输出,点击蓝字关注我吧 目录 一.ip协议的概念 1.ipv4地址 2.ipv6地址 二.ip地址的组成 1.ip地址的详细组成 2.网络号和主机号 3.子网掩码 三.总结 一.ip协议的概念 ...

  9. 华为云两台机器内网互联

    文章目录 1. 前言 2. ping公网ip 3. 不同账号需要在同一大区 4. 创建虚拟私有云 5. 更换服务器所属的VPC网段 6. 创建对等连接 7. 填写对端项目ID和对端VPC ID 8. ...

最新文章

  1. CSAPP:第三章程序的机器级表示1
  2. 探索Apache Camel Core –文件组件
  3. react学习(46)----react渲染组件
  4. ppt演讲计时器_靠这招,我成了领导眼中的PPT演讲高手!
  5. 模型参考自适应控制器(MRAC)系列: 2.提升瞬态性能
  6. C# 使用HTMLhelp生成chm文件添加搜索并解决搜索找不到主题的问题
  7. 80端口为什么要备案_搞网站的你,不了解一下共享虚拟主机和备案问题
  8. MapReduce的核心资料索引
  9. python猴子分桃问题_阶乘
  10. 又一大动作,海致BDP似卷收购风波
  11. 微分方程3_求解偏微分方程
  12. ssh开启图形界面_【工具大道】ssh登录Linux服务器,并显示图形化界面
  13. SQLsever数据库期末复习笔记
  14. java socketacceptor_rsocket-java小试牛刀
  15. 生命不息折腾不止 ---- 开发编辑器第二话
  16. xp系统无法使用ip地址代理服务器,xp电脑ip地址无法更改
  17. 信息学奥赛一本通 1398:短信计费 | OpenJudge NOI 1.12 02:短信计费
  18. 情感故事(我替新郎入了洞房)
  19. 光脚丫思考Vue3与实战:第04章 模板语法 第01节 概述+插值
  20. C#JSON文件操作

热门文章

  1. 理解点击屏幕的事件响应---对UIView的hitTest: withEvent: 方法的理解
  2. linux 软件安装方式
  3. 数据结构之算法初涉(2)
  4. ubuntu 15.10 安装jdk
  5. javashop配置微信支付
  6. pytest测试框架(三)---使用allure描述测试用例
  7. 08-02 性能测试--负载模型与压力来源
  8. php gzip 关闭,php能否在当前脚本页关闭nginx的gzip输出
  9. 零基础学python看什么书好?
  10. 在web开发中,为什么前端比后端更得到转行程序员的青睐?必看