一个高性能、轻量级的分布式内存队列系统–beanstalk

一个高性能、轻量级的分布式内存队列系统–beanstalk

作者:佚名 2017-10-11 16:12:19

新闻

前端

分布式 Beanstalk是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格。

  Beanstalk是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格。其基本设计思想很简单:高性能离不开异步,异步离不开队列,而内部都是生产者-消费者模式的。

背景介绍:

  现在市面上有很多消息队列系统了。常用的有ActiveMQ, RabbitMQ,ZeroMA,Kafka,RocketMQ。Redis之父最近又开源了一个Disque。我之前在乐视用的是apache的qpid。但是之所以各个系统都在流行,还要看其侧重点。

  其中ActiveMQ可以称之为传统型,它们完全支持JMS和AMQP规范。

  JMS即Java消息服务(Java Message Service)应用程序接口。它是Java平台上有关面向消息中间件(Message Oriented Middleware,缩写为MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。(*我这里说了,JMS是应用程序接口,就是API,API就意味着是和编程语言绑定的)

  JMS的体系架构由JMS提供者、JMS客户、JMS生产者、JMS消费者、JMS消息、JMS队列、JMS主题组成。

  JMS对象模型包含:连接工厂、JMS连接、JMS会话、JMS目的、JMS生产者和消费者和JMS消息。其中大家最关心的是JMS消息的两种模型:点对点(point to point, queue)和发布/订阅(publish/subscribe, topic)。这两者之间的区别就是点对点模式是生产者发送一条消息到queue,一个queue可以有很多消费者,但是一个消息只能被一个消费者接收,当没有消费者可用时,这个消息会被保存直到有一个可用的消费者,所以queue实现了一个可靠的负载均衡。而发布订阅模式是发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到这个消息的拷贝。

  AMQP(高级消息队列协议),和JMS的区别在于:JMS只是java平台的方案,AMQP是一个跨语言的协议。由于跨语言的特点,降低了企业和系统集成的开销。所以现在的消息队列系统支持AMQP的多,支持JMS的少。

  AMQP的特征是面向消息,队列化,消息模型(和JMS一样:点对点和发布订阅),可靠性和安全性。它提供了三种消息传递保证方式:最多一次,至少一次和精确一次。  

  我们经常在使用消息队列的时候提到的broker是对实现了AMQP协议的服务端的称呼。其基本结构如下图。

 Beanstalk介绍:

  那下面开始说beanstalk了。首先说beanstalk其实并不是JMS规范的,也并不严格遵守AMQP协议。有人说Beanstalk之于RabbitMQ,就好比Nginx之于Apache。它更简单,轻量级,高性能,易使用。但是相比kafka,数据处理能力还是有差距,所以我们现在其实在逐渐替代它。但它有些很易用的特殊功能,后面会讲到。

  Beanstalk主要包括4个部分。

  1> job:一个需要异步处理的任务,需要放在一个tube中。

  2> tube:一个有名的任务队列,用来存储统一类型的job,是producer和consumer操作的对象。

  3> producer:job的生产者,通过put命令来将一个job放到一个tube中。

  4> consumer:job的消费者,通过reserve、release、bury、delete命令来获取job或改变job的状态。

  刚才说Beanstalk有一些特殊的好用功能。那就是它支持任务优先级(priority)、延时(delay)、超时重发(time-to-run)和预留(buried),能够很好的支持分布式的后台任务和定时任务处理。这些特性是和beanstalk工作过程密切相关。

  Beanstalk的一个job的生命周期有READY、RESERVED、DELAYED、BURIED四种。

  当producer直接put一个job时,job就是READY状态,等待consumer来处理。如果选择延迟put,job就先到DELAYED状态,到指定时间再READY。consumer获取了READY的job,此状态就为RESERVED。这样其他consumer不能再操作此job。当consumer完成该job后,可以选择delete、release或者bury。

  delete之后,job不能再获取。release的job可以重新迁移或延迟迁移回READY。bury的job可以被休眠,需要的时候再READY或者delete掉。

Beanstalk使用场景:

  用作延时队列:比如可以用于如果用户30分钟内不操作,任务关闭。

  用作循环队列:用release命令可以循环执行任务,比如可以做负载均衡任务分发。

  用作兜底机制:比如一个请求有失败的概率,可以用Beanstalk不断重试,设定超时时间,时间内尝试到成功为止。

  用作定时任务:比如可以用于专门的后台任务。

  用作异步操作:这是所有消息队列都最常用的,先将任务仍进去,顺序执行。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/275164.html<

(0)
管理的头像管理
上一篇2025-05-10 01:54
下一篇 2025-05-10 01:55

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注