Tasks Queues and Cron Jobs(任务队列和时钟守护作业)
一个网络应用必须迅速响应网络请求,一般要小于1s,最好是几十微秒,以便为坐在浏览器前面的用户提供一个流畅的体验。这就给不了应用太多的时间来处理工作。有时会是有更多的工作要做而不是有时间来做它。<1.Sometimes,there is more work to do than there is time to do it.>在这种情况下,当用户等待来自服务器的响应时,如果工作花了几秒,几分,几小时而不是立即,也总是OK的。但是用户需要有工作将会完成这样的保证。
对于这种工作,App Engine应用使用了任务队列。任务队列让你在网络请求的范围之外的某个时候说明工作被完成。队列确保每一个任务最终都会被完成。如果一个任务失败了,这个队列会重试这个任务直到它成功了。
有两种类型的任务队列:推队列(push queue)、拉队列(pull queue)。在推队列中,每一个任务记录代表一个给请求处理器的HTTP请求。App Engine在处理这个推队列时会发出这些请求。你可以配置堆队列被执行来分散负载的频率。在拉队列中,你提供一个机制,比如:自定义的计算引擎,从队列中取出记录并执行工作。App Engine管理拉队列的排队方面。
一个推队列调用一个请求处理器来执行一个任务。它可以包含创建任务的代码所提供的数据有效负载。有效负载会以HTTP请求的方式传递给任务处理器。任务处理器和其他请求处理器一样受制于相同的限制,一个重要的异常就是:一个任务处理器可以花费最长10分钟的时间来执行一个任务,而不是应用于用户请求的60秒。将任务分割为小的任务来利用并行和队列吞吐量,更高的时间限制使得任务更容易用简单的方式写。
任务队列的一个特别强大的特征就是在一个datastore事务中将一个任务入队列(enqueue)。这确保了只有datastore事务的剩余部分成功了才会被入队列。你可以使用事务性任务执行额外的必须最终和事务保持一致的datastore操作,不过这不需要datastore的本地事务的强一致性保证。
App Engine有其他的服务来在一天的特别时间点执行任务,称之为计划任务服务。计划任务也就是熟知的“cron jobs”。这是从Unix操作系统中相同的特性借来的名字。这个计划任务服务可以基于你上传应用时提供的时刻表,在一天、一个星期、一个月的某个特别时间点调用一个请求处理器。计划任务对于常规维护、发送周期的通知消息是非常有用的。
我们会在第16章中看看这个任务队列,时刻表及一些强大的使用。
Tasks Queues and Cron Jobs(任务队列和时钟守护作业)的更多相关文章
- 使用cpanel后台的“时钟守护作业”功能完成空间的定时全备份
现在不少虚拟主机都是使用的cpanel控制面板,由于空间商选用的cpanel版本不同,有的带有定时备份功能,而有的就没有这项功能,需要手动备份.不过,还在绝大部分的cpanel后台都有“时钟守护作业” ...
- ESXi cron jobs
#Edit corn jobs vi /var/spool/cron/crontabs/root # Check crond pross id cat /var/run/crond.pid # Kil ...
- 使用cron命令配置定时任务(cron jobs)
原文 http://www.cnblogs.com/end/archive/2012/02/21/2361741.html 开机就启动cron进程的设置命令:chkconfig --add crond ...
- cpanel导入大数据库(mysql)的方法
phpmyadmin是一件很方便的在线管理MySQL数据库的工具,但对于较大的数据库的导出和导入却很容易出错.特别是导入工作,通常5M已经是它的极限了.这里,主要介绍一下如何通过cPanel导入大型的 ...
- cpanel 定时运行sh/php
php -q /home/用户/public_html/cron.php -------------------php格式 /home/用户/public_html ...
- Creating a Cron Job in K8S
Creating a Cron Job Cron jobs require a config file. This example cron job config .spec file prints ...
- How to Create a Cron Job (Scheduled Task) for Your Website or Blog
How to Create a Cron Job (Scheduled Task) for Your Website or Blog by Christopher Heng, thesitewizar ...
- Spring Boot 系列教程14-动态修改定时任务cron参数
动态修改定时任务cron参数 不需要重启应用就可以动态的改变Cron表达式的值 不能使用@Scheduled(cron = "${jobs.cron}")实现 DynamicSch ...
- Answers to "Why are my jobs not running?"
from :https://community.oracle.com/thread/648581 This is one of the most common Scheduler questions ...
随机推荐
- Android PullToRefreshExpandableListView的点击事件
这几天做项目的时候用到了一个开源的下拉刷新的框架(需要的朋友可以加我Q:359222347).其中我使用PullToRefreshExpandableListView的时候发现这个东西没有setOnC ...
- 【C#设计模式——创建型模式】工场方法模式
工场方法模式对简单工场模式进行了乔庙的扩展,不是用一个专门的类来决定实例化哪一个子类.相反,超类把这种决定延迟到每个子类.这种模式实际上没有决策点,就是没有直接选择一个子类实例化的决策. 看书上的例子 ...
- C#通过代码注册COM组件
using System; using System.Diagnostics; using Microsoft.Win32; namespace ChuckLu.Utility { public cl ...
- Java视频教程
http://outofmemory.cn/java/video/ http://outofmemory.cn/tutorial/
- Android studio在真机上进行调试
1.在Android Studio中,把app的默认启动目标改为USB device,点击[app]→[app configuration],在[Target Device]选择[USB device ...
- android完全退出应用程序
android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...
- bzoj3140
首先考虑二维的情况 min(x,y)也就意味着确定最小后,另外一维肯定打满 然后最小那个如果是k的话就相当于用k*1次——这不就是行列覆盖吗,二分图秒之 三维呢?考虑到a*b*c<=5000也就 ...
- bzoj4046
分组赛的题……madan原题,考试想不出来真是SB得不行 首先,从大往小加边,每次加边如果成环必然弹出环上最大边 考虑询问[x,y],如果边权在[x,y]的边弹出了小于等于y的边j,说明j不在最小生成 ...
- poi2012完成
终于完成了(2798是我cheat的……),感觉poi的题好锻炼智商…… 截图留念,题解见博客中对应题号的解题报告
- Qt之自定义界面(窗体缩放)
简述 通过前两节内容,我们实现了自定义窗体的移动,以及自定义标题栏-用来显示窗体的图标.标题,以及控制窗体最小化.最大化.关闭. 在这之后,我们还缺少窗体的缩放-当鼠标移动到窗体的边框-左.上.右.下 ...