Nginx和Tomcat配合实现Java Web服务热部署( 三 )

虽然服务器配置的worker_processes auto,实际上开了40个进程,但仍然达不到直接访问JAVA服务的吞吐量 。

  1. 通过Nginx压测期间发布新版本
$ wrk -c 20 -d 60 -t 4 http://10.75.1.42:28010/web/helloRunning 1m test @ http://10.75.1.42:28010/web/hello4 threads and 20 connectionsThread StatsAvgStdevMax+/- StdevLatency4.09ms20.50ms 402.11ms97.12%Req/Sec5.89k733.626.86k84.85%1404463 requests in 1.00m, 253.67MB readRequests/sec:23401.54Transfer/sec:4.23MB可以看到,延迟明显变大了,但总体的QPS没有明显下降,还是因为存在一些转发 。
思考原来是一台机器上运行一个tomcat容器,现在要运行两个,那么会对机器的负载造成多大的影响呢?可以通过visualvm连接上远程tomcat来观察对内存和CPU的占用
Nginx和Tomcat配合实现Java Web服务热部署

文章插图
 

Nginx和Tomcat配合实现Java Web服务热部署

文章插图
 
可以看到正常情况下,backup容器对服务器的负载基本可以忽略不计 。即便是在发布期间,backup容器也只是在active容器重新载入期间承担职责,之后马上就恢复了 。
Nginx和Tomcat配合实现Java Web服务热部署

文章插图
 

Nginx和Tomcat配合实现Java Web服务热部署

文章插图
 
新版本在线上正式运行之后为保证下一次发布新版本时backup版本是最新的,需要再发布一下backup版本,当然这时流量都在active节点上,对backup节点的发布更新操作不会对负载有什么影响 。
Nginx和Tomcat配合实现Java Web服务热部署

文章插图
 
总结可以通过Nginx的backup机制可以保证服务不中断的情况下发布新版本 。总体的发布流程如下:
  1. 发布新版本到active容器
  2. 确认发布的新版本稳定后发布新版本到backup容器
优势
  1. 任意一台机器上在任意时刻都保证有一个tomcat容器是可用的,保证服务不中断
  2. 从直观上的分机器上线改为直接全量上线,并且保证如果上线的新版本有问题时也不会影响线上服务
劣势
  1. 需要上线两次
  2. 需要在tomcat容器所在的机器上安装Nginx和作为backup的tomcat的容器
  3. backup容器在“待机”时的消耗

链接:https://juejin.im/post/6867088509245603854
来源:掘金

【Nginx和Tomcat配合实现Java Web服务热部署】


推荐阅读