异曲同工的租约

问题描述

有这样一个需求:WordPress中有一个叫做wp-cron.php的文件,它负责做一些定时任务,例如定时发送博文,定时清理垃圾回复等。因为WordPress是运行在Web PHP环境下,不借助第三方工具,实现定时任务有一定的困难。它的思路是,每当博客有点击时,就总触发一次cron,为了不阻塞客户的正常访问,用到了fopensocket 发起一个异步cron请求,当cron页面收到这个请求的时候,就开始检查各种执行条件,如果条件满足,则从数据库中获取cron任务并执行。

这里的问题是,如果有两个用户同时点击了页面,同时触发了cron任务,如何保证只起一个cron?如何保证起了一个cron后,它不会退出,常驻后台?如何保证万一cron退出了,会有后备的cron能起来?

基本流程



对于每一个cron请求,按照下面的顺序执行: 
SELECT获取一个任务 
把这个任务从数据表中删除 
检查删除是否成功 
-如果删除成功,则开始执行SELECT到的任务 
-否则直接退出(有另外一个cron请求也在执行这个任务)

存在的问题



这种方法简单粗暴,很能解决问题,但是它有这样几个问题:

-顺序问题:SELECT取任务的顺序必须都一致。cron1取A、B;cron2取B、A,则可能两个cron都会先后主动退出,导致后台没有cron了。 
-开销问题:每次都会尝试起cron,意味着每次都会发起一次内部的http连接

如何解决


  1. 顺序问题:这个保证每次SELECT都是按照主键顺序取即可,或者按照某个行值唯一的列顺序执行即可。
  2. 开销问题:引入lease(租约)机制,每个cron job一旦启动,就会持有一个lease(3秒),每次执行完一个任务,就续一下自己的lease。任何cron希望启动的时候,必须先看一下lease是否过期,如果lease过期,则立即获取lease,并启动自己。
  3. 由于没有加锁,可能两个cron都抢到了lease,没关系,当他们处理任务的时候,会有一个主动放弃(见上面的流程说明)。这种情况比较罕见,不会影响性能。

缺陷



上面的方案,在特殊情况下还是有一些小缺陷: 
1. cron job中途异常退出后的3秒内,新的任务无法被执行。如果cron job异常退出3秒后,不再有新的请求到来,那么任务队列中堆积的任务将无人处理。

如果cron job异常退出的可能性比较低,则这不是一个很大的问题。如果需要确保任务总能被及时执行,可以考虑使用Linux系统自带的crontab,来定时触发PHP的Cron Job。

关于LEASE



分布式系统中,Lease的概念被广泛采用。当我们无法确切了解到彼此的行为时,我们可以依赖一套约定,来规范和预测彼此的行为,以保障系统处于一个一致的状态。所谓“一致的状态”,就是我们觉得正确、可以理解的状态。上文中,两个cron请求无法知道彼此的存在,通过Lease的方式,很好地达成了一致,不会出现两个cron job同时运行的窘境。

补记



PHP脚本的执行时间,是有限制的,即使在脚本执行之初调用了 ignore_user_abort 方法。该方法的语义是设置客户端断开连接时是否中断脚本的执行,并不能改变PHP脚本最长。控制PHP最大执行时长的,需要修改php-fpm、nginx等的配置,详细参考 这里这里 。不过,在脚本中,也是可以改变PHP的最大执行时间的,相关函数请参考set_time_limit()ini_set(“max_execution_time”, “45”),这里还有一篇小结。根据PHP官方文档,希望在脚本中设定最大执行时间的时候,必须保证php.ini配置中safe_mode=Off。一般默认改选项都是Off,所以你可以在脚本中设置一个无限长的脚本运行时间。不过,安全起见,不建议运行无限长的时间,而是应该在ini_get(“max_execution_time”)的基础上减去若干秒来运行,然后主动释放lease。

时间: 2024-09-16 00:08:40

异曲同工的租约的相关文章

小君谈网站优化和快女比赛异曲同工之处

网站的优化问题相信是每位站长都比较关心的,实际上优化的相通性在其他地方也是有体现的,下面我们来看看网站优化和快女比赛的异曲同工之处吧. 一.网站优化 1.网站的站内优化 网站的title优化,网站的描述优化,网站的目录优化,网站的文章优化,网站的站内链接优化这些都是网站的自身完善,对于做网站优化的我们是需要做好的. 2.网站的站外优化 网站的友情链接,网站的反向链接这些是一种投票机制,我想seoer都是非常了解的,由于笔者本人是在叙述网站优化和快女比赛相通的地方,具体的优化策略就不在此多做评述了

一起学DHCP系列(七)租约、释放

本节主要讨论DHCP的IP地址租约.释放的问题. 当DHCP客户端获取到一个IP地址后,并不代表可以永久使用这个地址,而是有一个使用期限,在DHCP 中我们称之为租约期限,默认是自客户端成功获取之时算起,往后再推8天.其实除了这个8天的时间外, 在有效的租约期限内,其实还包含着两个时间点,第四天和第七天,也就是租约的一半和租约的7/8.这 三个时间点在DHCP 的Offer数据包中就有体现.如下图: 上图中标记红框处即为三个时间点. 我们再来打个比方.如果客户端在1月1日0时成功获取到 一个IP

DHCP服务器“租约期限”一点通

销售部的局域网规模越来越大,客户机数量急剧增加,销售部的网管冬瓜为避免手工为客户机分配IP地址的麻烦,想利用DHCP服务器实现动态分配IP地址.但这样一来,客户机的IP地址会时常发生变化,又给日常维护工作造成了困难. 如何才能让客户机既能得到DHCP服务器分配的IP地址,又能长期拥有这些动态分配的IP地址呢?冬瓜找到了局域网界的"名人"果冻,请他帮忙解决这一难题. 聪明的果冻想到了利用DHCP服务器的"租约期限"参数进行设置,就能解决这个难题.到底是如何实现的呢?冬

分布式编程模式中的租约、事务和分布式事件机制

Jini技术面向网络及分布式计算的特性决定了Jini技术必然与传统的单机系统在许多方面有概念上和实际应用中的差别.如网络的延迟.失败,或者设备的突然撤出,将导致信息的无序和丢失:资源的获得.保存.维护和回收情况更为复杂:不同实体之间通讯和协调工作的可靠性及效率并不像单机系统中那样较为容易地获得保证.因而在 Jini 中以 Java 为基础加入了分布式编程模式,特别是引入了租约.分布式事务和分布式事件. 租约 租约的基本概念是资源只能被使用一段时间,这由租约的持有者(lease holder)和租

HDFS追本溯源:租约,读写过程的容错处理及NN的主要数据结构

1.      Lease 的机制: hdfs支持write-once-read-many,也就是说不支持并行写,那么对读写的互斥同步就是靠Lease实现的.Lease说白了就是一个有时间约束的锁.客户端写文件时需要先申请一个Lease,对应到namenode中的LeaseManager,客户端的client name就作为一个lease的holder,即租约持有者.LeaseManager维护了文件的path与lease的对应关系,还有clientname->lease的对应关系.LeaseM

闪电租人如何获得每日3次免费租约机会

1.在手机中打开"闪电租人"然后注册会员,如果注册了登录之后点击"个人"-"获得免费租约机会"普通用户每天有3次免费租约,升级VIP可享受每天30次免费租约哦; 2.如果想充值我们可以点击"购买VIP"-"立即购买"按钮; 3.在弹出的"选择服务周期"选择自己需要的周期,一键点击就可以进行购买充值了!成为VIP之后你可以享受"查看私密照片"."查看认证视频&

传俏江南欠薪歇业 汪小菲:租约到期在搬家

据台湾http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,曾屡传亏损.欠薪.歇业,由艺人大S老公汪小菲经营的川菜餐厅俏江南,展店2年半,日前惊传熄灯号.北京市劳动局也透露已收到大量解雇通报,指餐厅将资遣所有员工约30多人.对此,汪小菲透露仅是因为租约到期. 许多民众发现,近来俏江南不仅餐桌上都放有一张告示小卡,预告餐厅将于10月中旬迁移新址:店内菜单也有修改,多样菜色的价钱皆神隐消失:加上劳动局透露,有收到餐厅资遣所有员工的解雇

孙俪新剧造型清秀可人与《美俪暗号》异曲同工

孙俪 孙俪 新浪娱乐讯 近日,一组由孙俪担纲主演的<后宫甄嬛传>剧照在网上传播,身着清宫服饰装扮的孙俪清秀可人.明媚四射.这部由热门网络小说改编的电视连续剧讲述了一名美丽女子从普通宫女成为皇后的传奇故事,这与近期孙俪推出的全新单曲<美俪暗号>所传递的信念-每一位女生都可以赢得美丽有异曲同工之妙. 尽管<美俪暗号>发布后反响热烈,但因为拍戏档期很紧,孙俪分身乏术,只能推掉好几场跨年演唱会的邀约.为了能够赶上<后>剧组的拍摄进度,孙俪每天的休息时间非常少,从早上

爱家红木大观楼与商户因租约起纠纷卖场被指撬门盗货

直到昨天,商户周先生还不知道自己店内价值几百万元的红木家具去向何方.因租约问题,包括周先生在内的数十家商户和爱家红木大观楼管理方发生纠纷,多位商户称,管理方深夜撬锁将周先生店内货品搬空. 商户申诉:管理方不近人情 红木改玉石 协商未果擅自装修 位于南三环成寿寺的爱家红木大观楼曾以红木家具集中销售地著称.但昨天记者来到事发地发现,卖场外停着多辆搬家车,一些商户正忙着向车内搬运家具.卖场内,大多商户已经撤离,四处都在装修,仅剩下为数不多的商户"坚守".大门旁,是醒目的玉石招商广告. 多家商