`
maozilee
  • 浏览: 252596 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

SAE新浪TaskQueue使用技巧

阅读更多

 

来,我们测试一下TaskQueue

 

 

<php?

         //SAE需要手动建立一个test,然后通过如下代码调用使用

        $t = new SaeTaskQueue("test");
        $t->addTask("http://" . $_SERVER['HTTP_HOST'] . __URL__ . "/tq_test1"); //添加列队任务1
        $t->addTask("http://" . $_SERVER['HTTP_HOST'] . __URL__ . "/tq_test2", "k1=v1&k2=v2", true); //添加列队任务2
        if (!$t->push()) {
            echo '出错:' . $t->errmsg();
        } else {
            echo '执行成功!请查看[' . LOG_PATH . 'sae_debug.log' . ']文件中的日志';
        }

      //列队任务1
      public function tq_test1() {
           sae_debug("列队任务1被执行"); 
      }

      //列队任务2
      public function tq_test2() {
           sae_debug("列队任务2被执行,k1的值:{$_POST['k1']},k2的值:{$_POST['k2']}"); 
      }



 ?>

 

 

 

后附SAE的TaskQueue介绍---------------

 

   TaskQueue 是SAE为开发者提供的分布式任务队列服务,用来以异步HTTP方式执行用户任务。用户需要先在在线管理平台创建Queue,然后向Queue Push任务,放入队列的任务随即即会执行。TaskQueue 的任务的执行是以HTTP方式执行的,真正执行的是用户在App中的PHP代码,所以最长执行时间和HTTP页面执行时间相同。TaskQueue 服务是分布式环境部署的,具有高可靠性,每个worker相互隔离,并且主动负责任务执行。

    Queue分为顺序队列和并发队列,顺序队列的任务顺序执行,而并发队列中的任务则以并行的方式执行。用户还可以为每个Queue指定error callback url,当每个任务执行失败时,TaskQueue 自动会调用error callback url通知开发者。

    特别注意:

  • TaskQueue 的任务的最长时间不得超过30秒
  • 并发队列不保证任务的有序性
  • 所有队列类型都有最大长度,请勿使队列长期阻塞
  • 所有APP创建TaskQueue 总数<=10

 

应用场景

    TaskQueue 服务主要提供针对http方式的异步任务执行,如开发者想给1000个用户发送微博,如果写成:

    for($i=0;$i<1000;$i++)

        send_weibo(); 

    很容易造成页面超时,因为发送任务均为同步执行。而如果使用TaskQueue 则不会超时,如写成:

    $array=array();
    for($i=0;$i<1000;$i++)
        $array[]=array('url'=>"http://freedemo.sinaapp.com/sendweibo.php", "postdata"=>user[$i]);

    $queue->addTask($array);

 

 

使用指南

    例子:

    appname: saetest

    appversion: 1

 

 创建queue

    使用TaskQueue 服务执行,开发者需要登录在线管理平台,并进入服务管理=>TaskQueue ,先创建队列。TaskQueue 目前的队列分成两大类,顺序队列和并发队列:

 

 

    一些概念:

  • 顺序队列:并发度为1,以保证任务可以按照进入队列的先后顺序依次执行
  • 并发队列:并发度>1,进入队列的任务将按并发度并行执行,不保证严格有序
  • 并发度:负责处理该队列的worker数量,worker越多处理的越快
  • worker:负责处理任务,并执行Web请求
  • 最大长度:当队列worker处理较慢,队列发生阻塞时,允许队列的最大长度,当队列达到最大长度时,新的任务将不能进入队列,直到有旧任务从队列中消费出去为止
  • 任务:TaskQueue 目前只支持web任务,任务的执行可以用GET或者POST方式,用户负责对格式做拼装和解析
  • 队列属性还有一个“失败回调URL”,指的是:当该任务执行失败时,回调的URL地址,如果用户制定了该地址,SAE会将原请求的 url上增加原请求地址后原封不动再发送给回调URL,如:用户原HTTP请求(GET):http://kobe.sinaapp.com /a.php,用户指定了失败回调URL:http://kobe.sinaapp.com/error_callback.php,则当TaskQueue 失败时得到的回调是:http://kobe.sinaapp.com/error_callback.php?url=http://kobe.sinaapp.com/a.php ,如果原请求为POST方式,则post段内容不变。

    用户可以根据自身的需要创建不同属性的队列,如果对顺序性要求强烈,可以选择顺序队列,如果对处理速度要求强烈,可以选择并发大的并发队列;如果任务执行较慢,可能发生拥堵,则最好选择队列最大长度较大的队列。

 使用队列

    创建完队列后,就可以通过SAE std lib通过函数调用TaskQueue 了,如:

    $queue = new SaeTaskQueue('test');//此处的test队列需要在在线管理平台事先建好

    //添加单个任务

    $queue->addTask("http://freedemo.sinaapp.com/yourtask1.php");

    $queue->addTask("http://freedemo.sinaapp.com/yourtask2.php", "postdata", true);

 

    //批量添加任务

    $array = array();
    $array[] = array('url'=>"http://freedemo.sinaapp.com/yourtask1.php", "postdata"=>"act=test");
    $array[] = array('url'=>"http://freedemo.sinaapp.com/yourtask2.php", "postdata"=>"act=test", "prior"=>true);

    $queue->addTask($array);

 

    //将任务推入队列

    $ret = $queue->push();

    var_dump($ret);

 

 

服务限制与配额

    SAE设置服务限制和配额的目的是为了防止个别用户攻击和滥用,从而在公有云计算平台上保证绝大多数开发者的正常使用。

    1. 服务限制和配额设定是在门户网站新浪自身长期运维的基础上经过严格计算得出的,所以正常使用一般不会出现问题。经过SAE实际统计,99%的应用不会受到任何影响

    2. 当您发现您的某项服务超过限制或者超配时,请先阅读相关文档确认限制和配额的具体数值,再检查自己的程序是否存在使用不当的情况,如果仍然解决不了,可以和SAE官方联系,saeadmin@sina.cn

 服务限制

单任务超时限制 300秒
单用户创建的最大队列数 10

注意:由于TaskQueue 服务是回调HTTP服务,所以会受到Runtime内核的限制

 分钟配额

服务 请求数 cpu时间 流入带宽 流出带宽
TaskQueue 20,000=>40,000 60s=>100s 10MB=>20M 10MB=>20M
分享到:
评论

相关推荐

    discuzX2forSAE【SAE版discuz】

    例如,它可能使用SAE的KVDB代替传统数据库,利用SAE的Memcache服务进行缓存,以及利用TaskQueue进行异步任务处理。 2. **架构与组件**:压缩包内的文件反映了Discuz! 的核心结构。`index.php`是入口文件,负责调度...

    SaeServer(SAE本地开发环境) v1.1

    因为新浪SAE环境和普通环境的不同,许多SAE提供的服务不能在本地运行。往往我们写的代码不能在本地测试,每次必须上传到SAE上面进行测试。现在不用这么麻烦,SaeServer在本地模拟SAE服务。让程序也能在本地进行测试...

    TaskQueue的DEMO SHOW

    本DEMO展示如何使用TaskQueue来实现高效的多线程任务分配,以提高程序的并发性能和资源利用率。 首先,理解TaskQueue的核心概念。任务队列通常是一个先进先出(FIFO)的数据结构,它存储待处理的任务。当一个任务被...

    SaeServer(SAE本地开发环境)v1.1

    因为新浪SAE环境和普通环境的不同,许多SAE提供的服务不能在本地运行。 往往我们写的代码不能在本地测试,每次必须上传到SAE上面进行测试。现在不用 这么麻烦,SaeServer在本地模拟SAE服务。让程序也能在本地进行...

    SAE安全机制.pdf

    新浪App Engine(SAE)是中国新浪公司推出的一种基于云计算的平台即服务(PaaS)产品,旨在为开发者提供便捷、安全的Web应用开发环境。SAE的安全机制是其核心功能之一,它确保了应用程序在云环境中的稳定运行,并...

    taskqueue:使用线程池并行完成任务的任务队列

    TaskQueue 是一个只有头文件的库,用于与使用 Boost 构建的并行执行任务。 如何使用它 要使用它,您需要做的就是将复制到您的源代码树并链接到 Boost 线程和 asio 库。 没有文档,只有一个工作示例,用于计算使用...

    TaskQueue, 在 Swift ( by Todorov ) 中,开发了一个任务队列类.zip

    TaskQueue, 在 Swift ( by Todorov ) 中,开发了一个任务队列类 TaskQueue 目录简介安装工具CocoaPodsCarthage简单示例同步任务异步任务串行和并发任务队列控制广泛的示例信用卡许可协议介绍 TaskQueue是一个

    TaskQueue.cc

    TaskQueue.cc

    SAE云计算技术落地实践.pdf

    SAE(Sina Application Engine)是新浪云推出的一种云计算服务,结合了IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务)三种模式,旨在为企业和个人开发者提供一站式的云端开发和运行环境。...

    企业级IT架构分享 云计算架构师成长之路 SAE落地过程中的经验分享 共24页.pdf

    SAE(Sina App Engine)是新浪推出的一款基于云计算的平台服务,它结合了IaaS、PaaS和SaaS的特点,为企业和个人开发者提供了高效、灵活的应用开发与部署环境。 #### 2. SAE的发展历程 - **2009年8月**:团队成立。 ...

    Python库 | gcloud_aio_taskqueue-1.2.10-py2.py3-none-any.whl

    `gcloud_aio_taskqueue-1.2.10-py2.py3-none-any.whl` 是一个Python库,主要用于处理异步任务队列。在这个压缩包中,包含的是已经打包好的 wheel 文件,这是一种预编译的Python软件包格式,可以直接安装到Python环境...

    Python库 | gcloud_taskqueue-0.0.8-py2.py3-none-any.whl

    在实际开发中,`gcloud_taskqueue` 可能会与 Google App Engine 或其他 Google Cloud Platform 服务结合使用,以实现高度可扩展和可靠的后台任务处理。对于大型项目,这样的异步任务处理能力是至关重要的,它可以...

    ws-taskqueue-server:Websocket服务器通信

    git clone https://github.com/burmisov/ws-taskqueue-server npm install npm start 服务器正在侦听端口8080或$PORT指定的$PORT 如果设置$DEBUG = "wstq:*" ,则可以在控制台中看到扩展的调试输出。 仪表盘 在...

    baidu-salon-20101218-conglei

    SinaAppEngine是新浪公司推出的一个云计算平台,旨在为开发者提供一个全面的、易于使用的云开发环境。SAE不仅提供了基础的云服务,如云存储、云数据库等,还包含了一系列高级特性,比如任务队列、定时任务、缓存服务...

    taskqueue-website:TaskQueue的网站

    TaskQueue网站 此回购中包含网站,文档和博客。 入门 即将推出... 古尔普 我们使用的是gulp 4.0的预发布版本,因此请按照以下步骤设置本地计算机: 1.全局安装gulp: $ npm install --global gulpjs/gulp.git#4.0 2...

    TaskQueue:多线程任务队列的超简单生产者-消费者实现

    您可以使用它,因为: 寻找一个轻量级且易于集成的多线程任务队列。 你没有 c++11 支持。 你想要跨平台。得到它git clone --recurse-submodules https://github.com/melode11/TaskQueue.git例子# include " ../src/...

    jblog:博客程序使用来自廖学锋的框架

    使用 的简易Web开发框架. Features: 添加了分类标签。 Markdown编辑器。 集成了Mathjax公式库。 Sae上传功能。 deploy on sae: Modify uyan review system's parameters which key name is review in config_default...

Global site tag (gtag.js) - Google Analytics