自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個高性能、輕量級的分布式內(nèi)存隊列系統(tǒng)--beanstalk

新聞 前端 分布式
Beanstalk是一個高性能、輕量級的、分布式的、內(nèi)存型的消息隊列系統(tǒng)。最初設(shè)計的目的是想通過后臺異步執(zhí)行耗時的任務(wù)來降低高容量Web應(yīng)用系統(tǒng)的頁面訪問延遲。其實Beanstalkd是典型的類Memcached設(shè)計,協(xié)議和使用方式都是同樣的風(fēng)格。

  Beanstalk是一個高性能、輕量級的、分布式的、內(nèi)存型的消息隊列系統(tǒng)。最初設(shè)計的目的是想通過后臺異步執(zhí)行耗時的任務(wù)來降低高容量Web應(yīng)用系統(tǒng)的頁面訪問延遲。其實Beanstalkd是典型的類Memcached設(shè)計,協(xié)議和使用方式都是同樣的風(fēng)格。其基本設(shè)計思想很簡單:高性能離不開異步,異步離不開隊列,而內(nèi)部都是生產(chǎn)者-消費者模式的。

背景介紹:

  現(xiàn)在市面上有很多消息隊列系統(tǒng)了。常用的有ActiveMQ, RabbitMQ,ZeroMA,Kafka,RocketMQ。Redis之父最近又開源了一個Disque。我之前在樂視用的是apache的qpid。但是之所以各個系統(tǒng)都在流行,還要看其側(cè)重點。

  其中ActiveMQ可以稱之為傳統(tǒng)型,它們完全支持JMS和AMQP規(guī)范。

  JMS即Java消息服務(wù)(Java Message Service)應(yīng)用程序接口。它是Java平臺上有關(guān)面向消息中間件(Message Oriented Middleware,縮寫為MOM)的技術(shù)規(guī)范,它便于消息系統(tǒng)中的Java應(yīng)用程序進行消息交換,并且通過提供標準的產(chǎn)生、發(fā)送、接收消息的接口簡化企業(yè)應(yīng)用的開發(fā)。(*我這里說了,JMS是應(yīng)用程序接口,就是API,API就意味著是和編程語言綁定的)

  JMS的體系架構(gòu)由JMS提供者、JMS客戶、JMS生產(chǎn)者、JMS消費者、JMS消息、JMS隊列、JMS主題組成。

  JMS對象模型包含:連接工廠、JMS連接、JMS會話、JMS目的、JMS生產(chǎn)者和消費者和JMS消息。其中大家最關(guān)心的是JMS消息的兩種模型:點對點(point to point, queue)和發(fā)布/訂閱(publish/subscribe, topic)。這兩者之間的區(qū)別就是點對點模式是生產(chǎn)者發(fā)送一條消息到queue,一個queue可以有很多消費者,但是一個消息只能被一個消費者接收,當沒有消費者可用時,這個消息會被保存直到有一個可用的消費者,所以queue實現(xiàn)了一個可靠的負載均衡。而發(fā)布訂閱模式是發(fā)布者發(fā)送到topic的消息,只有訂閱了topic的訂閱者才會收到消息。topic實現(xiàn)了發(fā)布和訂閱,當你發(fā)布一個消息,所有訂閱這個topic的服務(wù)都能得到這個消息,所以從1到N個訂閱者都能得到這個消息的拷貝。

  AMQP(高級消息隊列協(xié)議),和JMS的區(qū)別在于:JMS只是java平臺的方案,AMQP是一個跨語言的協(xié)議。由于跨語言的特點,降低了企業(yè)和系統(tǒng)集成的開銷。所以現(xiàn)在的消息隊列系統(tǒng)支持AMQP的多,支持JMS的少。

  AMQP的特征是面向消息,隊列化,消息模型(和JMS一樣:點對點和發(fā)布訂閱),可靠性和安全性。它提供了三種消息傳遞保證方式:最多一次,至少一次和精確一次?! ?/p>

  我們經(jīng)常在使用消息隊列的時候提到的broker是對實現(xiàn)了AMQP協(xié)議的服務(wù)端的稱呼。其基本結(jié)構(gòu)如下圖。

 Beanstalk介紹:

  那下面開始說beanstalk了。首先說beanstalk其實并不是JMS規(guī)范的,也并不嚴格遵守AMQP協(xié)議。有人說Beanstalk之于RabbitMQ,就好比Nginx之于Apache。它更簡單,輕量級,高性能,易使用。但是相比kafka,數(shù)據(jù)處理能力還是有差距,所以我們現(xiàn)在其實在逐漸替代它。但它有些很易用的特殊功能,后面會講到。

  Beanstalk主要包括4個部分。

  1> job:一個需要異步處理的任務(wù),需要放在一個tube中。

  2> tube:一個有名的任務(wù)隊列,用來存儲統(tǒng)一類型的job,是producer和consumer操作的對象。

  3> producer:job的生產(chǎn)者,通過put命令來將一個job放到一個tube中。

  4> consumer:job的消費者,通過reserve、release、bury、delete命令來獲取job或改變job的狀態(tài)。

  剛才說Beanstalk有一些特殊的好用功能。那就是它支持任務(wù)優(yōu)先級(priority)、延時(delay)、超時重發(fā)(time-to-run)和預(yù)留(buried),能夠很好的支持分布式的后臺任務(wù)和定時任務(wù)處理。這些特性是和beanstalk工作過程密切相關(guān)。

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

  當producer直接put一個job時,job就是READY狀態(tài),等待consumer來處理。如果選擇延遲put,job就先到DELAYED狀態(tài),到指定時間再READY。consumer獲取了READY的job,此狀態(tài)就為RESERVED。這樣其他consumer不能再操作此job。當consumer完成該job后,可以選擇delete、release或者bury。

  delete之后,job不能再獲取。release的job可以重新遷移或延遲遷移回READY。bury的job可以被休眠,需要的時候再READY或者delete掉。

Beanstalk使用場景:

  用作延時隊列:比如可以用于如果用戶30分鐘內(nèi)不操作,任務(wù)關(guān)閉。

  用作循環(huán)隊列:用release命令可以循環(huán)執(zhí)行任務(wù),比如可以做負載均衡任務(wù)分發(fā)。

  用作兜底機制:比如一個請求有失敗的概率,可以用Beanstalk不斷重試,設(shè)定超時時間,時間內(nèi)嘗試到成功為止。

  用作定時任務(wù):比如可以用于專門的后臺任務(wù)。

  用作異步操作:這是所有消息隊列都最常用的,先將任務(wù)仍進去,順序執(zhí)行。

責任編輯:張燕妮 來源: 博客園
相關(guān)推薦

2011-09-14 10:08:07

Beanstalkd

2021-10-27 11:29:32

框架Web開發(fā)

2021-04-14 13:32:50

Redis輕量級分布式

2015-06-17 14:10:34

Redis分布式系統(tǒng)協(xié)調(diào)

2021-06-24 10:27:48

分布式架構(gòu)系統(tǒng)

2021-06-25 10:45:43

Netty 分布式框架 IO 框架

2024-04-29 08:42:23

2013-09-11 16:02:00

Spark分布式計算系統(tǒng)

2021-07-06 10:35:46

分布式KafkaLinux

2018-07-02 08:25:14

2019-12-13 19:00:26

PekwmLinux桌面

2023-12-18 10:24:59

2016-09-30 10:13:07

分布式爬蟲系統(tǒng)

2022-06-06 22:23:26

Tina工具Markdown

2014-03-12 10:42:10

equeue分布式消息隊列

2020-07-08 11:59:52

分布式系統(tǒng)緩存

2022-06-30 08:04:16

Redis分布式鎖Redisson

2012-12-28 17:31:06

2020-07-30 09:35:09

Redis分布式鎖數(shù)據(jù)庫

2019-10-08 14:22:43

分布式HDFS算法
點贊
收藏

51CTO技術(shù)棧公眾號