一个网络应用必须迅速响应网络请求,一般要小于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(任务队列和时钟守护作业)的更多相关文章

  1. 使用cpanel后台的“时钟守护作业”功能完成空间的定时全备份

    现在不少虚拟主机都是使用的cpanel控制面板,由于空间商选用的cpanel版本不同,有的带有定时备份功能,而有的就没有这项功能,需要手动备份.不过,还在绝大部分的cpanel后台都有“时钟守护作业” ...

  2. ESXi cron jobs

    #Edit corn jobs vi /var/spool/cron/crontabs/root # Check crond pross id cat /var/run/crond.pid # Kil ...

  3. 使用cron命令配置定时任务(cron jobs)

    原文 http://www.cnblogs.com/end/archive/2012/02/21/2361741.html 开机就启动cron进程的设置命令:chkconfig --add crond ...

  4. cpanel导入大数据库(mysql)的方法

    phpmyadmin是一件很方便的在线管理MySQL数据库的工具,但对于较大的数据库的导出和导入却很容易出错.特别是导入工作,通常5M已经是它的极限了.这里,主要介绍一下如何通过cPanel导入大型的 ...

  5. cpanel 定时运行sh/php

    php -q /home/用户/public_html/cron.php                   -------------------php格式 /home/用户/public_html ...

  6. Creating a Cron Job in K8S

    Creating a Cron Job Cron jobs require a config file. This example cron job config .spec file prints ...

  7. 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 ...

  8. Spring Boot 系列教程14-动态修改定时任务cron参数

    动态修改定时任务cron参数 不需要重启应用就可以动态的改变Cron表达式的值 不能使用@Scheduled(cron = "${jobs.cron}")实现 DynamicSch ...

  9. Answers to "Why are my jobs not running?"

    from :https://community.oracle.com/thread/648581 This is one of the most common Scheduler questions ...

随机推荐

  1. Android PullToRefreshExpandableListView的点击事件

    这几天做项目的时候用到了一个开源的下拉刷新的框架(需要的朋友可以加我Q:359222347).其中我使用PullToRefreshExpandableListView的时候发现这个东西没有setOnC ...

  2. 【C#设计模式——创建型模式】工场方法模式

    工场方法模式对简单工场模式进行了乔庙的扩展,不是用一个专门的类来决定实例化哪一个子类.相反,超类把这种决定延迟到每个子类.这种模式实际上没有决策点,就是没有直接选择一个子类实例化的决策. 看书上的例子 ...

  3. C#通过代码注册COM组件

    using System; using System.Diagnostics; using Microsoft.Win32; namespace ChuckLu.Utility { public cl ...

  4. Java视频教程

    http://outofmemory.cn/java/video/ http://outofmemory.cn/tutorial/

  5. Android studio在真机上进行调试

    1.在Android Studio中,把app的默认启动目标改为USB device,点击[app]→[app configuration],在[Target Device]选择[USB device ...

  6. android完全退出应用程序

    android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...

  7. bzoj3140

    首先考虑二维的情况 min(x,y)也就意味着确定最小后,另外一维肯定打满 然后最小那个如果是k的话就相当于用k*1次——这不就是行列覆盖吗,二分图秒之 三维呢?考虑到a*b*c<=5000也就 ...

  8. bzoj4046

    分组赛的题……madan原题,考试想不出来真是SB得不行 首先,从大往小加边,每次加边如果成环必然弹出环上最大边 考虑询问[x,y],如果边权在[x,y]的边弹出了小于等于y的边j,说明j不在最小生成 ...

  9. poi2012完成

    终于完成了(2798是我cheat的……),感觉poi的题好锻炼智商…… 截图留念,题解见博客中对应题号的解题报告

  10. Qt之自定义界面(窗体缩放)

    简述 通过前两节内容,我们实现了自定义窗体的移动,以及自定义标题栏-用来显示窗体的图标.标题,以及控制窗体最小化.最大化.关闭. 在这之后,我们还缺少窗体的缩放-当鼠标移动到窗体的边框-左.上.右.下 ...