关于多台服务器负载均衡时,只运行一个定时器的设计


http://blog.sina.com.cn/s/blog_61d8d9640101ajmz.html
最近公司的项目要在电信上线,遇到了一个问题:我们的应用部署在一台服务器上,但做了负载均衡。这样就会有一个问题:我们的工程里面本来就有两个定时器会在指定的时间间隔内,运行相关程序,但负载均衡后的结果却是:有可能会出现,在A服务机上的应用在跑定时器时,B也会同时跑定时器,这样就很容易造成数据库表的死锁或者产生脏数据。这就是所谓的定时器双机处理。为了实现在这种情况下,始终只有一个定时器在跑,项目组做了这样的一个设计,个人感觉这个设计比较完美,就把它的一个大概思路在这里记一下:
      首先,我们先在数据库建一个表:timerT,表里面有三个字段:status(表当前定时器是否处于可运行状态)、timestamp(时间戳)、serverIP(正在运行定时器的服务器IP)。
      这里其具体的用法是:当两台服务器,都运行起来后,服务器A开始执行定时器,这时,A会去读取表timerT的status字段,当为0时,则执行定时器的业务逻辑,此时A定时器,需要把status改为1,以便让另一台服务器的定时器B不去执行业务逻辑并把当前服务器的IP记录到表中,同时修改启动一个新的线程,在XXX长的时间间隔内不断去修改timestamp的值,当A执行完业务逻辑时,就把status的值改为0,这样B定时器就可以执行。这样做可以解决一个问题,就是:当其中一个定时器A挂掉后,我们另一个定时器B,可以比对timestap的值与当前时间是否超过XXX时长,如果超过,则证明定时器A已经挂掉,这时B就会把status的值改成1,把serverIP改成B定时器所在的服务器IP,并执行业务逻辑。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值