如何基于Akamai IoT邊緣平臺(tái)打造一個(gè)無服務(wù)器的位置分享應(yīng)用?
與地理位置有關(guān)的應(yīng)用相信大家都很熟悉了,無論是IM軟件里的位置共享或是電商、外賣應(yīng)用中的配送地址匹配,我們幾乎每天都在使用類似的功能與服務(wù)。不過你有沒有想過,如何在自己開發(fā)的應(yīng)用中嵌入類似的功能?
本文Akamai將為大家提供一個(gè)思路,借助邊緣計(jì)算技術(shù)在自己的應(yīng)用中實(shí)現(xiàn)快速、流暢、可擴(kuò)展的位置和分享能力,并且整個(gè)方法完全是以無服務(wù)器的形式實(shí)現(xiàn)的。這也意味著無需因?yàn)楹投ㄎ环窒碛嘘P(guān)的功能擴(kuò)展或調(diào)整應(yīng)用程序現(xiàn)有后端,只需簡單地集成,一切就能順利搞定。
一、100%無服務(wù)器
對(duì)很多服務(wù)和應(yīng)用程序來說,無論真實(shí)或虛擬的定位信息都是必不可少的。交通運(yùn)輸、游戲、娛樂、物流…… 如果位置信息無法嵌入到這些行業(yè)的應(yīng)用和服務(wù)中,我們的現(xiàn)實(shí)生活恐怕會(huì)受到不小的影響。
下文介紹的用例和演示來自Akamai最近為一個(gè)網(wǎng)絡(luò)研討會(huì)活動(dòng)所提供的應(yīng)用程序,我們將其稱之為Discover and Announce(發(fā)現(xiàn)并公布),因?yàn)樗梢詭椭蛻籼剿魇澜纾私庾约焊信d趣的周邊事物,并(可選地)在當(dāng)前位置的公共廣播頻道共享與全世界共享自己的狀態(tài)。
最重要的是,該應(yīng)用完全基于無服務(wù)器技術(shù)構(gòu)建,并且可以完全通過Akamai邊緣平臺(tái)來運(yùn)行。
簡單來說,該應(yīng)用有著如下的特征:
- 用戶客戶端讀寫Akamai IoT Edge Connect上一個(gè)包含了位置信息的Message Queue Telemetry Transport(MQTT)主題
- World Editor服務(wù)也是一個(gè)MQTT客戶端,可在相應(yīng)的主題中更新位置信息。
- Analytics服務(wù)可讀取用戶客戶端發(fā)出的Announce消息,借此進(jìn)一步感知周邊世界(如特定位置有多少用戶)。
二、Military Grid Reference Squares——世界的骨架
首先我們從一個(gè)地圖系統(tǒng)著手,該系統(tǒng)可以幫我們將MQTT主題分配到特定的地理位置。好在我們可以借助Military Grid Reference Squares(MGRS)輕松做到這一點(diǎn)。MGRS是一種可以涵蓋全球的地理位置編碼系統(tǒng),可以為1米、10米、100米、1000米甚至10千米的網(wǎng)格分配座標(biāo)。
以下列座標(biāo)為例:
16TFQ 4104 8222
其對(duì)應(yīng)的位置在美國密歇根州貝萊爾的Short’s Brewery附近,精度為10米見方。如果我們希望指定一個(gè)1km的見方的位置,只需要截?cái)鄸|經(jīng)(第一組整數(shù))和北緯(第二組整數(shù))的數(shù)值即可:
16TFQ 41 82
MGRS可以通過一個(gè)簡單的公式從經(jīng)緯度中推倒出來,該公式在很多平臺(tái)上都可用,包括JavaScript,下文我們就將進(jìn)一步介紹。
我們的IoT Edge Connect主題結(jié)構(gòu)反映了MGRS的地理位置編碼。在該演示應(yīng)用中,針對(duì)上述兩個(gè)位置的主題差不多是這樣的:
/16FTQ/4104-8222/
/16FTQ/41-82/
此外還有一種更豐富、復(fù)雜的設(shè)計(jì),可以使用MQTT通配符來“看到”任何精度下想要看到的事情。例如,我們可以將第一個(gè)MGRS主題寫成這樣:
/16FTQ/4/1/0/4/x/8/2/2/2/x/
隨后即可通過MQTT通配符實(shí)現(xiàn)真正的智能查詢。我們可以通過下列查詢了解1km見方范圍內(nèi)包含的所有信息:
SUBSCRIBE /16FTQ/4/1/+/+/+/8/2/+/+/+/
(雖然上述結(jié)構(gòu)也可以用更優(yōu)雅高效的形式來構(gòu)建,但目前這種方式在視覺上更適合本文演示的目的)
三、World Editor
我們開發(fā)了一個(gè)能用各種“對(duì)象”更新世界地圖的客戶端。借此可以創(chuàng)建對(duì)象,在World Editor地圖上給它命名,并在地圖上拖拽對(duì)象調(diào)整其位置。對(duì)象被拖拽放置后會(huì)將當(dāng)前所在位置的MGRS值發(fā)送給IoT Edge Connect上對(duì)應(yīng)的MQTT主題。World Editor使用了一個(gè)MGRS JavaScript庫將經(jīng)緯度轉(zhuǎn)換為MGRS編碼。
此外還可以通過額外的邏輯來識(shí)別多邊形和圓形,甚至可以定義獨(dú)特的位置形狀,借此更好地展現(xiàn)現(xiàn)實(shí)世界中那些外形不規(guī)則的地點(diǎn)。
客戶端也可以使用類似的服務(wù)來宣告自己的存在。在網(wǎng)絡(luò)研討會(huì)中,我們列舉了公園里在不同位置之間移動(dòng)的人物作為例子。這些人物可以使用我們的客戶端,在自己抵達(dá)新的位置后宣告自己的位置。
四、用戶客戶端
用戶可以做兩件事:
首先:用戶可以訂閱不同位置對(duì)應(yīng)的主題,借此了解周邊世界。通過使用MQTT通配符,他們甚至可以指定自己感興趣的大范圍區(qū)域。
該范例應(yīng)用會(huì)每秒鐘查詢iOS設(shè)備提供的GPS座標(biāo)。這些座標(biāo)值會(huì)在本地被轉(zhuǎn)換為MGRS編碼,如果該值與上一秒的結(jié)果相比產(chǎn)生了變化,客戶端就會(huì)訂閱新位置對(duì)應(yīng)的主題。
這種情況下,如果能提供經(jīng)緯度之外的其他選項(xiàng),將對(duì)應(yīng)用帶來巨大的好處。我們需要為GPS信號(hào)不可用的室內(nèi)環(huán)境提供支持,此時(shí)比較普遍的做法是使用藍(lán)牙信標(biāo),通過這種信標(biāo)來代表客戶端的位置。存儲(chǔ)在本地或Akamai EdgeKV的平面數(shù)據(jù)集可以將信標(biāo)值與MGRS位置進(jìn)行對(duì)應(yīng)。這樣,我們的應(yīng)用即可兼容各種位置共享類型與方案。
其次:用戶隨后還可以選擇公布自己的信息。通過使用MGRS主題結(jié)構(gòu),用戶自己就可以決定是否要在10km、1km、100m、10m或1m的主題層級(jí)上發(fā)布自己的位置信息。這樣用戶也可以淡化自己的位置精度。
當(dāng)然,用戶也可以選擇在自己的“告示”中發(fā)送什么內(nèi)容或不發(fā)送什么內(nèi)容。在我們的演示應(yīng)用中,用戶客戶端只是簡單地將自己稱之為“用戶”,并不包含個(gè)人信息。
我們還構(gòu)建了一個(gè)用戶客戶端的界面樣本,該界面可以將用戶位置以及用戶發(fā)現(xiàn)的對(duì)象顯示在地圖上,用戶也可以通過World Editor添加與對(duì)象有關(guān)的其他信息。
五、實(shí)時(shí)分析
Analytics服務(wù)的作用顧名思義,就是用來分析。該服務(wù)包含一個(gè)MQTT客戶端,可以讀取公布的消息,隨后記錄并處理這些內(nèi)容。在我們的范例應(yīng)用中,我們?yōu)?/span>World Editor添加了分析數(shù)據(jù)源,這樣就可以在地圖上顯示實(shí)時(shí)數(shù)據(jù)(本例中的實(shí)時(shí)數(shù)據(jù)也就是用戶客戶端的位置)。
能夠使用實(shí)時(shí)數(shù)據(jù),這一點(diǎn)就很酷了。例如,我們將能以秒為單位確定并更新每個(gè)位置的用戶密度。
六、走向全世界
位置信息在游戲、模擬,或是物流倉庫和工廠等封閉環(huán)境這樣的虛擬世界中同樣重要,而上文介紹的這種結(jié)構(gòu)也可以適用于這類環(huán)境并提供類似的好處。
七、為何選擇Akamai?
在上述演示應(yīng)用中,我們考慮到這款應(yīng)用可能會(huì)在一些很大的環(huán)境中使用,例如在公園中被成千上萬的游客使用,所有游客會(huì)使用全球各地不同移動(dòng)運(yùn)營商的網(wǎng)絡(luò)服務(wù),峰值時(shí)期的消息總量很可能會(huì)超過每小時(shí)數(shù)十億條。因此我們需要提供一種簡單、可靠、可擴(kuò)展、安全的平臺(tái),這個(gè)平臺(tái)必須足以處理這種規(guī)模,甚至更大規(guī)模的流量。源服務(wù)可以運(yùn)行在任何位置,并且無需為了滿足客戶需求而進(jìn)行擴(kuò)展。在我們的演示場景中,客戶可以專注于在我們的平臺(tái)上構(gòu)建功能豐富的應(yīng)用,為用戶提供更多欣喜和喜悅,而這背后的重?fù)?dān),交給Akamai邊緣就行。
這些應(yīng)用程序組件可以通過幾乎任何類型的容器在任何云環(huán)境中運(yùn)行。如果希望進(jìn)一步了解該應(yīng)用,請(qǐng)?jiān)L問https://developer.akamai.com/iot-edge-connect并注冊(cè)免費(fèi)試用。我們還可以提供示范環(huán)境,幫助用戶直接啟動(dòng)1個(gè)或1000個(gè)客戶端,借此驗(yàn)證并打磨自己的新想法。
這篇文章的內(nèi)容感覺還行吧?有沒有想要立即在 Linode 平臺(tái)上親自嘗試一下?別忘了,現(xiàn)在注冊(cè)可以免費(fèi)獲得價(jià)值 100 美元的使用額度,快點(diǎn)自己動(dòng)手體驗(yàn)本文介紹的功能和服務(wù)吧↓↓↓
歡迎關(guān)注 Akamai ,第一時(shí)間了解高可用的 MySQL/MariaDB 參考架構(gòu),以及豐富的應(yīng)用程序示例。