chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SENSORO 支撐百萬(wàn)級(jí)傳感器的延時(shí)隊(duì)列

SENSORO升哲科技 ? 2022-08-26 11:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

文/升哲科技劉鵬

摘要:本文主要描述升哲科技在打造物聯(lián)智慧城市平臺(tái)過(guò)程中關(guān)于如何實(shí)現(xiàn)延時(shí)隊(duì)列服務(wù)的技術(shù)選型經(jīng)驗(yàn)、延時(shí)隊(duì)列服務(wù)的架構(gòu)設(shè)計(jì)以及延時(shí)隊(duì)列的底層細(xì)節(jié)實(shí)現(xiàn)原理。

背景

升哲科技是一家物聯(lián)網(wǎng)與人工智能領(lǐng)域的國(guó)家高新技術(shù)企業(yè)、獨(dú)角獸企業(yè)。

要打造物聯(lián)智慧城市平臺(tái),在業(yè)務(wù)中涉及到各種延時(shí)任務(wù)的需求,例如設(shè)備定時(shí)空氣開(kāi)關(guān),定時(shí)更新設(shè)備狀態(tài),定時(shí)提醒等等,基于這些需求,需要一個(gè)可靠、實(shí)時(shí)、海量的延時(shí)隊(duì)列服務(wù)作為基礎(chǔ)設(shè)施。

那么延時(shí)隊(duì)列是什么呢?延時(shí)隊(duì)列不同于消息隊(duì)列按照先入先出(FIFO)的順序來(lái)消費(fèi),而是根據(jù)消息指定時(shí)間延時(shí)消費(fèi)。延時(shí)隊(duì)列的使用在我們?nèi)粘?yīng)用也非常多,比如:

· 在電商平臺(tái)購(gòu)物,在30分鐘內(nèi)沒(méi)有支付自動(dòng)取消訂單;

· 待處理的工單超過(guò)1天未處理,二次發(fā)送提醒。

以上場(chǎng)景往往都需要延時(shí)隊(duì)列實(shí)現(xiàn)。

早期延時(shí)隊(duì)列的實(shí)現(xiàn)采用了數(shù)據(jù)庫(kù)掃表方式,服務(wù)定期查詢(xún)到期的任務(wù),再通過(guò)Kafka來(lái)中轉(zhuǎn)消息。當(dāng)任務(wù)量小,延時(shí)精度要求低時(shí)掃表方式還能應(yīng)對(duì),然而隨著業(yè)務(wù)增長(zhǎng)、任務(wù)數(shù)量不斷增多,延時(shí)時(shí)間精度要求也變高,掃表的方式已經(jīng)無(wú)法滿(mǎn)足我們的業(yè)務(wù),于是我們開(kāi)始探索新的技術(shù)方案來(lái)支撐百萬(wàn)級(jí)任務(wù)的延時(shí)隊(duì)列。

延時(shí)隊(duì)列的設(shè)計(jì)目標(biāo)

1.高可用:多副本部署,保證服務(wù)不出現(xiàn)單點(diǎn)故障;

2.可擴(kuò)展:可隨著業(yè)務(wù)量增長(zhǎng)來(lái)擴(kuò)容,同時(shí)生產(chǎn)消費(fèi)的請(qǐng)求延時(shí)也要低;

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

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

技術(shù)選型

在開(kāi)源社區(qū)已經(jīng)存在一些解決方案:

方案描述
BeanstalkdBeanstalkd C語(yǔ)言實(shí)現(xiàn),我們團(tuán)隊(duì)主要采用Golang和Java,二次開(kāi)發(fā)有難度,beanstalkd不支持集群部署,高可用無(wú)法保證。
RabbitMQ延時(shí)隊(duì)列RabbitMQ提供了延時(shí)隊(duì)列插件,需要單獨(dú)開(kāi)啟插件使用,其原理是通過(guò)死信隊(duì)列實(shí)現(xiàn)。

NSQ

NSQ開(kāi)源延時(shí)隊(duì)列,NSQ支持延時(shí)隊(duì)列。

DelayQueue延時(shí)隊(duì)列

JDK中提供了一組實(shí)現(xiàn)延時(shí)隊(duì)列的API,位于Java.util.concurrent包下DelayQueue。

時(shí)間輪算法

時(shí)間輪是一個(gè)算法,在 Netty、Akka、Quartz、ZooKeeper、Kafka等組件中都有使用,適合做統(tǒng)一調(diào)度器。

Redis Sorted Set

Redis Sorted Set 利用它的score屬性,啟用一個(gè)線程輪詢(xún),根據(jù)score獲取超時(shí)的數(shù)據(jù),然后觸發(fā)超時(shí)操作。

考慮到運(yùn)維難度和可擴(kuò)展性,最終我們選擇了開(kāi)源項(xiàng)目Lmstfy作為基礎(chǔ)來(lái)進(jìn)行二次開(kāi)發(fā),選擇Lmstfy的原因如下:

● 無(wú)狀態(tài)服務(wù),使用Redis來(lái)持久化,Redis的高可用方案已經(jīng)非常成熟,在公/私有云都有Paas服務(wù)可使用;

● 支持?jǐn)U容,可以配置多個(gè)Redis集群;

● 提供Java/Go/Rust/PHP客戶(hù)端,監(jiān)控面板完善;

● 采用Golang開(kāi)發(fā),高并發(fā)性能優(yōu)秀,也方便后續(xù)二次開(kāi)發(fā)。

整體架構(gòu)設(shè)計(jì)

1.Delayer:無(wú)狀態(tài)服務(wù),提供給業(yè)務(wù)服務(wù)調(diào)用,兼容舊接口,在Delayer這一層直接操作Redis實(shí)現(xiàn)了任務(wù)刪除和更新任務(wù)等等功能;

2.Lmstfy:無(wú)狀態(tài)服務(wù),提供延時(shí)隊(duì)列基礎(chǔ)服務(wù),底層實(shí)現(xiàn)采用;

3.Redis Sentinel集群:保證Redis發(fā)生故障時(shí)自動(dòng)主備切換。

pYYBAGMIPSWAadr5AAFsTrVOjrQ938.png

基礎(chǔ)概念

● namespace -用于隔離業(yè)務(wù),也可以通過(guò)配置namespace綁定不同的Redis集群;

● queue -隊(duì)列,用區(qū)分同一業(yè)務(wù)不同消息類(lèi)型;

● job -業(yè)務(wù)定義的業(yè)務(wù),主要包含以下幾個(gè)屬性:

○ id:任務(wù) ID,全局唯一;

○ delay:任務(wù)延時(shí)下發(fā)時(shí)間,單位是秒;

○ tries:任務(wù)最大重試次數(shù),tries = N表示任務(wù)會(huì)最多下發(fā) N次;

○ ttr(time to run):任務(wù)預(yù)期執(zhí)行時(shí)間,超過(guò) ttr則認(rèn)為任務(wù)消費(fèi)失敗,觸發(fā)任務(wù)自動(dòng)重試。

數(shù)據(jù)存儲(chǔ)

Lmstfy的 Redis存儲(chǔ)由四部分組成:

● Timer:使用ZSET結(jié)構(gòu)來(lái)存儲(chǔ)延時(shí)任務(wù),Score即任務(wù)的到期時(shí)間來(lái)排序;

● Ready queue - 使用LIST結(jié)構(gòu),存儲(chǔ)已經(jīng)到期的延時(shí)任務(wù),實(shí)現(xiàn)FIFO消費(fèi);

● Deadletter-使用LIST結(jié)構(gòu),消費(fèi)失敗(重試次數(shù)到達(dá)上限)的任務(wù),可以手動(dòng)重新放回到隊(duì)列;

● Job pool– string類(lèi)型,存儲(chǔ)消息meta信息;

● Job mapping - string -存儲(chǔ)應(yīng)用自定義id和job的關(guān)聯(lián)關(guān)系。

創(chuàng)建任務(wù)

創(chuàng)建任務(wù)會(huì)生成一個(gè)Job ID, Job ID包括寫(xiě)入時(shí)間戳、隨機(jī)數(shù)和延時(shí)時(shí)長(zhǎng),然后將任務(wù)的meta信息寫(xiě)入Redis,Key為 j/{namespace}/queue/{id},當(dāng)任務(wù)延時(shí)時(shí)間(delay)= 0,(實(shí)時(shí)消息隊(duì)列我們使用Kafka)表示不需要延時(shí)則直接寫(xiě)到 Ready Queue(List),當(dāng)延時(shí)時(shí)間(delay) = n(n > 0),表示需要延時(shí),將延時(shí)加上當(dāng)前系統(tǒng)時(shí)間作為絕對(duì)時(shí)間戳寫(xiě)到 Timer(sorted set),Timer的實(shí)現(xiàn)是利用 ZSET根據(jù)絕對(duì)時(shí)間戳進(jìn)行排序,再由一個(gè)goroutine定期輪詢(xún)將到期的任務(wù)通過(guò) redis lua script來(lái)將數(shù)據(jù)轉(zhuǎn)移到 Ready Queue(List)中。

任務(wù)消費(fèi)

支持延時(shí)的任務(wù)隊(duì)列本質(zhì)上是兩個(gè)數(shù)據(jù)結(jié)構(gòu)的結(jié)合: Ready Queue(LIST)和 Sorted Set。

Sorted Set用來(lái)實(shí)現(xiàn)延時(shí)的部分,將任務(wù)按照到期時(shí)間戳升序存儲(chǔ),隨后定期將到期的任務(wù)遷移至 Ready Queue(LIST)。

任務(wù)的具體內(nèi)容只會(huì)存儲(chǔ)一份在 Job pool里面,其他的如 Ready Queue只是存儲(chǔ)Job id,這樣可以節(jié)省內(nèi)存空間。

任務(wù)更新和刪除

Lmstfy本身不支持刪除和更新,我們?cè)贒elayer層中在創(chuàng)建任務(wù)同時(shí)在Redis中創(chuàng)建了一個(gè)Mapping Key,客戶(hù)端可以自定一個(gè)ID關(guān)聯(lián)到Job id,Delayer提供了刪除和更新(先刪除再創(chuàng)建)API,我們業(yè)務(wù)還需要支持多次執(zhí)行的功能,在處理Job Ack時(shí)根據(jù)任務(wù)參數(shù)重新插入隊(duì)列,結(jié)合我們二次開(kāi)發(fā)整體結(jié)構(gòu)如下:

pYYBAGMIPVCAa4BwAADfigE8rpw668.png

性能表現(xiàn)

通過(guò)本地限定1核CPU壓測(cè)生產(chǎn)消息數(shù)據(jù)如下:

200萬(wàn)任務(wù)量占內(nèi)存600MB+,其中包括mapping key導(dǎo)致key數(shù)量翻倍。

以下是單核CPU的環(huán)境下壓測(cè)結(jié)果,任務(wù)創(chuàng)建可高達(dá)1500TPS:

pYYBAGMIPXqARGSKAABKeHHOOaY266.png

延時(shí)任務(wù)到期時(shí)間比較分散的情況下,消費(fèi)表現(xiàn)如下接800TPS:

poYBAGMIPYuAbM6lAABarCzSqO4714.png

總結(jié)

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

● 在Delayer中操作Redis中的任務(wù),無(wú)法保證原子性;

● 任務(wù)創(chuàng)建和消費(fèi)另外會(huì)多一次網(wǎng)絡(luò)請(qǐng)求,產(chǎn)生不必要的開(kāi)銷(xiāo);

● 無(wú)法支持循環(huán)任務(wù);

● Lmstfy采用HTTP協(xié)議,無(wú)法發(fā)揮更好性能。

未來(lái),我們計(jì)劃融合兩個(gè)服務(wù),完善任務(wù)CRUD功能,減少網(wǎng)絡(luò)開(kāi)銷(xiāo),并采用GRPC來(lái)替換HTTP協(xié)議通訊。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    9030

    瀏覽量

    143075
  • 智慧城市
    +關(guān)注

    關(guān)注

    21

    文章

    4396

    瀏覽量

    101846
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    優(yōu)先級(jí)隊(duì)列介紹

    隊(duì)列(Queue)的知識(shí)點(diǎn):「概念」:隊(duì)列是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),類(lèi)似于排隊(duì)的概念。「基本操作」:enqueue(item): 將元素添加到隊(duì)列的末尾。dequeue(): 從隊(duì)
    發(fā)表于 11-26 07:56

    ?MCP998x車(chē)規(guī)級(jí)溫度傳感器技術(shù)解析與應(yīng)用指南

    Microchip Connect MCP998x車(chē)規(guī)級(jí)溫度傳感器非常適合用于汽車(chē)應(yīng)用中的有效熱控制。Microchip Connect MCP998x是符合AEC-Q100標(biāo)準(zhǔn)的多通道溫度
    的頭像 發(fā)表于 10-09 16:31 ?612次閱讀
    ?MCP998x車(chē)規(guī)<b class='flag-5'>級(jí)</b>溫度<b class='flag-5'>傳感器</b>技術(shù)解析與應(yīng)用指南

    世界上最小的傳感器有多小 頭發(fā)絲的十萬(wàn)分之一到百萬(wàn)分之一

    世界上最小的傳感器有多?。?世界上最小的傳感器可以達(dá)到人類(lèi)頭發(fā)絲的十萬(wàn)分之一到百萬(wàn)分之一。據(jù)央視報(bào)道,在2025年9月,我國(guó)科研團(tuán)隊(duì)開(kāi)發(fā)的量子傳感器尺寸僅0.5納米,相當(dāng)于人類(lèi)頭發(fā)絲的
    的頭像 發(fā)表于 09-22 11:17 ?1054次閱讀

    MEMS慣性傳感器?都有哪些種類(lèi)?MEMS慣性傳感器有哪些特點(diǎn)

    MEMS慣性傳感器都有哪些種類(lèi)?MEMS慣性傳感器有哪些特點(diǎn),下面火豐精密小編為你講解一下: MEMS慣性傳感器包括MEMS陀螺儀及MEMS加速度計(jì),其分類(lèi)有多種方式,根據(jù)精度由低到高其可分為消費(fèi)
    的頭像 發(fā)表于 08-26 17:39 ?749次閱讀
    MEMS慣性<b class='flag-5'>傳感器</b>?都有哪些種類(lèi)?MEMS慣性<b class='flag-5'>傳感器</b>有哪些特點(diǎn)

    機(jī)器人競(jìng)技幕后:磁傳感器芯片激活 “精準(zhǔn)感知力”

    支撐機(jī)器人競(jìng)技能力的核心力量,深刻改變著競(jìng)技機(jī)器人的能力邊界。 磁傳感器芯片為機(jī)器人運(yùn)動(dòng)提供 “精準(zhǔn)導(dǎo)航”。在動(dòng)態(tài)平衡系統(tǒng)中,像昆泰芯 KTH71 系列磁傳感器芯片,通過(guò)檢測(cè)地磁場(chǎng)與運(yùn)動(dòng)磁場(chǎng)變化構(gòu)建
    發(fā)表于 08-26 10:02

    什么是照度傳感器和接近傳感器

    近年來(lái),照度傳感器和接近傳感器在我們身邊各類(lèi)設(shè)備中的應(yīng)用越來(lái)越廣泛。除了單獨(dú)使用照度傳感器和接近傳感器外,將這些傳感器組合使用的情況也在不斷
    的頭像 發(fā)表于 08-22 14:46 ?2484次閱讀
    什么是照度<b class='flag-5'>傳感器</b>和接近<b class='flag-5'>傳感器</b>

    Texas Instruments TMAG6180-Q1角度傳感器數(shù)據(jù)手冊(cè)

    。TMAG6180-Q1傳感器在X軸和Y軸上有兩個(gè)獨(dú)立霍爾傳感器輸出,可用于將傳感器的角度范圍擴(kuò)展至360° 。該傳感器還具有正弦和余弦輸出超低延時(shí)
    的頭像 發(fā)表于 08-02 11:29 ?1035次閱讀
    Texas Instruments TMAG6180-Q1角度<b class='flag-5'>傳感器</b>數(shù)據(jù)手冊(cè)

    時(shí)識(shí)科技推出百萬(wàn)像素工業(yè)級(jí)事件相機(jī)

    時(shí)識(shí)科技(SynSense)發(fā)布百萬(wàn)像素高分辨率、高成像質(zhì)量、高動(dòng)態(tài)范圍的工業(yè)級(jí)事件相機(jī)——Syn-Shining HD(閃靈系列工業(yè)相機(jī))。
    的頭像 發(fā)表于 07-31 11:29 ?876次閱讀

    毫米級(jí)精度背后的“隱形守護(hù)者”:位移傳感器如何重塑工業(yè)未來(lái)

    位移傳感器以0.5微米的重復(fù)精度,守護(hù)著12英寸晶圓100%的良品率。這些看似科幻的場(chǎng)景,正通過(guò)位移傳感器這一“工業(yè)感知神經(jīng)末梢”變?yōu)楝F(xiàn)實(shí)。 一、從毫米到納米:精度革命的幕后推手 位移傳感器家族中,激光位移
    的頭像 發(fā)表于 07-08 08:35 ?567次閱讀
    毫米<b class='flag-5'>級(jí)</b>精度背后的“隱形守護(hù)者”:位移<b class='flag-5'>傳感器</b>如何重塑工業(yè)未來(lái)

    stm32f103用freertos對(duì)一個(gè)采樣率為1kHz的傳感器,進(jìn)行采樣,數(shù)據(jù)出差

    您好,請(qǐng)問(wèn),用FreeRTOS的隊(duì)列對(duì)采樣率1khz的傳感器讀取數(shù)據(jù), 在采集任務(wù)中:通過(guò)spi讀取數(shù)據(jù)——濾波(ARM-DSP庫(kù))——將數(shù)據(jù)寫(xiě)入隊(duì)列——延時(shí)vTaskDelay(1
    發(fā)表于 05-05 22:44

    NVME控制隊(duì)列管理模塊

    隊(duì)列管理模塊是整個(gè)NVMe Host控制的核心模塊,該模塊實(shí)現(xiàn)了提交隊(duì)列與完成隊(duì)列的管理,多隊(duì)列請(qǐng)求的仲裁判決等功能。
    的頭像 發(fā)表于 05-03 15:32 ?423次閱讀
    NVME控制<b class='flag-5'>器</b>之<b class='flag-5'>隊(duì)列</b>管理模塊

    Vishay Opto VEML6031X00汽車(chē)級(jí)環(huán)境光傳感器

    VishayOptoVEML6031X00汽車(chē)級(jí)環(huán)境光傳感器(ALS)是一款高精度傳感器,設(shè)有I2C接口。該傳感器是一款環(huán)境光數(shù)字16位分辨率傳感器
    的頭像 發(fā)表于 04-03 10:31 ?978次閱讀
    Vishay Opto VEML6031X00汽車(chē)<b class='flag-5'>級(jí)</b>環(huán)境光<b class='flag-5'>傳感器</b>

    漢威科技柔彈性傳感器為智能選床墊系統(tǒng)提供支撐

    漢威科技集團(tuán)是國(guó)內(nèi)首家從事柔彈性傳感器研發(fā)生產(chǎn)的企業(yè),打造了專(zhuān)業(yè)的柔彈性傳感器研產(chǎn)體系,已經(jīng)具備從材料、電子、軟件到系統(tǒng)的全鏈條研發(fā)、生產(chǎn)能力,擁有年產(chǎn)數(shù)百萬(wàn)件彈性應(yīng)變傳感器的生產(chǎn)線,
    的頭像 發(fā)表于 02-13 14:24 ?1009次閱讀

    芯閱科技發(fā)布芯片級(jí)水質(zhì)傳感器

    、準(zhǔn)確地反映水質(zhì)狀況。更重要的是,該批產(chǎn)品首創(chuàng)性地解決了原位長(zhǎng)期在線水質(zhì)物理、化學(xué)數(shù)據(jù)的收集難題,為水環(huán)境監(jiān)測(cè)提供了更為便捷、高效的方式。 芯閱科技的這款芯片級(jí)水質(zhì)傳感器主要應(yīng)用于海洋生態(tài)保護(hù)、海洋牧場(chǎng)建設(shè)等領(lǐng)
    的頭像 發(fā)表于 02-11 10:14 ?843次閱讀

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

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