tomcat中ajp及8009端口用处
tomcat常用于提供servlet/jsp容器服务,简单方便、使用高效。但是tomcat处理静态文件资源的性能不足(应该是serviece部分),同时,如果用户直接与tomcat进行http的连接获取静态资源(连接器connector部分),相对而言就更慢了(http协议基于文本,相对“基于二进制的协议”而言性能较低,后者例如ajp13协议)。因此,如果以“使用tomcat提供servlet/j
tomcat常用于提供servlet/jsp容器服务,简单方便、使用高效。但是tomcat处理静态文件资源的性能不足(应该是serviece部分),同时,如果用户直接与tomcat进行http的连接获取静态资源(连接器connector部分),相对而言就更慢了(http协议基于文本,相对“基于二进制的协议”而言性能较低,后者例如ajp13协议)。
因此,如果以“使用tomcat提供servlet/jsp容器服务”为前提,又希望使其中的静态文件资源的请求性能好一点时,就要用到“tomcat中的ajp”(此处ajp指对接ajp13协议的连接器)。下面通过流程说明ajp意义及优势,而8009只是默认的ajp服务端口,没什么特别的。网上各方常用图如下:
上图的使用逻辑不赘述。客户1的请求就是普通servlet资源的请求,重点说明为什么这么处理客户2的请求,即优势。客户2请求静态资源:首先,此时tomcat提供的是“基于AJP13协议”的ajp服务(常用8009端口),该协议基于二进制的TCP传输协议,基于包的,因此截图中间的HTTP服务器与tomcat之间保有一个持久存在的连接,省了“每次新请求时重新创建socket”的麻烦,且两者通信基于AJP13因此速度快效率高;其次,tomcat对静态资源缺少优化,而HTTP服务器可以对获得的资源进行优化,比如缓存之类对。综上,客户2获取一个新的静态资源时,相比直接连接tomcat,从“http + tomcat处理”变成了“http + 中间http服务器处理 + AJP + tomcat处理”,看似流程多了点,但前后两个“http”传输的“连接器部分”并不相同,性能速度不确定;但后续该客户2或其他客户再次获取该静态文件资源时,有可能由中间http服务器直接处理了,注意Apache服务器处理静态文件资源时明显优于tomcat处理静态文件资源的。因此,整体而言,静态文件资源的处理性能提升了。
但是,上述方案只是一种过往的经验总结,用于解释ajp功能。实际中,能“代理ajp”的上述中间http服务器不多也不常用(比如截图Apache服务器与IIs服务器),而已经有其他方案处理优化该场景需求,且tomcat的ajp也暴露了很多漏洞,所以说只是经验、不建议使用。
因此,最终结论是别用ajp,tomcat中的ajp服务在server.xml中注释/禁掉把。
(学习网上帖子时看到热加载与热部署区别:前者监听所有文件改变,变时局部加载不清空session与内存,有可能内存溢出,有可能ide出bug;后者重新部署,清空session释放内存——前者多用于研发,后者相对服务器而言)
更多推荐
所有评论(0)