1.mod_jk模块儿产生的契机:apache处理静态页面要比tomcat的能力强,tomcat开发组开发了与apache结合使用的mod_jk模块。协议由apache代理请求。

 2.mod_jk模块作用:(1)实现apache与tomcat的一对多的对应,对tomcat负载均衡。(2)提供apache和tomcat连接情况的监控。(3)搭建集群。

 3.mod_jk工作模式:一个HTTP请求过来,mod_jk模块根据其URI选择合适的worker来进行处理。如果是lb_worker(负载均衡的worker),就再根据各种条件选择后台合适的ajp_worker(处理AJP协议的worker)。ajp_worker将HTTP协议的包,组装成AJP协议格式的包,然后选取一条空闲的链接,发送给后台的tomcat服务器。等到后台将数据发送过来时,接收并解析AJP协议,重新组装成HTTP协议,然后把结果发送给客户端。

 4.mod_jk的组成:watchdog线程和一组worker线程,watchdog线程是一个维护线程,它会扫描所有worker线程的空闲连接,负载情况,与后端连接情况,并使共享内存同步。worker线程负责所有实际的工作,从具体的worker对象的角度讲,mod_jk由ajp_worker,jni_worker,lb_worker和status_worker组成,每类worker都有生产workers的factory。

 5.mod_jk通过线程锁实现线程内外的同步,通过文件记录锁实现进程之间的全局同步。进程间的数据共享方式:进程启动时候创建一个jkshmsize大小的文件,然后mmap到内存,由于各进程mmap到内存的是相同的镜像,所以可以实现数据的共享。apache基本处理方式是一个线程/进程负责一个连接,所以mod_jk各线程中对于网络IO处理都是阻塞的。

 6.jk_handler函数是mod_jk的主要处理函数,负责将HTTP请求从apache发送到tomcat,再从tomcat接受数据并返回给客户端。