一个网络应用必须迅速响应网络请求,一般要小于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. Linux功能-RPM命令详解

    一.概述 RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”,用RPM包方式来发布软件变得越来越流行,主要的原因是这种软件发布 ...

  2. Unified Emoji表情for Android

    这个是我做Android以来碰到的最烦的东西,该死的emoji表情,恨之入骨..无奈这个问题分配给我了.我也只能硬着头皮做. 0.吐个槽先 首先,你要明白什么是emoji表情,不知道的google,不 ...

  3. Android 拦截短信

    public class SMSMess extends BroadcastReceiver { @Override public void onReceive(Context arg0, Inten ...

  4. Hibernate学习笔记(1)

    1 使用Hibernate (1)创建User Library,命名为HIBERNATE3,加入需要的jar (2)创建hibernate配置文件hibernate.cfg.xml, 为了便于调试最好 ...

  5. Linux3.4内核的基本配置和编译

    转载自:http://www.embedu.org/Column/Column634.htm 作者:李昕,华清远见研发中心讲师. 了解Linux3.4内核的特性及新增功能,掌握Linux内核的编译过程 ...

  6. WCF学习笔记之地址

    1.统一资源标识(URI) URI全称是Uniform Resource Identifier(统一资源标识),唯一地标识一个网络资源的同时也标识资源所处的位置以及访问方式(资源访问所用的网络协议). ...

  7. 用paint 计算字符串的像素宽度

    方法1: //直接返回参数字符串所占用的像素宽度 Paint paint = new Paint(); width = paint.measureText(str); 有一些view可以直接得到pai ...

  8. C# WebBrowser准确判断网页最终装载完毕

    == 最近写了个软件叫WebAutoScript,目的用于,网页的自动操作处理,就是说,所有你在网页上面的操作,都可以录到一个脚本中,然后可以回放这个操作过程..我是说任何过程. 程序是用C#写的,其 ...

  9. 制作SM2证书

    前段时间将系统的RSA算法全部升级为SM2国密算法,密码机和UKey硬件设备大都同时支持RSA和SM2算法,只是应用系统的加解密签名验证需要修改,这个更改底层调用的加密动态库来,原来RSA用的对称加密 ...

  10. bzoj3571

    同样的最小乘积XXX模型,这里显然是二分图带权匹配 我不会写KM……于是写了个费用流,由于是稠密图,会退化到n^4 然后本地跑了56s,交上去过了………………一定是我电脑太慢…… 改天写个KM吧 *; ...