由于邊緣計(jì)算需要存取多種數(shù)據(jù)模型,,但是計(jì)算資源受限,我們在DB-Engine上所有數(shù)據(jù)庫排名清單上排名前30的數(shù)據(jù)庫中找了一圈,,找到的輕量級的非商業(yè)的支持多模型(注意:有的數(shù)據(jù)庫的多模型實(shí)際上只支持兩種數(shù)據(jù)模型,,不能滿足邊緣計(jì)算的需求)的數(shù)據(jù)庫Redis。 1.邊緣計(jì)算的數(shù)據(jù)存取需求在物聯(lián)網(wǎng)邊緣計(jì)算的復(fù)雜環(huán)境中,,應(yīng)用程序不可避免地需要多個(gè)數(shù)據(jù)模型:
既然這樣做不可行,我們?nèi)B-Engine這個(gè)數(shù)據(jù)庫排名網(wǎng)站上逛逛,,看看到底有沒有能滿足邊緣計(jì)算這種苛刻要求的數(shù)據(jù)庫,。 2.Redis的解決之道我們的目標(biāo)是,,找到一種輕量級的非商業(yè)的支持邊緣計(jì)算所需的多種數(shù)據(jù)模型的數(shù)據(jù)庫。 在DB-Engine上所有數(shù)據(jù)庫排名清單上排名前30的數(shù)據(jù)庫中找了一圈,,輕量級的非商業(yè)的支持多模型(注意:有的數(shù)據(jù)庫的多模型實(shí)際上只支持兩種數(shù)據(jù)模型,,不能滿足邊緣計(jì)算的需求)的數(shù)據(jù)庫,就只有Redis了,。 Redis的全名是REmote DIctionary Server,,遠(yuǎn)程字典服務(wù)器,看上去只是一個(gè)可以遠(yuǎn)程存放字典類型的內(nèi)存數(shù)據(jù)庫,。實(shí)際上由于Redis的架構(gòu)設(shè)計(jì),,它可以開發(fā)新的數(shù)據(jù)結(jié)構(gòu)和模塊,正如Postgresql可以讓開發(fā)人員開發(fā)新的數(shù)據(jù)庫數(shù)據(jù)結(jié)構(gòu)和擴(kuò)展一樣,。因此它實(shí)際上和Memcached不同,,不只是KV鍵值對數(shù)據(jù)庫,還是多模型(Multi-model)數(shù)據(jù)庫,。 那什么是多模型數(shù)據(jù)庫呢,?我們把鼠標(biāo)光標(biāo)移到Redis的Multi-model右邊的信息圖標(biāo)上,,會彈出對Redis數(shù)據(jù)庫的Multi-model多模型的解釋,。我們可以看到,Redis在完成本職工作Key-value鍵值對數(shù)據(jù)庫的同時(shí),,還可以當(dāng)做文檔數(shù)據(jù)庫,、圖數(shù)據(jù)庫、搜索引擎和時(shí)間序列數(shù)據(jù)庫使用,。 Redis這個(gè)定位用到邊緣計(jì)算就有點(diǎn)無敵了,。為什么這么說? 我們要是把那些重量級數(shù)據(jù)庫比作加農(nóng)炮,、榴彈炮這些“大炸嗶”,,就會發(fā)現(xiàn)它有兩個(gè)缺點(diǎn),一是用來對付小目標(biāo)殺雞用牛刀成本太高,;二是重量大很難由步兵攜帶,,對連排級的這種”邊緣側(cè)戰(zhàn)斗”火力支援響應(yīng)慢。反觀RedisEdge可以比作迫擊炮,,正好是彌補(bǔ)了這幾位大塊頭的缺點(diǎn),,便攜,易用,,不存在射擊死角,,可以很方便的為步兵提供曲射火力支援。 雖然Redis的多模型數(shù)據(jù)庫功能肯定沒有專門的文檔數(shù)據(jù)庫MongoDB,、專門的時(shí)間序列數(shù)據(jù)庫InfluxDB,、專門的圖數(shù)據(jù)庫Neo4J那么強(qiáng)大,,但是我們要知道,在邊緣計(jì)算這種應(yīng)用場景,,Redis提供的那些數(shù)據(jù)模型功能已經(jīng)夠用了,。 Redis 只需要添加邊緣計(jì)算所需的數(shù)據(jù)結(jié)構(gòu)和模塊,就可以滿足邊緣計(jì)算所需的功能,,適用于物聯(lián)網(wǎng)邊緣計(jì)算的苛刻條件,。 按照這個(gè)思路形成的軟件,套上現(xiàn)在時(shí)髦的Edge這個(gè)Buzzword,,那就叫RedisEdge吧,。 RedisEdge將開源版本Redis(帶有Redis Streams的5.0版本)與RedisAI和RedisTimeSeries、RedisGears這三個(gè)模塊一起打包,,就可以提供邊緣計(jì)算所需的數(shù)據(jù)模型了:
有了RedisEdge,就可以優(yōu)雅地處理邊緣計(jì)算所需的各種數(shù)據(jù)模型,,消除了在邊緣計(jì)算節(jié)點(diǎn)安裝多種數(shù)據(jù)庫的復(fù)雜性,。RedisEdge不是部署五個(gè)不同的數(shù)據(jù)庫來支持這些需求,而是在Redis上添加特定的數(shù)據(jù)結(jié)構(gòu)和特定功能的Redis模塊,,從而極大地簡化了系統(tǒng)架構(gòu)和部署復(fù)雜度,。 可能有的開發(fā)人員還是不太放心,,擔(dān)心性能問題。其實(shí)這個(gè)擔(dān)心是多余的,。Redis每秒可以寫入上百萬條數(shù)據(jù),,延遲<1ms,占用空間非常?。?lt;5MB),,因此很容易運(yùn)行在受限制的計(jì)算環(huán)境中。 它可以在各種邊緣設(shè)備上運(yùn)行,,范圍從ARM嵌入式處理器到基于x64的硬件,。因此它非常適合在物聯(lián)網(wǎng)設(shè)備、邊緣網(wǎng)關(guān)設(shè)備,、霧節(jié)點(diǎn)上使用,。 3.邊緣計(jì)算中的應(yīng)用場景既然RedisEdge是用在邊緣計(jì)算的,我們來看下RedisEdge官方提供的兩個(gè)邊緣計(jì)算應(yīng)用場景,。第一個(gè)是把RedisEdge嵌入到EdgeX Foundry中,。第二個(gè)是把RedisEdge嵌入到Azure IoT Edge平臺中。 EdgeX Foundry是一個(gè)擁有70多家成員公司的Linux基金會項(xiàng)目,。它是一個(gè)開源的物聯(lián)網(wǎng)邊緣計(jì)算微服務(wù)框架,,使任何人都可以輕松開發(fā)物聯(lián)網(wǎng)邊緣應(yīng)用程序。EdgeX Foundry參考實(shí)現(xiàn)中的核心服務(wù)數(shù)據(jù)庫用的是MongoDB這個(gè)文檔數(shù)據(jù)庫,。雖然用MongoDB也可以存儲實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù),,也可以用中間表來傳遞消息,。但是它不夠輕量級,,適用場景就會受到很大限制。 在下圖中,,RedisEdge運(yùn)行在EdgeX Foundry的核心服務(wù)層,。RedisEdge作為內(nèi)存數(shù)據(jù)庫、時(shí)間序列數(shù)據(jù)庫,、元數(shù)據(jù)存儲,、配置文件存儲。 在導(dǎo)出服務(wù)層,,RedisEdge作為導(dǎo)出客戶端注冊信息的數(shù)據(jù)庫,。 RedisEdge還可用作Azure IoT Edge的模塊,使Azure IoT服務(wù)的物聯(lián)網(wǎng)應(yīng)用程序開發(fā)人員可以輕松利用Redis的強(qiáng)大功能,。 4.其他類似方案那除了RedisEdge之外,,邊緣計(jì)算數(shù)據(jù)庫是否還有其他可選方案呢? 一個(gè)方案是用開源多模型數(shù)據(jù)庫Postgresql + 擴(kuò)展插件(連接第三方數(shù)據(jù)庫postgres-fdw + PG時(shí)間序列數(shù)據(jù)庫擴(kuò)展timescale + REST接口暴露PostgREST + 實(shí)時(shí)流分析pipelinedb) + PL/Python函數(shù)或SPI接口,。 其中Postgresql作為核心數(shù)據(jù)庫,,提供關(guān)系型數(shù)據(jù)模型和文檔數(shù)據(jù)模型,。 postgres-fdw擴(kuò)展,用于與第三方數(shù)據(jù)庫進(jìn)行集成,。 timescale這個(gè)Postgresql的時(shí)間序列數(shù)據(jù)庫擴(kuò)展,,給Postgresql添加了時(shí)間序列數(shù)據(jù)庫功能,用于存儲設(shè)備歷史數(shù)據(jù)和歷史數(shù)據(jù)降采樣,、聚合,。 pipelinedb這個(gè)Postgresql實(shí)時(shí)流分析擴(kuò)展,用于對采集的設(shè)備數(shù)據(jù)進(jìn)行實(shí)時(shí)分析,。 PostgREST用于將數(shù)據(jù)庫暴露為RESTful API接口,,用于給邊緣計(jì)算應(yīng)用程序調(diào)用訪問。 PL/Python或C語言的SPI接口,,可以用來調(diào)用人工智能庫如PyTorch(libtorch)或Tensorflow(libtensorflow)等,,然后將其封裝為Postgresql的函數(shù),這樣邊緣計(jì)算應(yīng)用開發(fā)人員通過調(diào)用數(shù)據(jù)庫函數(shù)即可實(shí)現(xiàn)在邊緣側(cè)運(yùn)行深度學(xué)習(xí)模型,。 這種方式比RedisEdge更重量級一點(diǎn),,適合在邊緣計(jì)算側(cè)需要更復(fù)雜計(jì)算的地方。這個(gè)方案的缺點(diǎn)是其中有商業(yè)軟件,。當(dāng)然,,我們也可以借鑒RedisEdge的Streams數(shù)據(jù)結(jié)構(gòu)和RedisTimeseries模塊,開發(fā)Postgresql的對應(yīng)的擴(kuò)展,。 另外一個(gè)方案就是北京濤思科技的TDengine,。這個(gè)項(xiàng)目要解決的問題和RedisEdge也是類似的,只不過是自己從頭開發(fā)的,。而RedisEdge是Redis+Redis模塊的方式組合起來的。 |
|