一个网络应用必须迅速响应网络请求,一般要小于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. Servlet中Service方法

    doGet方法只能处理Get方式提交的请求,doPost则可以处理Post方式提交的请求, 一种既可以处理Get方式又可以处理Post方式的提交的请求,它就是Service方法. service方法用 ...

  2. KMP算法的C++实现

    这个问题阮一峰老师讲的很清楚,链接 这里我只贴一下我的C++实现代码: #include <iostream> #include <cstring> #include < ...

  3. Android viewPage notifyDataSetChanged无刷新

    转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分享.其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅.整理出来,分享给大家. 建议使用自 ...

  4. 车牌识别LPR(七)-- 字符特征

    第七篇:字符特征 选择的字符特征应该满足以下条件: (1)选取的字符特征具有较强的鲁棒性,不受字符变形.弯曲等影响. (2)两个字符的字符特征不能完全相同,但部分相同是允许的,即选择的字符特征是唯一的 ...

  5. C++ 11 vlearning

    1.新增算术类型     longlong,最小不比long小,一般为64位. 2.列表初始化      int units_sold = {0};或者 int units_sold{0};非11标准 ...

  6. SQLserver临时表

    IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='#temp') DROP TABLE #tempGOSELECT ID,XM,ADDDW INTO #t ...

  7. Android wakelock机制

      Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁. 如果没有锁了或者 ...

  8. Asp.net 后台添加Meta标签方法

    Asp.net 后台添加Meta标签方法包括keywords,CSS.JS 下面是从Asp.net 后台添加CSS.JS.Meta标签的写法,我们这里写成函数方便以后使用.如果函数放在页面类中, Pa ...

  9. [Sciter系列] MFC下的Sciter–3.Sciter脚本与底层交互

    [Sciter系列] MFC下的Sciter–3.Sciter脚本与底层交互,脚本调用底层自定义的方法函数. 本系列文章的目的就是一步步构建出一个功能可用,接口基本完善的基于MFC框架的SciterF ...

  10. HDU 4635 Strongly connected (强连通分量)

    题意 给定一个N个点M条边的简单图,求最多能加几条边,使得这个图仍然不是一个强连通图. 思路 2013多校第四场1004题.和官方题解思路一样,就直接贴了~ 最终添加完边的图,肯定可以分成两个部X和Y ...