1、负载均衡下拨号客户端(client)和服务端(server)的实现,client1,client2,client3,TOMCATE1,TOMCATE2,管理库,server,client,apache服务器,客户端(client)的实现,管理库,c_agent,定时检测表的状态,当status变为yes的时候,说明服务端有更新,则停止拨号的运行,将服务端的jar包下载到客户端特定的目录中,然后将status设为no,启动拨号。,jar,ftp,client1,client2,client3,TOMCATE1,TOMCATE2,client,apache服务器,server,服务端(server
2、)的实现,管理库,client1,client2,client3,TOMCATE1,TOMCATE2,server,client,apache服务器,s_agent,服务端(tomcate)如何只开启一个定时器的实现 方案1(定时器配置走表格),管理库,client1,client2,client3,TOMCATE1,TOMCATE2,server,client,apache服务器,s_agent,定1,定2,status=Y的条件下,count(*) =2,什么都不做,当=1时,判断enable,当enable=Y时什么也不做,当enable=N时,将enable=Y,且将status=N的
3、enable=N,动态重启定时器。 这样就保证了当Tomcate正常后永远只有一个定时器在跑。,设置status为N,服务端(tomcate)如何只开启一个定时器的实现 方案2(定时器配置走配置文件),管理库,client1,client2,client3,TOMCATE1,TOMCATE2,server,client,apache服务器,s_agent,定1,定2,设置status为N,表格只维护tomcate状态,具体定时器的状态修改由修改配置文件完成,修改后重启quartz(定时器)。,服务端(tomcate)如何只开启一个定时器的实现 方案3(定时器配置走配置文件),管理库,clien
4、t1,client2,client3,TOMCATE1,TOMCATE2,server,client,apache服务器,s_agent,定1,定2,设置status为N,两个定时器都是开启的,但是要具体的业务逻辑中要加入判断。维护表,使表中永远只有一条记录。,服务端(tomcate)如何只开启一个定时器的实现 方案4(agent中负责拨号服务端执行),管理库,client1,client2,client3,TOMCATE1,TOMCATE2,server,client,apache服务器,s_agent,将Tomcate中拨号服务端的逻辑迁到agent中,然后再写一个守护进程。,服务端(to
5、mcate)如何只开启一个定时器的实现 最终确定方案(方案3),管理库,client1,client2,client3,TOMCATE1,TOMCATE2,server,client,apache服务器,s_agent,定1,定2,设置status为N,两个定时器都是开启的,但是要具体的业务逻辑中要加入判断。维护表,使表中永远只有一条记录的status为Y。,区分tomcate的方式:各个tomcate里写一个配置文件,标识自己的唯一性,如server。,服务端(tomcate)如何只开启一个定时器的实现 最终确定方案(方案3),管理库,client1,client2,client3,TOMC
6、ATE1,TOMCATE2,server,client,apache服务器,s_agent,定1,定2,设置status为N,定时器逻辑: 如果有自己的记录,则将status设置为Y。 首先检测表中为fina_status为Y的总数,如果为0,则将自己的记录插入,如果为1且server的标识和自己的不同则不执行拨号的逻辑,如果为1且server的标识和自己的相同,则执行拨号逻辑。如果为2,则任意删除一条。,服务端(tomcate)如何只开启一个定时器的实现 最终确定方案(方案3),管理库,client1,client2,client3,TOMCATE1,TOMCATE2,server,client,apache服务器,s_agent,定1,定2,设置status为N,agent逻辑: 将status设置为N,当status为N时,times=times+1,当status=N,times=1时,fina_status为N。,