欧博亚洲官方注册:关于一个简朴接口的并发测试与优化纪录

admin 3个月前 (07-01) 科技 31 0

目的

通过测试领会高并发的各处细节,寻找制约因素;为软硬架构设计提供优化参考。

前述

  • 优化前,该接口在测试环境的qps为140左右
  • 该接口的内部逻辑
    • 处置前1:最先计时
    • 处置前2:较验IP白名单
    • 处置:
      • 查询数据库并缓存
    • 处置后1:竣事设计,并提交日志(用于形成性能讲述)
      • 日志通过REST API,最终写入数据库
  • 该接口特征:
    • 内部处置简朴
    • 可优化点比较清楚

最先测试

  • 使用一个nio或aio的通道框架测试helloworld

    • 使用本机测试,qps约为:450万(我的电脑 macbook pro 4c 16g)
      • 若是server端的服务线程,加个System.out.println;qps估量要降一半(亲自跑过)
  • 使用solon.boot.jlhttp,测试helloworld(单机,单实例)

    • 使用本机测试,qps 约为:5万(我的电脑 macbook pro 4c 16g)
    • 使用域局网测试(192.168.8.118),qps给为:2万(2c 4g 虚拟机)
  • 测试getAppByID(服务端为单机单实例;测试端为另一台机,走的是内网)

    • 服务端测试机情形
      • 上面有8个java服务;docker服务(memcached,redis,mysql);
    • 初始测试
      • qps约为:140
    • 去掉三个触发器
      • -不用缓存,qps约为:600
      • +memcached,qps约为:1万(memcached 在本机,应该有优势;否则可能差些)
      • +二级缓存(一级为内陆缓存),qps约为:1.4万
      • 从DB角度思索,若是涉及写。。。qps只能靠DB的硬件提升了(量大时,还要靠分库分表)
    • 加上触发器 + 二级缓存
      • +记性能,qps约为:750
      • +记性能 +记日志,qps约为;240(异步http提交日志;可能存储在本机会有较大负影响;sev->http->db->磁盘
      • +记性能 +记日志 +白名单较验,qps约为:160
      • +白名单较验,qps约为:900

优化一

  • 将okhttp异步,改为线程池加同步(okhttp自带的异步,由于有融断机制性能差些)
    • +记性能 +记日志,qps约为;320(异步http提交日志;明显是异步了,为什么还这么低?由于照样有IO)
    • +记性能 +记日志 +白名单较验,qps约为:200

优化二

  • 为白名单增添10s内陆缓存
    • +白名单较验,qps约为:1.1万
    • +记性能 +记日志 +白名单较验,qps约为:320

优化三

  • 性能纪录,改为内陆网络 + 5秒距离提交
    • +记性能 +白名单较验,qps约为:6000(应该另有优化空间)
    • +记性能 +记日志 +白名单较验,qps约为:800
  • 日志级别动态可控,可在非需要时控制日志提交量
    • 日志约等于可没有...进而削减这部门的IO(对于营业系统,这个控制是异常之需要)

后续方案实验

  • 优化四:
    • 将日志纪录,调整为批量隔秒提交;进一步降低框架对应用的并发影响
  • 实验一:
    • 对比测试:日志管道模式提交,与署理抓取模式的差异

剖析总结

  • 削减IO次数(主要是网络写IO),可以大大提搞QPS。。。此为王道
  • 作甚IO?一次IO输出历程:
    • 应用空间 - > 内核空间 -> 装备寄存器
    • 削减次数或制止IO可大大提高并发(像System.out.print...就是,都市影响高并发)
  • IO的总量有限...
    • 我们经常会看到,cpu、内存很底,然则并发压不上去。。。就是大量的IO在排队
    • 或者程序在一段时间失去了响应,过段时间又好了。。。也是大量的IO在排队
    • 营业的程序,基本上是IO密集型的
    • 不管是多线程,照样异步。。。但IO总量有限
      • 之前一直以为,异步写日志对并发没什么影响;对单次请求性能无影响,但会占用IO资源

附:

  • 工具安装
# centos 版
yum install -y https://github.com/scutse/wrk-rpm/releases/download/4.1.0/wrk-4.1.0-1.el7.centos.x86_64.rpm

# mac 版
brew install wrk
  • 测试代码
wrk -t10 -c200 -d10s --latency "http://10.0.0.79:1013/getAppByID?appID=10970"
  • 部门资料参考
    • https://www.cnblogs.com/lilinwei340/p/9697287.html
    • https://www.jianshu.com/p/ac185e01cc30
,

Allbet开户

欢迎进入Allbet开户(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

皇冠体育声明:该文看法仅代表作者自己,与本平台无关。转载请注明:欧博亚洲官方注册:关于一个简朴接口的并发测试与优化纪录

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:675
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1245
  • 评论总数:251
  • 浏览总数:6693