HA架构关于应对高并发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HA架构关于应对高并发相关的知识,希望对你有一定的参考价值。

前言:新项目上线,考验高并发,预选使用LR录制脚本跑脚本,考虑到搭建,使用简便的jmeter工具,       来跑500、1000、1500、2000的并发并打出报告,中间经历过tomcat与jmeter优化。

      高并发下考虑的层面  系统  +  nginx(理论3W左右)  +  tomcat--- 标签(tcp)

实际操作:


      1、

    技术分享


   方案:2000个线程,采取并大(可以选择单个线程间隔),错误日志实时打印

         当并发量达到1740时候,出现报错,报错日志在附件jmeter.txt.

              此时服务器,cpu占用量为2.5%  高于平时1.5%-2%

                     Memcache大概多消耗1.4G-2G之间。

                     Tcp连接数监控 150左右飙升至2400左右,无影响

              此时:服务器情况良 好


          另:tcp连接超过3000时候(昨天测试接口4700并发)。出现cpu报警,开始优化架构


开始排查:


发现报错,不是服务端报错,是不是jmeter工具内存飙高,发现自己pc内存吃紧,关闭其他程序,并且调整jmeter内存,再跑。


2017/04/25 13:59:59 INFO  - jmeter.threads.JMeterThread: Thread finished: 线程组 1-484 

2017/04/25 13:59:59 ERROR - jmeter.threads.JMeterThread: Test failed! java.lang.OutOfMemoryError: unable to create new native thread

at java.lang.Thread.start0(Native Method)

at java.lang.Thread.start(Unknown Source)

at sun.net.www.http.KeepAliveCache$1.run(Unknown Source)

at sun.net.www.http.KeepAliveCache$1.run(Unknown Source)




           技术分享



            调整之后再次跑并发测试,


     技术分享


      报错结果为后端服务端接收http请求后返回异常


   技术分享


           系统层面:


            tcp连接数超过5000,没问题


             技术分享


       连接中统计连接超时


         技术分享


        死套接字超过1000,第一次是2200左右,第二次是1200,说明死套接字回收正常,速度还是可         以的

    再看一下。我的系统曾经做过的调优


       技术分享


应用服务器优化:

          基本的+

【处理器子系统调优】:开启超线程,处理器,重要性不言而喻,cpu性能经常是瓶颈,Hyper-Threading(超线程功能,基于SMP 内核),

Hyper-Threading 在操作系统里将一颗处理器虚拟化为两颗使用,使得处理器,同一时刻,可以执行两个线程或进程

TIME_WAIT相关sysctl参数及超时时间

[[email protected] ~]# sysctl -a | grep tw

net.ipv4.tcp_max_tw_buckets  //处于TIME_WAIT状态的socket数目的最大值

net.ipv4.tcp_tw_recycle = 1 //打开TIME_WAIT快速回收机制

net.ipv4.tcp_tw_reuse //TIME_WAIT状态socket复用

Sysctl –w net.ipv4.tcp_tw_len = 2   设置TIME_WAIT在2秒后超时


      果断调整tomcat内存情况,(此时系统资源合理)


         技术分享


       还是后端压力过大,死套接字还是占据tcp资源,返回

        Server returned HTTP response code: 502 for URL:                http://app.yunce56.cn/v10/message/test/list

       

     来看一下大婶们关于这波测试给出的建议


       技术分享


假死有两种情况,1种是time_wait过多,一种是close_wait过多,前者自行优化,后者开发程序问题

我帮你百度了一下,得出一条结论:这个错误是由于服务器压力过大,不能及时处理client的请求导致服务器响应超时而抛出的错误


       技术分享


基本上可以得出结论:

      即使做过死套接字回收机制+tomcat优化,应用服务器也无法支持瞬间大并发3000,单台服务器理论65535.停留在涉及理论,(根据业务,有长连接或者是持续连接,做tcp连接回收机制,重点谨慎考虑)


之后采取措施:使用haproxy/lvs + nginx(s)+tomcat(s)。来因对并发,单台服务器并发3000即有3%左               右连接数无法得到后端及时响应。

返回测试结果。调整架构方案。


架构方案(方案 + 回退机制)


方案

技术分享


注重要的,关于80端口是谁提供的服务,根据架构决定,后来是haproxy+nginx


技术分享


服务器采购


技术分享

nginx书写


技术分享


haproxy书写


技术分享


上一篇文章书写,关于tomcat优化,借鉴之前的经验

http://chennailong.blog.51cto.com/10063928/1883671


方案提出,等待夜晚来临,运维,are you ready ? 2017年4月26日  22:00-凌晨

本文出自 “青春” 博客,请务必保留此出处http://chennailong.blog.51cto.com/10063928/1919737

以上是关于HA架构关于应对高并发的主要内容,如果未能解决你的问题,请参考以下文章

分布式架构进阶:如何应对高并发的用户请求

关于Java应对高并发的方案——vertx的使用!

如何应对高并发?

Java高并发的常见应对方案

高并发的常见应对方案

华为云擎天架构如何应对“高并发”?