一個高性能、輕量級的分散式記憶體隊列系統--beanstalk

来源:http://www.cnblogs.com/xiexj/archive/2017/10/11/7644999.html
-Advertisement-
Play Games

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不斷重試,設定超時時間,時間內嘗試到成功為止。

  用作定時任務:比如可以用於專門的後臺任務。

  用作非同步操作:這是所有消息隊列都最常用的,先將任務仍進去,順序執行。

 

跑題時間:

  平時其實不愛聊閑天。但是和我家男神一起,就會有如下場景:我們去青島旅游,火車站上上電梯,我們各走一邊,然後相遇了。“咱倆太有緣分了,又遇到你了。”“你去哪裡啊,這麼巧,我也去。”“你家住哪裡啊,這麼巧,我也是。”……額,頓時覺得我們是最有緣分和最無聊的人,卻樂此不疲。

  還有更二的:

 

  

  除了胖到170斤那幾年,新到一個公司,總會有很多搭訕的,大家都特別熱情。直到我驕傲的介紹我家男神和小鮮肉。額~~,整個世界都清凈了~~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織, 在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。M是指業務模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現代碼分離, 從 ...
  • A代碼編輯器,線上模版編輯,仿開發工具編輯器,pdf線上預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿 ...
  • 本文會對可能用到的相關技術進行技術選型的說明,以及技術的架構介紹 ...
  • 寫在前面: 第一次配置時好好的,後來第二次改到MVC模式,把依賴註入寫成字典的單例模式時,由於新建的ORM(資料庫映射模型EF),怎麼弄都不用,一直報錯"No connection string named '**Context' could be found in the application ...
  • 什麼是享元模式? 所謂享元模式就是運行共用技術有效地支持大量細粒度對象的復用。系統使用少量對象,而且這些都比較相似,狀態變化小,可以實現對象的多次復用。共用模式是支持大量細粒度對象的復用,所以享元模式要求能夠共用的對象必須是細粒度對象。兩個重要的概念:內部狀態、外部狀態。 內部狀態:在享元對象內部不 ...
  • 首先看一張訪問TT貓首頁的截圖: 測試環境為谷歌瀏覽器,暫且不討論其它瀏覽器,截圖下方我們可以觀察到以下參數: DOMContentLoaded:1.42s | Load:2.31s 以上參數是在CTRL+F5下測試的,也就是說不存在瀏覽器本地緩存一說,DOM渲染時間為1.42s,整個頁面load時 ...
  • 一、概念 將一個複雜對像的構建與它的表示分離,使得同樣的構建過程創建不同的表示,又叫建造模式。 生成器模式的重心在於分離構建演算法和具體的構造實現,從而使得構建演算法可以重用。採用不同的構建實現,產生不同的產品。所以生成器模式都會存在以下兩個部分: a.整體構建演算法 b.部件的構造和產品的裝配 二、模式 ...
  • 前言:並行審批是比較常見的流程模式,在工作流模式介紹中,通常是多個分支通過網關(Gateway)來控制實現。預設的分支類型是靜態定義好的。本文擴展了並行網關的控制方式,實現了動態多實例的並行分支網關,便於用戶業務流程的審批過程實現。 1. 業務過程描述 並行評審需求是在多個部門同時發生,此時會有多個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...