在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SENSORO 支撐百萬級傳感器的延時隊列

SENSORO升哲科技 ? 2022-08-26 11:44 ? 次閱讀

文/升哲科技劉鵬

摘要:本文主要描述升哲科技在打造物聯智慧城市平臺過程中關于如何實現延時隊列服務的技術選型經驗、延時隊列服務的架構設計以及延時隊列的底層細節實現原理。

背景

升哲科技是一家物聯網與人工智能領域的國家高新技術企業、獨角獸企業。

要打造物聯智慧城市平臺,在業務中涉及到各種延時任務的需求,例如設備定時空氣開關,定時更新設備狀態,定時提醒等等,基于這些需求,需要一個可靠、實時、海量的延時隊列服務作為基礎設施。

那么延時隊列是什么呢?延時隊列不同于消息隊列按照先入先出(FIFO)的順序來消費,而是根據消息指定時間延時消費。延時隊列的使用在我們日常應用也非常多,比如:

· 在電商平臺購物,在30分鐘內沒有支付自動取消訂單;

· 待處理的工單超過1天未處理,二次發送提醒。

以上場景往往都需要延時隊列實現。

早期延時隊列的實現采用了數據庫掃表方式,服務定期查詢到期的任務,再通過Kafka來中轉消息。當任務量小,延時精度要求低時掃表方式還能應對,然而隨著業務增長、任務數量不斷增多,延時時間精度要求也變高,掃表的方式已經無法滿足我們的業務,于是我們開始探索新的技術方案來支撐百萬級任務的延時隊列。

延時隊列的設計目標

1.高可用:多副本部署,保證服務不出現單點故障;

2.可擴展:可隨著業務量增長來擴容,同時生產消費的請求延時也要低;

3.兼容舊接口,保證舊的服務不需要做任何修改;

4.消息傳遞可靠,至少保證一次送達。

技術選型

在開源社區已經存在一些解決方案:

方案描述
BeanstalkdBeanstalkd C語言實現,我們團隊主要采用Golang和Java,二次開發有難度,beanstalkd不支持集群部署,高可用無法保證。
RabbitMQ延時隊列RabbitMQ提供了延時隊列插件,需要單獨開啟插件使用,其原理是通過死信隊列實現。

NSQ

NSQ開源延時隊列,NSQ支持延時隊列。

DelayQueue延時隊列

JDK中提供了一組實現延時隊列的API,位于Java.util.concurrent包下DelayQueue。

時間輪算法

時間輪是一個算法,在 Netty、Akka、Quartz、ZooKeeper、Kafka等組件中都有使用,適合做統一調度器。

Redis Sorted Set

Redis Sorted Set 利用它的score屬性,啟用一個線程輪詢,根據score獲取超時的數據,然后觸發超時操作。

考慮到運維難度和可擴展性,最終我們選擇了開源項目Lmstfy作為基礎來進行二次開發,選擇Lmstfy的原因如下:

● 無狀態服務,使用Redis來持久化,Redis的高可用方案已經非常成熟,在公/私有云都有Paas服務可使用;

● 支持擴容,可以配置多個Redis集群;

● 提供Java/Go/Rust/PHP客戶端,監控面板完善;

● 采用Golang開發,高并發性能優秀,也方便后續二次開發。

整體架構設計

1.Delayer:無狀態服務,提供給業務服務調用,兼容舊接口,在Delayer這一層直接操作Redis實現了任務刪除和更新任務等等功能;

2.Lmstfy:無狀態服務,提供延時隊列基礎服務,底層實現采用;

3.Redis Sentinel集群:保證Redis發生故障時自動主備切換。

pYYBAGMIPSWAadr5AAFsTrVOjrQ938.png

基礎概念

● namespace -用于隔離業務,也可以通過配置namespace綁定不同的Redis集群;

● queue -隊列,用區分同一業務不同消息類型;

● job -業務定義的業務,主要包含以下幾個屬性:

○ id:任務 ID,全局唯一;

○ delay:任務延時下發時間,單位是秒;

○ tries:任務最大重試次數,tries = N表示任務會最多下發 N次;

○ ttr(time to run):任務預期執行時間,超過 ttr則認為任務消費失敗,觸發任務自動重試。

數據存儲

Lmstfy的 Redis存儲由四部分組成:

● Timer:使用ZSET結構來存儲延時任務,Score即任務的到期時間來排序;

● Ready queue - 使用LIST結構,存儲已經到期的延時任務,實現FIFO消費;

● Deadletter-使用LIST結構,消費失敗(重試次數到達上限)的任務,可以手動重新放回到隊列;

● Job pool– string類型,存儲消息meta信息

● Job mapping - string -存儲應用自定義id和job的關聯關系。

創建任務

創建任務會生成一個Job ID, Job ID包括寫入時間戳、隨機數和延時時長,然后將任務的meta信息寫入Redis,Key為 j/{namespace}/queue/{id},當任務延時時間(delay)= 0,(實時消息隊列我們使用Kafka)表示不需要延時則直接寫到 Ready Queue(List),當延時時間(delay) = n(n > 0),表示需要延時,將延時加上當前系統時間作為絕對時間戳寫到 Timer(sorted set),Timer的實現是利用 ZSET根據絕對時間戳進行排序,再由一個goroutine定期輪詢將到期的任務通過 redis lua script來將數據轉移到 Ready Queue(List)中。

任務消費

支持延時的任務隊列本質上是兩個數據結構的結合: Ready Queue(LIST)和 Sorted Set。

Sorted Set用來實現延時的部分,將任務按照到期時間戳升序存儲,隨后定期將到期的任務遷移至 Ready Queue(LIST)。

任務的具體內容只會存儲一份在 Job pool里面,其他的如 Ready Queue只是存儲Job id,這樣可以節省內存空間。

任務更新和刪除

Lmstfy本身不支持刪除和更新,我們在Delayer層中在創建任務同時在Redis中創建了一個Mapping Key,客戶端可以自定一個ID關聯到Job id,Delayer提供了刪除和更新(先刪除再創建)API,我們業務還需要支持多次執行的功能,在處理Job Ack時根據任務參數重新插入隊列,結合我們二次開發整體結構如下:

pYYBAGMIPVCAa4BwAADfigE8rpw668.png

性能表現

通過本地限定1核CPU壓測生產消息數據如下:

200萬任務量占內存600MB+,其中包括mapping key導致key數量翻倍。

以下是單核CPU的環境下壓測結果,任務創建可高達1500TPS:

pYYBAGMIPXqARGSKAABKeHHOOaY266.png

延時任務到期時間比較分散的情況下,消費表現如下接800TPS:

poYBAGMIPYuAbM6lAABarCzSqO4714.png

總結

封裝lmstfy的方案已足夠支撐當前的使用場景,但還是有一些不足之處,比如:

● 在Delayer中操作Redis中的任務,無法保證原子性;

● 任務創建和消費另外會多一次網絡請求,產生不必要的開銷;

● 無法支持循環任務;

● Lmstfy采用HTTP協議,無法發揮更好性能。

未來,我們計劃融合兩個服務,完善任務CRUD功能,減少網絡開銷,并采用GRPC來替換HTTP協議通訊。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 大數據
    +關注

    關注

    64

    文章

    8908

    瀏覽量

    137801
  • 智慧城市
    +關注

    關注

    21

    文章

    4276

    瀏覽量

    97741
收藏 人收藏

    評論

    相關推薦

    干簧管傳感器屬于什么傳感器

    干簧管傳感器,又稱磁簧開關傳感器或磁敏開關,是一種基于干簧管(Reed Switch)原理工作的傳感器。作為一種重要的磁傳感器,干簧管傳感器
    的頭像 發表于 01-30 15:33 ?197次閱讀

    盤點五種最有前途的新興傳感器

    ? 傳感器技術作為物聯網、智能制造、智能交通等領域的關鍵支撐,正經歷著前所未有的變革。新興傳感器的不斷涌現,不僅拓寬了技術的應用范圍,也為各行各業帶來了革命性的改變。本文將深入探討五種最具前途的新興
    的頭像 發表于 12-03 17:32 ?413次閱讀

    納芯微發布兩款車規壓力傳感器新品

    近日,納芯微正式推出了兩款專為汽車排放管理設計的車規壓力傳感器產品。這兩款新品分別是NSPGL1系列集成式壓差傳感器和NSPAS5N系列耐腐蝕絕壓傳感器
    的頭像 發表于 10-30 18:15 ?645次閱讀

    霍爾傳感器測電壓會有延時

    霍爾傳感器的工作原理 霍爾傳感器通常由一個霍爾元件(如霍爾晶體管或霍爾集成電路)和一個磁場感應部分(如磁芯)組成。當磁場變化時,霍爾元件會產生一個與磁場強度成正比的電壓信號。這個信號可以被放大并轉換為數字信號,以便
    的頭像 發表于 10-15 10:04 ?434次閱讀

    怎么區分PNP傳感器和NPN傳感器

    PNP傳感器和NPN傳感器在工業自動化、電子控制等領域中扮演著重要角色,它們的主要區別在于電流方向、電壓輸出以及在電路中的接線方式。以下將從多個方面詳細闡述如何區分PNP傳感器和NPN傳感器
    的頭像 發表于 09-13 17:39 ?4437次閱讀

    車載傳感器主要有哪些傳感器

    車載傳感器是現代汽車中不可或缺的組成部分,它們為車輛提供關鍵信息,以確保駕駛安全、提高燃油效率、增強駕駛體驗和實現自動駕駛功能。車載傳感器的種類繁多,每種傳感器都有其特定的功能和應用場景。以下是一些
    的頭像 發表于 09-07 09:30 ?754次閱讀

    長光辰芯發布億像素CMOS圖像傳感器GMAX64104

    近日,長光辰芯科技有限公司正式發布了其最新研發的GMAX64104 CMOS圖像傳感器,這款傳感器以其前所未有的大靶面與億像素分辨率,在行業內引起了廣泛關注。GMAX64104不僅代表了當前圖像
    的頭像 發表于 09-05 16:30 ?617次閱讀

    用于開發傳感器模塊的磁傳感器

    電子發燒友網站提供《用于開發傳感器模塊的磁傳感器.pdf》資料免費下載
    發表于 08-29 11:13 ?3次下載
    用于開發<b class='flag-5'>傳感器</b>模塊的磁<b class='flag-5'>傳感器</b>

    TMP275-Q1汽車±0.75°C溫度傳感器數據表

    電子發燒友網站提供《TMP275-Q1汽車±0.75°C溫度傳感器數據表.pdf》資料免費下載
    發表于 08-15 10:32 ?0次下載
    TMP275-Q1汽車<b class='flag-5'>級</b>±0.75°C溫度<b class='flag-5'>傳感器</b>數據表

    壓力傳感器0.25,精度是怎么來的

    壓力傳感器是一種將壓力信號轉換為電信號的傳感器,廣泛應用于工業自動化、航空航天、醫療設備等領域。在這些領域中,對壓力傳感器的精度要求非常高,因此對壓力傳感器的精度進行深入研究具有重要意
    的頭像 發表于 06-19 09:49 ?2598次閱讀

    LEM萊姆汽車DHAB S/18霍爾電流傳感器介紹

    電子發燒友網站提供《LEM萊姆汽車DHAB S/18霍爾電流傳感器介紹.docx》資料免費下載
    發表于 06-17 13:17 ?2次下載

    深入解析:人體傳感器、存在傳感器與場景存在傳感器的差異與應用

    場景存在傳感器比存在傳感器探測更精細化,存在傳感器比人體傳感器探測精度更高。
    的頭像 發表于 05-22 11:05 ?2530次閱讀
    深入解析:人體<b class='flag-5'>傳感器</b>、存在<b class='flag-5'>傳感器</b>與場景存在<b class='flag-5'>傳感器</b>的差異與應用

    數字傳感器在橋梁健康監測中的應用

    ? 1.力傳感器:力傳感器可以通過測量橋梁結構的受力情況來評估橋梁的健康狀況。力傳感器可以安裝在橋梁的關鍵支撐部位,通過測量受力情況來判斷是否存在異常的壓力或應力。這些數據可以用于判斷
    的頭像 發表于 04-02 08:42 ?403次閱讀

    指紋傳感器的定義 指紋傳感器的應用

    指紋傳感器的定義 指紋傳感器的應用? 指紋傳感器是一種生物識別技術,通過檢測和分析人體指紋特征來驗證用戶身份。它基于指紋獨特性和穩定性的基本原理,通過測量和對比指紋圖案上的各種特征來識別用戶。指紋
    的頭像 發表于 03-05 17:35 ?3350次閱讀

    什么叫離子傳感器?離子傳感器的工作原理 離子傳感器的特性

    什么叫離子傳感器?離子傳感器的工作原理 離子傳感器的特性 離子傳感器是一種能夠檢測和測量離子濃度的傳感器。它們通常用于分析化學、環境監測和生
    的頭像 發表于 03-05 17:01 ?1611次閱讀
    主站蜘蛛池模板: 国产片在线观看狂喷潮bt天堂 | 丁香六月婷婷在线 | 日本免费人成在线网站 | 6月婷婷| 亚洲乱码卡一卡二卡三 | 国产精品永久免费 | 黄色网址你懂得 | 久久婷婷色一区二区三区 | 亚洲人成电影院 | 欧美在线黄色 | 夭天干天天做天天免费看 | 男人的天堂一区二区视频在线观看 | 国产精品bdsm在线调教 | 国产黄色小视频在线观看 | 婷婷五月色综合香五月 | 激情综合五月婷婷 | 国内精品视频免费观看 | 日本伊人网 | 四虎国产精品视频免费看 | 午夜手机看片 | 天天干天天碰 | 久久亚洲免费视频 | 天堂视频在线免费观看 | 天天射天天怕 | 李老汉和小花的性生生活 | 国产成人精品日本亚洲网站 | 看黄视频网站 | 天天爽夜爽免费精品视频 | 日本高清一本视频 | 狠狠色丁香婷婷综合视频 | 亚洲一二三四区 | 国产精品va在线观看不 | 丁香在线 | 夜夜爱网站 | 色噜噜亚洲精品中文字幕 | 六月婷婷啪啪 | 久久人人做人人玩人精品 | 欧美黄色片网站 | 婷婷深爱五月 | 亚洲最大的成人网 | 深爱婷婷 |