线上网站遭受攻击首页被强刷,导致服务器node和java性能过载影响用户正常页面访问。
|
与node和javajs高性能不符
|
怎么性能会优于node和javajs?
|
分别用以下方式模拟一个线上获取用户信息的接口:
- node和java调用java接口来获取数据
备注:由于不太清楚后端业务数据取值逻辑,尽可能还原response data会存在一定的数据包偏差。
分组测试&结论
再次備注:通过node和java访问java接口(要模拟线上环境,会因为node和java的瓶颈造成java负载过低)
直接访问java接口硬碰硬
- node和java的强项处理非阻塞异步IO,但由于是單进程虽然请求数量增加↑,实际到达java应用的请求被限制在一个峰值max解释了图1红柱:当cpu1核时,并发数增多耗时不变
- 知道了node和java cpu瓶颈的原因,通过pm2增加核数让java得到更多的资源去处理。图1深蓝浅蓝:cpu核数增加耗时缩短
- 当cpu升值8核(测试环境满核),node和java基本不会hold住任何请求(top小于50%)直接丢到java端,到达java请求数倍增但由于java语言特点(同步阻塞式)、外界因素(测试环境复杂),相反时间没有得到下降而是有仩升趋势图1橘色:有上升趋势
- 依托于多核的性能,node和java充分利用硬件资源核数增加↑,执行能力正比例上升↑图2:耗时随cpu核数增加,洏倍减
-
结合图1图2:打开cpu限制后,不难发现node和java性能迅速上升符合外界宣传,(注:使用了Promise.all更加快了异步处理速度)
-
图3:node和java性能好于java但並发2k时,两者还是不分上下还是要分不同场景对2者有个组合使用(注:因为数据库等原因,java在处理业务时会大批出现jdbc等问题)
- 使用pm2修妀node和java运行环境,增加node和java端处理量解决node和java瓶颈
- 重新设计架构方式,在未来有条件时能做到node和java横向水平扩展,避免单台机器cpu瓶颈能处理高峰压力&恶意攻击
- 线下进一步了解node和java性能问题
运行脚本:ab + 请求数量 + 并发数量 + 测试地址
ab工具使用到的一些问题
sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中它包含一些TCP/ip堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能
ulimit用来限制系统用户对shell资源的访问