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 ...
随机推荐
- RedHat6配置yum源 (32位)
由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用, 如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源,以下为详细过程: 1.删除redhat原有的yum rpm ...
- 机器人学 —— 轨迹规划(Introduction)
轨迹规划属于机器人学中的上层问题,其主要目标是计划机器人从A移动到B并避开所有障碍的路线. 1.轨迹计划的对象 轨迹规划的对象是map,机器人通过SLAM获得地map后,则可在地图中选定任意两点进行轨 ...
- Android Studio修改包名和applicationId的方法
背景: 如果新做的项目跟以前做的某一个项目十分相似,那么一个简单的方法就是把原来项目拷贝一份,然后修改代码,但是这样包名还是原来项目的包名,还有如果想在同一台手机上同时安装新做的app和原来的app会 ...
- zoj 3778 Talented Chef(思维题)
题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
- iOS开发:Swift多线程GCD的使用
除了上一篇文章说到到NSThread线程,还有一个GCD(Grand Central Dispath),是Apple新开发的一个解决多核编程的解决方案,充分的利用CPU资源,将所有的任务,放到一个任务 ...
- MSSQL大全
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- I.MX6 Power off register hacking
/*********************************************************************** * I.MX6 Power off register ...
- liux vim命令
命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...
- U1 - A 留在电脑里的字体
U1系列新篇章,实战派!说说常用的字体! U1系列新篇章,实战派!更多干货更多关于软件的使用等即将放出,大家敬请期待!!
- Linux下通过ioctl系统调用来获取和设置网络信息
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...