Azure 消息 & 事件服務(wù)的選擇 – 中篇

來源: Microsoft Azure
作者:Microsoft Azure
時間:2020-12-14
16572
在上篇中我們分別對了消息服務(wù)中三種類型服務(wù)做了介紹和對比,它們包括Storage queue、Service bus queue、Service bus topic。這篇文章我們繼續(xù)對事件服務(wù)中的Event Hub和IOT Hub分別做介紹。

在上篇中我們分別對了消息服務(wù)中三種類型服務(wù)做了介紹和對比,它們包括Storage queue、Service bus queue、Service bus topic。這篇文章我們繼續(xù)對事件服務(wù)中的Event Hub和IOT Hub分別做介紹。

1.Event Hub

a.什么是Event Hub

Event Hub服務(wù)可以在短時間內(nèi)接收由設(shè)備或服務(wù)生產(chǎn)大量數(shù)據(jù)流。

這里的“短時間”和“大量”可以達到每秒鐘接收百萬級別的數(shù)量。傳遞到Event Hub的數(shù)據(jù)更準確來講是數(shù)據(jù)流,即使流動到Event Hub的數(shù)據(jù)量非常大,也可以保證低延遲接收到所有的數(shù)據(jù)流,并且系統(tǒng)是可靠穩(wěn)定的。

在Event Hub的世界里,數(shù)據(jù)被稱為“事件”而不再是“消息”,這里我們對這兩個概念做進一步的介紹,這將幫助我們了解消息服務(wù)和時間服務(wù)的區(qū)別?!笆录焙汀跋ⅰ笔遣煌?,簡單來講消息是有明確目的意圖的,即它被發(fā)送到后端是用來執(zhí)行特定的操作,發(fā)送端需要知道對應的操作是否被執(zhí)行,需要得到對應的響應;而“事件”則是反映一個事實,是發(fā)生在過去的一個事件記錄,發(fā)送端發(fā)出這個“事件”后則不需要了解后續(xù)的操作,也不需要拿到接收端收到“事件”的響應。

b.服務(wù)特性

Event Hub做為處理高并發(fā)數(shù)據(jù)流的服務(wù)有豐富的產(chǎn)品特性:

首先Event Hub支持用戶使用AMQP協(xié)議發(fā)送事件到服務(wù)端,這方便不同的設(shè)備、應用傳遞事件到服務(wù)端。

其次在Event Hub中,用戶是通過“consumer groups”來接收發(fā)送到Event Hub中的事件的,用戶可以創(chuàng)建多個“consumer groups”,這樣每個接收端可以根據(jù)自己的節(jié)奏并且依賴于特定的“consumer groups”來接收Event Hub中的數(shù)據(jù),依賴于不同“consumer groups”的不同的接收端相互之間是完全獨立互不干擾的。

另外在Event Hub中有一項非常重要的功能,即Event Hub允許接收端從不同的位置開始接收消息,這依賴于Event Hub中一個非常重要的概念offset(我們可以理解為游標),offset就是用來記錄接收端當前在Event Hub中讀取事件的位置。在Event Hub中用戶可以定義多個partition,我們可以將每個partition理解為一個隊列,接收端讀取每個partition上的事件,因此每個partition上都會對應有一個offset用來記錄當前的位置,而“consumer groups”則可以理解為一組offset記錄,它包含了當前接收端在每個partition上讀取消息的當前位置。通過這項功能,接收端不需要每次都從頭開始獲取消息,而是可以通過獲取記錄位置的offset值,從相應的位置開始獲取數(shù)據(jù)。

最后,作為處理高并發(fā)百萬級別事件流的服務(wù),Event Hub有很好的擴容性,一方面用戶可以定義多個partition(目前我們最多可以自己創(chuàng)建32個partition)分擔并發(fā)數(shù)據(jù)流,另外一方面我們可以增加TU(Throughput Units),每個TU允許1MB/S的進入數(shù)據(jù)和2MB/S的輸出數(shù)據(jù)。需要提的一點是partition和TU是兩個不同方向上的擴容。我們可以將進入Event Hub的數(shù)據(jù)想象成一個水池中的水,這一水池(事件流)通過管道(partition)1秒鐘就進入Event Hub服務(wù)中。

當我們增加partition時,相當于接到Event Hub中的管道增加,這樣對于同樣的數(shù)據(jù)流,增加partition則進入Event Hub的數(shù)據(jù)更快;當我們增加一個TU時,相當于允許再額外增加一水池的水,這樣我們允許雙倍的數(shù)據(jù)流1秒鐘傳入到Event Hub服務(wù)中。

下面這張圖表讓我們能更直觀的對Event Hub中Partition,Consumer Group有個了解:

01 (1).png

c.與Service bus queue的區(qū)別

Event Hub不同于以上的三種服務(wù)Storage queue/Service bus queue&topic,這些服務(wù)都是每次處理一條消息,而Event Hub則可以理解為是一個接收事件流的“管道”(pipeline)。

Event Hub的設(shè)計側(cè)重于數(shù)據(jù)流的解決方案,它是一個“事件攝取器”,用來接受并存儲事件數(shù)據(jù),并可以快速將事件流推送到接收端,具備每秒接收和處理數(shù)百萬個事件的能力。而Service bus queue則主要面向傳統(tǒng)的企業(yè)應用程序,是典型的傳遞消息任務(wù)的解決方案,這些解決方案中對消息的順序、監(jiān)測重復消息、保證數(shù)據(jù)不能丟失有很高的要求。

更多關(guān)于這兩項服務(wù)的區(qū)別可以參考官方鏈接。

d.適用場景

基于Event Hub產(chǎn)品特性,它非常適用于大量的消息的傳遞處理,如遙測或物聯(lián)網(wǎng)的使用場景。

e.一些限制和說明

Event Hub允許多個接收端根據(jù)不同的consumer group獨立相互不影響的接收消息,這一點與Service bus topic很像,但是目前每個Event Hub下最多能創(chuàng)建32個consumer group,而topic的subscription可以多達2000個。

另外傳遞到Event Hub中的事情大小最大不能超過256KB,TU最多可以增加到20個,partition最多可以增加到32個(需要注意partition在創(chuàng)建Event Hub時指定,一旦指定之后就不能改變)。

在Service bus queue中用戶可以設(shè)定消息有TTL(time to live)值,而在Event Hub中用戶可以指定事件的retention period(最長保留期)值,這是兩個不同的概念,消息一旦過了TTL值,該條消息是一定會從Service bus queue中移出,然而事件過了retention period,有可能繼續(xù)保留在Event Hub服務(wù)中(取決于一段時間內(nèi)數(shù)據(jù)量的多少),而可以保證的是在指定的retention period期限內(nèi),該事件是一定會在Event Hub中保留,目前Event Hub事件的retention period最大值為7天。

2.IOT Hub

a.什么是IOT Hub

Event Hub非常適合用來處理大量數(shù)據(jù)流,但是對于物聯(lián)網(wǎng)的應用場景它不是最佳選擇。正如IOT Hub它的名字,Azure平臺上的IOT Hub是專門為物聯(lián)網(wǎng)的應用場景設(shè)計的產(chǎn)品。它基于Event Hub服務(wù),并具有額外物聯(lián)網(wǎng)所需的附加功能,比如管理和保護連接到IOT Hub上的成千上萬的設(shè)備。

b.服務(wù)特性

IOT Hub可以與設(shè)備端交互,也就是支持雙向通信(device to cloud和cloud to device),允許對設(shè)備執(zhí)行同步或異步指令。

IOT Hub支持多種通信協(xié)議,比如,AMQPHttpMQTT協(xié)議,而MQTT是非常流行的物聯(lián)網(wǎng)協(xié)議。對于那些不支持以上三種通信協(xié)議的設(shè)備,Azure IOT Hub提供給用戶一套Gateway的SDK,從而保證這些設(shè)備可以通過已有的能力(藍牙)與Gateway通信,Gateway將消息傳遞到Hub中,從而實現(xiàn)設(shè)備與云端的通信。

IOT Hub具備設(shè)備管理能力,從而可以對設(shè)備進行硬件升級、報告配置管理信息。

Azure IOT作為構(gòu)建物聯(lián)網(wǎng)解決方案的關(guān)鍵技術(shù),實現(xiàn)將前端收集的數(shù)據(jù)傳遞到后端應用中,在Azure IOT Hub中,可以通過是Azure平臺提供的應用對接收到Hub中的數(shù)據(jù)進行處理,比如(流分析、logic app、HDInsight等等);也可以通過IOT Hub提供的SDK構(gòu)建接收數(shù)據(jù)程序?qū)?shù)據(jù)進行處理;另外還可以通過配置message routers將數(shù)據(jù)重新導向到其他的服務(wù)。這里我們對message router做進一步的解釋,當IOT Hub接收到設(shè)備端的一條數(shù)據(jù)后,首先會監(jiān)測用戶是否配置了自定義的router,如果有并且該條消息滿足對應的規(guī)則,那么IOT Hub會將該條消息傳遞到router對應的服務(wù)中去,而不是存放在默認的Event Hub服務(wù)中(如果沒有任何router的配置,默認一條消息進入IoT Hub中是會自動存放在默認的一個Event Hub中)。

下圖是IOT Hub架構(gòu)和功能的概述:

02 (1).png

c.與Event Hub的區(qū)別

首先IOT Hub與Event Hub一個非常明顯的區(qū)別在于,Event Hub只能用來接收事件流,而IOT Hub支持雙向通信(device to cloud和cloud to device):不僅可以接收來自設(shè)備端成千上萬的數(shù)據(jù),還可以自己發(fā)送指令/消息到設(shè)備端。

其次,Event Hub無法區(qū)分發(fā)送數(shù)據(jù)到云端的不同的設(shè)備,Event Hub無法感知到設(shè)備的存在,在IOT Hub中設(shè)備需要在云端注冊,IOT Hub對設(shè)備進行身份管理和驗證,比如設(shè)備重啟,設(shè)備狀態(tài)監(jiān)控等等?;贗OT Hub對設(shè)備身份驗證管理,IOT Hub可以對單個設(shè)備中斷連接,而這一點Event Hub做不到(在Event Hub中所有的設(shè)備端都使用同一個連接字符串)。

最后,Event Hub只能允許并發(fā)5000個連接(基于AMQP協(xié)議),而IOT作為構(gòu)建物聯(lián)網(wǎng)的解決方案,允許上百萬級別的設(shè)備連接數(shù),從這個角度上來看,IOT Hub也更適合物聯(lián)網(wǎng)解決方案。

更多關(guān)于IOT Hub和Event Hub的區(qū)別可以參考官方鏈接。

d.適用場景

用戶可以使用IOT Hub構(gòu)建典型的物聯(lián)網(wǎng)解決方案,從而保證數(shù)百萬的物聯(lián)網(wǎng)設(shè)備和云端托管的后端應用之間實現(xiàn)安全、可靠的通信。

e.一些限制和說明

不同級別的IOT Hub限制說明是不一樣的,這里我們以S1為例,設(shè)備的連接數(shù)每秒最多100個或者每unit最多為12這個,這兩個標準都不可超。雖然cloud to device消息的限制為100/分鐘/unit,但是每個設(shè)備上最多可以存儲50個cloud to device的消息(消息在設(shè)備上以queue的方式存儲)。

更多關(guān)于IOT Hub的一些限制說明可以參考官方鏈接。

在上篇和中篇我們分別對了消息/事件服務(wù)中五個服務(wù)做了介紹和對比,在下篇中我們繼續(xù)對剩下的三種服務(wù)做介紹,其中Service bus Relay和Notification Hub相比較之前的五種服務(wù)有比較大區(qū)別,而Event Gird則又是Azure平臺最新推出的一種Serverless服務(wù),如果您對這個話題感興趣可以在下篇中繼續(xù)了解詳細內(nèi)容。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Microsoft Azure,本站不擁有所有權(quán),不承擔相關(guān)法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多