`
如若_晴
  • 浏览: 108449 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

beanstalkd学习笔记

阅读更多
原文转自:http://liaofeng-xiao.iteye.com/blog/1990577
最直接的学习Beanstalkd的方式就是读官方协议文档:
https://raw.github.com/kr/beanstalkd/master/doc/protocol.txt

beanstalkd是一个快速的、通用目的的work queue。协议简单,是个轻量级的消息中间件。

“(Beanstalkd) is a simple, fast workqueue service. Its interface is generic, but was originally designed for reducing the latency of page views in high-volume web applications by running time-consuming tasks asynchronously.”

beanstalkd的最初设计意图是在高并发的网络请求下,通过异步执行耗时较多的请求,及时返回结果,减少请求的响应延迟。

使用场景:

   * long running task
   * intensive task


examples:

   * send email
   * processing image/video

advantages:
  1. asynchronous/unblock
  2. scales easy: run more workers. workers can be distributed across a number of machines
  3. call functions written in other languages



How it works:

   * Queues: Acts as a job buffer between producer and worker
   * Daemon: when job is released to a worker
   * Producer: create the job and put it to the queue
   * Worker: get a job from the queue, and deal with it

Comparison:

  1. Queueing with a database: not so well suited, especially with high transactions, it costs locking to ensure only on worker can get a job.
  2. ActiveMQ
  3. RabbitMQ: written in Erlang, brought by VMVare
  4. Amazon SQS
  5. Gearman, by livejournal
  6. ZeroMQ
  7. Sparrow

Killer Features:
   * tube
   * priority
   * delays
   * TTR


它支持优先级队列(priority queue)、延迟(delay)、超时重发(time-to-run)和预留(buried),能够很好的支持分布式的后台任务和定时任务处理。
它的内部采用libevent,服务器-客户端之间采用类似Memcached的轻量级通讯协议,因此性能很高(enque: 9000 jobs/second, worker: 5200 jobs/second)
尽管是内存队列,beanstalkd提供了binlog机制,当重启beanstalkd,当前任务的状态能够从记录的本地binlog中恢复。


tube(管道):
类似于topic,一个Beanstalkd可以支持多个tube,每个tube有自己的producer/worker,tube之间相互不影响。一个job的生命周期永远都会在同一个tube中。


job优先级:job可以有0~2^32个优先级,0代表最高优先级,小于1024的优先级beanstalkd认为是urgent。beanstalkd使用最大最小堆来实现优先级排序,任何时刻调用reserve命令,拿到的都是优先级最高的job,时间复杂度是O(longn)。


delay job: 两种方式可以实现delay:

   * put with delay
   * release with delay

但是,什么情况下使用delay job?


任务超时重发:time-to-run
如果一个client/worker/consumer获取到job之后,在ttr时间内没有处理完,即,没有通过delete/release/bury改变任务的reserve状态,beanstalkd认为消息处理失败。如果worker在预计在ttr时间内不能处理完job,可以发送touch命令,让beanstalkd从现在开始重新计算ttr。


buried(预留任务):
如果job因为某些原因暂时无法执行,worker可以先把job置为buried状态。buried状态的job不能被任何worker reserve。管理员可以通过peek buried查看有多少预留job,进行人工干预。kick <n>可以一次线的把n条buried job踢回到ready状态。




beanstalkd协议:
Beanstalkd采用类似Memcached的文本协议,客户端和服务器通信通过文本进行。这些通信的命令可以总结为以下三类:


  1. producer
a. use <tube>
b. put <priority> <delay> <ttr> [bytes]
  2. worker
a. watch <tube>
b. reserve: it will block if no job is ready. or reserve-with-timeout, set timeout to 0, beanstalkd will return a job immediately, or none.
c. delete <id>
d. release <id> <priority> <delay>
e. bury <id>
f. touch <id>

  3. maintainer
a. peek job
b. peek delayed
c. peek ready
d. peek buried
e. kick <n>



状态转换图:

put with delay               release with delay
  ----------------> [DELAYED] <------------.
                        |                   |
                 kick   | (time passes)     |
                        |                   |
   put                  v     reserve       |       delete
  -----------------> [READY] ---------> [RESERVED] --------> *poof*
                       ^  ^                |  |
                       |   \  release      |  |
                       |    `-------------'   |
                       |                      |
                       | kick                 |
                       |                      |
                       |       bury           |
                    [BURIED] <---------------'
                       |
                       |  delete
                        `--------> *poof*


Beanstalkd不足:
1. 没有提供主从同步+故障切换机制,在应用中有可能成为单点的风险。在实际应用中,可以使用数据库为job提供持久化存储。


2. 和Memcached类似,Beanstalkd依赖libevent单线程事件分发机制,不能有效的利用多核cpu的性能。这一点可以通过单机部署多个实例客服。


本地体验:


  1. 运行beanstalkd:beanstalkd

  2. telnet localhost 11300
连上后可以发送各种命令:stats


Questions:


  1. if a job runs out TTR, the worker will stop processing the job? or two workers may be working on the same job.
definitely is.
  2. how to experience Beanstalkd conviently in local, for example, three terminals: producer/worker/maintainer
use telnet please(use `quit` to quit terminal), or use beanstalkc client.

producer:
telnet localhost 11300
stats-tube default
use today
put 1000 0 10 11
hello world

worker:
telnet localhost 11300
watch today
ignore default
reserve( or reserve-with-timeout 0)
bury 1000 <id>
kick <number>
delete <id>

maintainer:
stats-tube today
peek <id>
stats-job <id>
peek-ready [如果返回not-found,说明该tube还没有ready的job(使用use切换tube)
peek-delayed
job-stats <id>
kick <number>


Refers:


  1. Protocol: https://raw.github.com/kr/beanstalkd/master/doc/protocol.txt, or https://github.com/kr/beanstalkd/blob/master/doc/protocol.md
  2. PPT: http://alister.github.io/presentations/Beanstalkd/
  3. http://nubyonrails.com/articles/about-this-blog-beanstalk-messaging-queue




Beanstalkc:
https://github.com/earl/beanstalkc/

Beanstalkc is a simple beanstalkd client librayr for Python. beanstalkd is a fast, in-memory workqueue service.
Beanstalkc depends on PyYAML, but there are ways to avoid this dependency.
Beanstalkc is pure python, and is compatible with eventlet and gevent.

Usage:
import beanstalkc
beanstalkd = beanstalkc.Connection(host="localhost", port="11300")
job = beanstalkd.reserve()
print job.body
....
job.delete()

Reference: https://github.com/earl/beanstalkc/blob/master/beanstalkc.py
tutorial: http://beanstalkc.readthedocs.org/en/latest/tutorial.html

beanstalkc好简单,只有Connection和Job两个类。
分享到:
评论

相关推荐

    高分项目 基于STM32F103单片机的无线测距系统源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32F103单片机的无线测距系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32F103单片机的无线测距系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32F103单片机的无线测距系统源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    java八股文介绍00002

    java八股文,"Java八股文"通常指的是在面试Java开发者时经常被问到的一系列标准问题,这些问题往往是技术面试中的基础部分,用来评估应聘者对Java编程语言和Java虚拟机(JVM)的理解程度。这些问题的答案往往模式化,因此被称为“八股文”。虽然这个词汇带有一定的贬义,但是这些问题却是面试中不可或缺的一部分,因为它们能够快速地检验应聘者的基本技能和理论知识。

    东北大学本科毕业设计 论文latex模板 2019

    东北大学本科毕业设计 论文latex模板 2019 关于东北大学本科毕业设计论文的LaTeX模板,您可以参考以下两个资源: 1. **Acytoo/neu_bachelor_thesis_template**: 这个模板是修改自一位学长的模板,以适应东北大学最新的要求。它使用GBT7714-2005参考文献标准,并提供了详细的安装和使用说明。您需要使用xelatex进行编译,并可能需要手动安装参考文献的标准。此外,如果您使用的是VSCode编辑器,可以参考提供的VSCode配置。 2. **tzaiyang/NEUBachelorThesis**: 这个模板同样适用于东北大学本科生毕业论文。它提供了详细的VSCode配置,包括快捷键设置和texcount bug修复(仅限Windows用户)。此外,还提供了如何插入公式、图片和三线表的说明,以及如何引用参考文献的方法。 您可以根据自己的需求和喜好选择其中一个模板。如果您对LaTeX不熟悉,建议先学习一些基础知识,以便更好地使用这些模板。祝您毕业设计顺利!

    node-v7.2.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    串口通讯原理+硬件原理解释+软件配置

    STM32串口通信大纲---适用于初学者 I. 引言 学习背景与串口通信的重要性 简述本文目的与主要内容 II. STM32里的串口通信 基本概念与功能介绍 USART及STM32内置串口 全双工通信与异步时钟控制 接收/发送逻辑结构 III. 串口配置 选择合适的串口资源(USART1/2/3) 参数设置:波特率、位数、校验、停止位 GPIO配置:TX/RX引脚驱动方式 IV. 串口发送与接收 发送数据流程 设置TDR与发送移位寄存器 检测TXE标志位 数据移位与持续发送 接收数据流程 配置RX输入模式 读取RDR与RXNE标志 字节数据接收 V. 实现方式 不使用中断的简单示例 利用中断接收数据 查询中断状态 中断服务程序处理数据

    基于opencv和深度学习的手写计算器.zip

    基于opencv和深度学习的手写计算器.zip

    高分项目 基于STM32单片机和Android的智能蓝牙点餐系统源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32单片机和Android的智能蓝牙点餐系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机和Android的智能蓝牙点餐系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机和Android的智能蓝牙点餐系统源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    高分项目 基于STM32单片机的桌面电磁力时钟摆设计源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32单片机的桌面电磁力时钟摆设计源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的桌面电磁力时钟摆设计源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的桌面电磁力时钟摆设计源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    node-v7.9.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于深度学习的手写数字识别.zip

    基于深度学习的手写数字识别.zip

    Parameter-Free Fast Pixelwise Non-Local Means Denoising

    这篇文章的核心内容是关于一种图像去噪算法——非局部均值(Non-Local Means, NLM)算法的快速且开源的实现。以下是文章的主要要点: 算法介绍:文章提出了一种快速且无参数的NLM算法实现,该算法用于去除图像中的噪声。NLM算法由Antoni Buades, Bartomeu Coll和Jean-Michel Morel在2005年引入,因其简单性、出色的视觉效果以及利用自然图像的非局部冗余性而受到广泛欢迎。 算法改进:文章基于线之和的计算来计算块距离,这些线在块移位下是不变的。通过从一个图像数据库中计算NLM的最佳参数(以平均峰值信噪比PSNR为标准),实现了一个无需参数调整的NLM算法。

    Hypack 2016、Hypack 2021、Hypack 2022、Hypack 2024 完整中文资源

    Hypack 2016、Hypack 2021、Hypack 2022、Hypack 2024 四个版本的完整中文资源,全部完成汉化,汉化完整错误少,全网汉化第一,替换相应版本的资源文件即可。 压缩包含资源文件lngEdit.db和汉化了的lngEdit.exe程序(命名为lngEditChs.exe)

    selenium 库和浏览器驱动的安装.rar

    selenium 库和浏览器驱动的安装.rar

    预警系统链性态网体系化作战矩阵.txt

    预警系统链性态网体系化作战矩阵.txt

    基于深度学习的普通话语音识别.zip

    基于深度学习的普通话语音识别.zip

    node-v7.1.0-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    com.smile.gifmaker.apk

    com.smile.gifmaker.apk

    改进模拟退火算法模型中英文版.vsdx

    模拟退火算法(Simulated Annealing,SA)是一种基于概率的算法,其灵感来源于固体退火原理。模拟退火算法最早由N. Metropolis等人在1953年提出,随后在1983年由S. Kirkpatrick等人成功地将退火思想引入到组合优化领域。该算法基于物理中固体物质的退火过程与一般组合优化问题之间的相似性,通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而有效避免陷入局部极小并最终趋于全局最优。 模拟退火算法的基本思想是从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解。算法的主要步骤如下: 初始化:设置初始温度T(充分大)、初始解状态S(算法迭代的起点)以及每个T值的迭代次数L。 对k=1,...,L进行以下操作: 产生新解S':通过对当前解进行变换(如互换、置换等)产生新解。 计算增量ΔT=C(S')-C(S),其中C(S)为评价函数。 判断新解是否接受:若ΔT<0,则接受S'作为新的当前解;否则以概率exp(-ΔT/T)接受S'作为新的当前解。 如果满足终止条件(如连续若干个新解都没有被接受),则输出当前解

    2023年广西中小学生程序设计挑战赛初赛(入门组)试题及答案.pdf

    2023年广西中小学生程序设计挑战赛初赛(入门组)试题及答案.pdf

    基于深度学习的近红外光谱数据回归分析模型.zip

    基于深度学习的近红外光谱数据回归分析模型.zip

Global site tag (gtag.js) - Google Analytics