背景
時間:1年前的某日
坐標:深圳
在一個平常的不能再平常的周末下午,幾個小伙伴聚在了一起,一起暢想“萬物互聯(lián)”的物聯(lián)網(wǎng)未來。小伙伴中有硬件開發(fā)者、嵌入式開發(fā)者、軟件開發(fā)者;有互聯(lián)網(wǎng)公司的全棧工程師、也有核電廠的工控系統(tǒng)維護者、還有路由器廠商的wifi協(xié)議開發(fā)者。我們發(fā)現(xiàn),世面上沒有開源且可商用的物聯(lián)網(wǎng)平臺或系統(tǒng)。這里的可商用,不是搭建幾個demo把硬件連上網(wǎng)、app操作兩下這么簡單!
有以下幾點都是必須著重考慮的:
必須有完備的硬件、嵌入式、云端一體的協(xié)議及架構設計
能夠實現(xiàn)真正的硬件智能化,能夠基于數(shù)據(jù)學習并自主工作
必須有很高的性能、穩(wěn)定性及擴展性
必須能夠適應成千上萬種不同資源的硬件設備,從PC到手機、從計算資源極其有限的單片機到網(wǎng)絡帶寬極其有限的控制器
必須能適應不同的網(wǎng)絡場景,包括有線、wifi、3g/4g、gprs等
必須有很可靠的安全性
需要盡可能降低研發(fā)和生產成本
在媒體和科技工作者都抱著物聯(lián)網(wǎng)是未來的觀點并翹首觀望時,我們決定做點什么,而不是當看客!這個平常的不能再平常的周末下午,也許對我們不太平凡。
我們決定啟動全套可商用物聯(lián)網(wǎng)系統(tǒng)的設計和研發(fā),并在不久的將來,全部開源。
于是大家利用業(yè)余時間,開始了協(xié)議設計及系統(tǒng)設計,將項目慢慢啟動了起來。幾個月后,第一個商用版本的研發(fā)成功完成。這期間,好幾個小伙伴辭去了工作,全職進行研發(fā)。我們在沒有融資、沒有資源的情況下一路走到現(xiàn)在,其中辛酸就不多言了。謹以此文記錄我們在系統(tǒng)設計和研發(fā)中的走過的路,以饗同樣是物聯(lián)網(wǎng)愛好者的你。
整體設計
一個物聯(lián)網(wǎng)系統(tǒng)涉及硬件、軟件、云端、app各個環(huán)節(jié),必須從整體進行頂層設計,只倚重某個單一的環(huán)節(jié)進行設計的系統(tǒng)都不具備良好的適用性和擴展性。我們在設計時為了避免這種情況,使系統(tǒng)能夠適應最廣泛的物聯(lián)網(wǎng)場景(甚至包括工業(yè)場景),每次的架構設計討論都是所有團隊成員參與。大體的系統(tǒng)架構如下:
協(xié)議
在一個物聯(lián)網(wǎng)系統(tǒng)中,協(xié)議是串通上下層的關鍵紐帶。在物聯(lián)網(wǎng)系統(tǒng)中,我們將協(xié)議分為兩大層:通信層和業(yè)務層。
通信層基本上是傳統(tǒng)互聯(lián)網(wǎng)的網(wǎng)絡基礎設施,負責將數(shù)據(jù)在物聯(lián)網(wǎng)系統(tǒng)節(jié)點中的傳輸
業(yè)務層分為兩層,底層是負責物聯(lián)網(wǎng)場景下數(shù)據(jù)交換格式的規(guī)范,上層是物聯(lián)網(wǎng)場景需要具體傳輸?shù)臉I(yè)務數(shù)據(jù)規(guī)范。
通信層互聯(lián)網(wǎng)基礎架構目前已經(jīng)非常成熟且通用,但是業(yè)務層協(xié)議目前還是種類繁多??梢源_定的一點是,最終能在物聯(lián)網(wǎng)應用中稱霸的協(xié)議,一定也像互聯(lián)網(wǎng)時代的TCP/IP一樣是開放的、免費的。目前符合此特性并使用比較多的有XMPP、MQTT、COAP等。關于具體的對比,可以參考我之前的另一篇文章《物聯(lián)網(wǎng)通信協(xié)議介紹》。
文中總結如下:
互聯(lián)網(wǎng)中使用較多的HTTP、websocket以及XMPP等協(xié)議,在設計時都是根據(jù)互聯(lián)網(wǎng)應用場景設計的,雖然很多廠商把他們應用在物聯(lián)網(wǎng)系統(tǒng)中,但是必然會水土不服,這些協(xié)議的通病就是根本無法適用物聯(lián)網(wǎng)設備的多樣性,無法適用很多物聯(lián)網(wǎng)設備對低功耗、低成本的需求,難以在極低資源的物聯(lián)網(wǎng)設備中運用。
COAP協(xié)議針對資源受限的嵌入式設備設計,但由于很多物聯(lián)網(wǎng)設備隱藏在局域網(wǎng)內部,COAP設備作為服務器無法被外部設備尋址,在ipv6沒有普及之前,coap只能適用于局域網(wǎng)內部(如wifi)通信,這也很大限制了它的適用范圍。
MQTT在協(xié)議設計時就考慮到不同設備的計算性能的差異,所以所有的協(xié)議都是采用二進制格式編解碼,并且編解碼格式都非常易于開發(fā)和實現(xiàn)。最小的數(shù)據(jù)包只有2個字節(jié),對于低功耗低速網(wǎng)絡也有很好的適應性。有非常完善的QOS機制,根據(jù)業(yè)務場景可以選擇最多一次、至少一次、剛好一次三種消息送達模式。運行在TCP協(xié)議之上,同時支持TLS(TCP+SSL)協(xié)議,并且由于所有數(shù)據(jù)通信都經(jīng)過云端,安全性得到了較好地保障。
我們最終選擇基于MQTT來作為業(yè)務傳輸層主要協(xié)議。但是MQTT協(xié)議本身的設計是針對開放設備,對于可商用的物聯(lián)網(wǎng)系統(tǒng)不得不保證設備的安全性和完善的授權機制。所以我們在實現(xiàn)MQTT協(xié)議時進行了一些定制和限制。
在業(yè)務層的上層(business層),目前的物聯(lián)網(wǎng)系統(tǒng)都是各自針對自己的業(yè)務場景設計協(xié)議規(guī)范。有沒有可能根據(jù)物聯(lián)網(wǎng)場景統(tǒng)一業(yè)務數(shù)據(jù)的規(guī)范呢?我們認為是可行的,并且也是必要的。如果把通信協(xié)議比作聲音,光有通信協(xié)議,任何人之間還是無法交流。只有統(tǒng)一語言,大家才能順暢溝通。所以我們抽象出物聯(lián)網(wǎng)節(jié)點中傳感器和執(zhí)行器的業(yè)務場景,并設計出含有物聯(lián)網(wǎng)業(yè)務數(shù)據(jù)語義的業(yè)務層協(xié)議。目前已經(jīng)將業(yè)務層協(xié)議開源,希望對廣大愛好者和從業(yè)者帶來一定參考價值。
云端平臺
互聯(lián)網(wǎng)時代的用戶上網(wǎng)終端主要是PC和手機等設備,可以想象,物聯(lián)網(wǎng)時代,上網(wǎng)終端會呈多樣化、海量化趨勢。保守估計每人擁有數(shù)十套聯(lián)網(wǎng)設備,數(shù)據(jù)規(guī)模必然也是幾何倍增長。所以物聯(lián)網(wǎng)云端平臺注定是一個大規(guī)模的海量分布式系統(tǒng)。
目前很多愛好者或者廠商通過搭建簡單的web系統(tǒng)(如php、nodejs、python實現(xiàn)的web接口)可以實現(xiàn)設備的聯(lián)網(wǎng),但是可以想象,在真正的商用場景中,穩(wěn)定性、性能、擴展性都必然遭受沖擊,無法應對。
在進行技術選型和架構設計時,我們也綜合考慮以上因素進行設計和實現(xiàn):
采用go語言作為主要開發(fā)語言。go語言有著簡潔的語法,并且能夠很方便地進行高并發(fā)程序的開發(fā),在高性能云計算系統(tǒng)的開發(fā)中有著得天獨厚的優(yōu)勢。
采用microservice分布式架構。microservice架構能夠構建出更穩(wěn)定、擴展性更好的分布式系統(tǒng),也是目前分布式系統(tǒng)中最流行的架構方式。
使用docker降低運維成本。docker能夠方便地對系統(tǒng)就行升級和出錯回滾,保證了系統(tǒng)發(fā)布時的穩(wěn)定性。
對外接口采用REST風格進行設計。REST風格的接口便于升級和兼容,并擁有非常易于理解的語義,降低開發(fā)者的學習門檻。
多副本部署。任何服務模塊我們都保證同時至少有兩個運行實例,并根據(jù)服務發(fā)現(xiàn)機制自動進行負載和調度,以增加系統(tǒng)可用性。
大體的云端架構如下圖
目前我們的系統(tǒng)已經(jīng)發(fā)布到0.8.0版本,后續(xù)會在安裝和運維的便捷性上進行優(yōu)化,并計劃在1.0版本時開源發(fā)布。
嵌入式
物聯(lián)網(wǎng)硬件的嵌入式軟件除了傳統(tǒng)部分,必須加入聯(lián)網(wǎng)邏輯以及傳感器、控制器的管理。為了提高開發(fā)效率、方便復用,我們設計并開發(fā)了輕量級的物聯(lián)網(wǎng)嵌入式開發(fā)框架,并對物聯(lián)網(wǎng)業(yè)務進行了抽象,以便移植到不同的硬件平臺。我們希望做到的是,在不需要更改任何業(yè)務層代碼的情況下,一個物聯(lián)網(wǎng)嵌入式應用可以在不同的硬件平臺運行。
當前很多大企業(yè)(華為、惠普、google等)都紛紛推出了物聯(lián)網(wǎng)操作系統(tǒng),后續(xù)物聯(lián)網(wǎng)領域會出現(xiàn)多種操作系統(tǒng)共存的局面。不同的操作系統(tǒng)能運行的最低系統(tǒng)資源以及具體應用場景都不盡相同,但我們相信,物聯(lián)網(wǎng)的上層業(yè)務是通用的,這也是我們設計物聯(lián)網(wǎng)嵌入式開發(fā)框架的原因。
安全
近些日子,各種廠商的物聯(lián)網(wǎng)設備紛紛傳出被黑的消息。從TCL到特斯拉,黑客都成功實現(xiàn)破解和隨意操控。和互聯(lián)網(wǎng)時代一樣,安全在物聯(lián)網(wǎng)目前的早期階段注定是容易被忽略的問題。為此我們也在設計系統(tǒng)時也沒有掉以輕心:
所有接入層通信都采用tls進行加密,包括對app、業(yè)務服務器的開放接口。
用戶、設備關鍵信息進行加密保存
針對設備有完善的用戶鑒權機制
針對互聯(lián)網(wǎng)安全場景的其他安全措施
安全不是一朝一夕的事情,需要從系統(tǒng)開始構建時就考慮,并不斷完善安全手段和規(guī)則。
開發(fā)板
為了降低物聯(lián)網(wǎng)硬件的開發(fā)成本,我們基于esp8266設計了物聯(lián)網(wǎng)開發(fā)板Tisan,并在Tisan實現(xiàn)了我們的嵌入式開發(fā)框架及物聯(lián)網(wǎng)協(xié)議。開發(fā)板相關的代碼已經(jīng)全部開源,目前在淘寶進行眾籌。
為什么推出開發(fā)板?我們認為這是一種互相學習、交流及沉淀技術的工具,希望更多的愛好者能一起做出好產品。
以開源之名
光陰荏苒,白駒過隙。一路走來,我們執(zhí)著地將所有設計慢慢付諸實現(xiàn),為未來的物聯(lián)網(wǎng)技術貢獻自己的力量。物聯(lián)網(wǎng)技術涉及的方向眾多,我們的力量畢竟是有限的,這也是我們從一開始就以開源形式開發(fā)項目的原因。
Now, we are calling for contributors!
如果你對物聯(lián)網(wǎng)和開源技術有著和我們一樣的執(zhí)著和愛好,歡迎關注或加入我們的開源項目。后續(xù)我們會逐漸開源發(fā)布所有的系統(tǒng)設計和項目。我們希望更多的小伙伴一起為項目做貢獻,無論是提交issue,還是貢獻代碼。
Hope we are not alone.
評論
查看更多