考虑很久,决定还是写一下这篇文章,主要是 AJP 技术太老,我只能说 Long long ago ,估计我在用这个技术的时候,很多同学小学还没有毕业。但是没有问题,这篇文章只是一个架构启发,不会浪费你时间让你学习 20 年前的技术和知识。
Apache JServ Protocol
Apache JServ 协议,简称 AJP ,是一种二进制协议,可以将来自 Web 服务器的入站请求代理到位于 Web 服务器后面的应用程序服务器,部署结构如下:
通常我们不希望直接将应用服务暴露到互联网上,有安全问题,当然还涉及到 DNS,IP等问题,我们会做一个互联网请求入口的 Gateway,也就是一个Web服务负责入站请求,然后再转发给内部的Web应用服务器,这样架构就灵活很多。
为何要使用 AJP 这个二进制协议?我们知道 HTTP 1.1 是文本协议,所以解析协议的工作量还是有的,如果 Gateway 的 Web 服务器已经将 HTTP 协议解析啦,为何不复用解析后的结果,形成一个更高效的二进制结构,然后传送给后端的 Web 服务器,这样后端 Web 服务器就会省去解析 HTTP 文本协议这个动作,节约了计算,速度也快啦;
此外 AJP 是长连接,和 HTTP 1.1 的短连接也不一样,可以避免反复的 HTTP 短连接创建,也提高了网络的传输效率,这些就是 AJP 的作用。如果 Gateway 直接是反向代理到后端服务器,还是走普通 H