彭曉暉 張星洲,2 王一帆,2 朝 魯,2
1(中國科學院計算技術研究所 北京 100190) 2 (中國科學院大學 北京 100190) (pengxiaohui@ict.ac.cn)
隨著接入網絡的設備日益增加,數據規模也呈爆發式增長[1].現有的物聯網采用的是云計算模式,海量數據傳輸到云端計算加重了網絡傳輸和云端的計算負載.傳統的計算模式無法滿足海量數據大規模傳輸和計算、以及即將到來的人工智能時代應用大量爆發的需求[2].為了解決以上問題,研究者提出了邊緣計算,它是將云端計算負載部分移到設備端的一種新分布式計算模式[3-4].該模式的計算行為發生在數據源到數據中心路徑的任意網絡和計算資源上.相比于云計算,邊緣計算模式能夠提供更加高效的數據訪問和計算,減少云服務器計算負載和網絡傳輸負載,同時能提供更加實時的控制和反饋,以及提高邊緣計算系統[5]應用程序的服務質量和系統可靠性.
邊緣計算也常常被稱為霧計算[5-6].文獻[5]定義邊緣計算為“網絡邊緣執行計算的一種新型計算模型”,其核心理念是如何利用接近數據源的計算資源執行計算任務,并未嚴格界定所涉及的設備類型,理論上需要考慮從數據生產端到處理端之間(不包括兩端)的任一設備.如圖1所示,從物端到云端完整設備鏈中有大量類似于傳感器、控制器等分布在環境中設備被邊緣計算概念所忽視,這類設備面向物理世界,多具備物理功能,我們可稱之為物端設備.這類設備多數具有資源受限的特點,但仍具備不可忽視的計算能力,離物理環境和用戶近的特點使其具有一定的計算優勢.因此,我們在邊緣計算的基礎上進行相關概念延展和聚焦研究,我們提出了以物端設備為主的分布式計算系統和物理環境,稱為物端計算系統.

Fig. 1 The relationship between edge computing system and things computing system圖1 邊緣計算系統與物端計算系統的關系示意圖
鑒于現代Web系統的靈活性和可伸縮性優點,物端計算系統也需要全面的Web使能的支持.在本文進一步研究中,我們將設備依照Web使能能力進行劃分,即強Web使能設備和弱Web使能設備.強Web使能設備包括服務器、PC、手機、智能電視等,可原生運行完整的操作系統及現代Web的全棧協議(TCP/IP協議族).而弱Web使能設備,如部分傳感器、可穿戴設備、智能硬件等,由于資源受限,不能支持完整的原生網絡協議棧.因此,本文將主要研究弱Web使能設備為主的物端計算系統,其中,邊緣路由等強Web使能的物端設備不在調查范圍內.
圖1顯示了Web使能能力設備、邊緣計算系統和物端計算系統的關系.強Web使能區域表示已經成功地應用了REST Web(基于REST基本原則建立起來的現代Web體系結構)[7]的服務器、個人計算機(PC互聯網)和智能手機(移動互聯網)組成的現代Web系統,它們均有相對統一的體系結構.例如個人計算機有X86+Windows/macOS+REST平臺,而智能手機有ARM+Android/iOS+REST平臺[8].弱Web使能設備區域,由于系統的多樣性和資源受限等特性,其沒有統一的體系結構模型,無法適應未來萬物互聯時代人工智能應用的需求.物端計算系統需要遵循現代Web架構設計原理,繼承其體系結構,并針對物端系統面向物理世界的特性做出相應的擴展或改進,以適應靈活的、高動態的、高度異構的計算環境.主要有3個理由:
1) 借鑒云計算和移動互聯網的優點.云計算模式下,用戶可以通過移動設備使用Web技術隨時隨地訪問云端資源.物端計算模式下,這種需求仍然存在,并且通過Web技術,用戶還可以訪問和控制端的資源,例如查看環境數據、控制家用電器開關等.
2) 兼容現有的Web系統.采用Web體系結構的物端計算系統可以兼容現有的個人計算機和手機互聯網,但需要針對物端設備特性和計算環境做相應的改進.
3) 解決物端設備的“昆蟲綱悖論”[8].物端設備如自然界的“昆蟲”一樣種類繁多,在硬件平臺、操作系統和通信協議等方面均存在多樣性的問題,這給物端計算系統應用的開發帶來極大挑戰.在傳統PC Web和移動Web領域并不存在碎片化問題,根本原因是它們都應用了表述性狀態轉移(represen-tational state transfer, REST)[7]架構風格.因此在物端計算領域,支持REST的Web技術能夠解決“昆蟲綱悖論”的問題.
然而,現有的Web技術無法直接遷移到物端計算系統中.1)由于應用場景和成本等因素的限制,物端設備的計算、存儲、傳輸等能力較弱,他們不具備直接支持Web應用的能力;2)這些設備在硬件、系統、通信、物理功能等方面均具有多樣性的特點.Web體系架構,需要經過改進才能應用于物端設備.目前的研究主要集中在修改Web的一些實現,增強“統一接口”原則[9-10],來滿足一些特有的應用需求.另外一些研究也關注腳本語言的輕量化[11],并運用在物端設備上.這些工作通常只關注了物端系統的部分需求.本文認為有2點需要在未來的體系結構設計中得到優化與加強:
1) REST基本原理[7].為了與現有的Web系統兼容,我們需要繼承已有的Web的基本設計原理REST.同時,為了適應資源受限的環境,實現面向物理世界的智能感知與控制,需要對當前Web的實現進行輕量化的改進.
2) 按需代碼[7],即Scripting功能.腳本語言簡單易用、可移植性強,適合物端計算系統的人工智能應用.按需代碼在REST里是一個可選的原則,但對實現物端設備智能應用來說是一個必須實現的原則.
物端計算系統與現在的Web和物聯網[12]的本質區別是數據存儲、計算和交互(包括感知和控制)更靠近物理設備和用戶[13].因此,需要加強物端設備的計算能力來承載更多的智能處理,同時需要與現有的Web系統融合,組建協同工作的、魯棒的、本地化的智能分布式系統.本文對Web使能的物端計算系統的概念、現狀和發展方向進行了綜述性研究,具體貢獻有4個方面:
1) 首次闡述了物端計算系統概念及適用范圍.
2) 比較分析得出:Web使能技術及腳本語言可有效解決物端設備多樣性和資源受限問題.
3) 從REST架構設計、腳本語言的應用和調試技術的發展3個方面,歸納對比現有應用于物端計算系統的Web技術的發展現狀.
4) 分析了未來物端計算系統研究的挑戰,為物端計算領域指明了值得進一步研究的方向.
物端計算系統的主要特征是:多樣性和資源受限,不能很好地支持Web體系結構.如圖2所示,多樣性主要包括平臺多樣性和應用場景的多樣性.接下來我們從硬件平臺、操作系統和通信協議、應用場景等方面來描述其多樣性.

Fig. 2 The diversity of things computing system圖2 物端計算系統的多樣性
1) 硬件平臺.物端設備的硬件通常為專用功能而定制.它們的處理器/微控制器在數據寬度、指令系統、體系結構等方面有很大的差異性[14].這些設備可按照計算、存儲和通信等能力的大小進行分類.如表1所示,IETF將物端設備按照存儲能力粗略地分為3個類別[15]:Class 0(C0),Class 1(C1)和Class 2(C2).C0設備通常指的是資源極端受限的傳感器類設備,沒有直接連入現有互聯網的能力.C1設備能力相對強大一些,但是它們仍然無法直接使用現有的類HTTP協議族與互聯網中其他節點通信.C2設備的資源受限程度相對較小,能支持一些裁剪后的互聯網通信協議棧,運行簡單的腳本程序.

Table 1 The Classification of IoT Devices Based onMemory of IETF
2) 操作系統.文獻[16]指出:當能夠為這些高度異構的硬件平臺提供統一通用的API和SDK的一款或幾款嵌入式操作系統出現時,物聯網應用才能無處不在.早期嵌入式操作系統通常為特定的硬件平臺或應用需求而設計的,平臺間相互不能兼容,通用性差[17].近年來,一些嵌入式操作系統開始致力于發展成為通用性操作系統,如TinyOS[18],Contiki[19],T-kernel[20]等,表2對它們做了比較,它們大多支持多線程和動態內存,也大多支持C語言,內存最小的為TinyOS,只有1 KB.
3) 通信協議.操作系統需要根據硬件平臺支持不同的通信協議棧,這些協議棧大多具有低功耗低速率的特點,但他們之間不能夠“互通、互操作”[22].物端計算系統中常見的無線通信協議有Z-Wave[23],ZigBee[24],Bluetooth Low Energy (BLE)[25],6LoWPAN[26]等,表3對它們在常用模式下的特性做了簡單比較.這些通信協議支持的應用層協議大多數不能與現有的互聯網應用層協議(HTTP)兼容,通常需要在應用程序層做協議的相互轉換工作.6LoWPAN,CoAP[27]協議通過運行有TCP/IP協議棧的網關節點,讓資源受限的設備以兼容HTTP的方式連接到現有的互聯網系統中.很多嵌入式操作系統(例如Contiki[19],TinyOS[18],Micro T-kernel[28],mbed[29]等)均實現了對6LoWPAN和CoAP的支持.這種方式將大大降低應用程序開發和部署的復雜度.
4) 應用場景.物端計算的應用場景十分豐富.例如智能家居、交通、電網、智慧交通、車聯網等.每一個應用場景對硬件,網絡和用戶體驗的要求各不相同.然而在智慧城市里,常常需要這些不同的系統之間相互配合來提供更加優質的服務[30].現有的物端計算系統沒有統一的體系結構,各個應用領域之間基本是相互隔離的,容易形成信息孤島.因此,有必要將物端設備計算機化,形成統一體系結構和計算平臺.

Table 2 The Comparison of Operation Systems in Things Devices

Table 3 The Comparison of Communication Protocols of Things Computing System in Normal Operating Mode
物端設備另外一個顯著特征是資源受限.每個設備的功能較為單一,大量部署在各種復雜環境中,要求具有很低的功耗水平.這些特性限制了它的計算、存儲和通信能力,具體表現在3個方面:
1) 計算能力.通常采用嵌入式處理器,其表現形式通常為一個單片機或微控制器(MCU),基本都是單核結構,其主頻一般不超過1 GHz.
2) 存儲能力.RAM和ROM空間大多數都在100 KB以內,傳統計算機的應用程序開發技術和運行環境不適用于這種資源受限的物端計算環境.
3) 通信能力.它們大多采用無線通信的方式.現有的基于PC和智能手機的通信協議棧無法運行在物端設備上.學術界和工業界設計了很多低功耗、低成本的無線通信協議[21],但是傳輸能力通常受到極大限制.資源受限的特性限制了PC互聯網和移動互聯網的基礎體系結構REST Web在物端計算系統的應用.
1) 統一的體系結構.為了應對物端系統物端設備多樣性問題,同時支持未來人工智能應用,物端系統需要一個通用的軟件架構.文獻[20]早在1987年提出智能物體互聯網的概念,指出分布在全球各地的智能設備以松耦合的方式組成一個超功能分布式系統(highly functionally distributed systems, HFDS)[20].隨著移動設備性能的增強,PC互聯網的Web體系結構成功的拓展到智能手機端,從而帶來了移動互聯網的繁榮.然而,物端設備支持現有的Web體系結構仍然具有很大的挑戰,萬物互聯的網絡很難形成統一的體系架構,從而實現HFDS的愿景.
如圖3所示,Web體系結構中的REST風格API可為物端計算系統組成部分之間交互提供統一的接口,設備間通過基于REST的應用層協議相互連接.本文提倡將基于REST設計原理的Web技術體系拓展至物端設備,統一其體系結構,解決因多樣性帶來的應用碎片化問題.物端系統中設備需要高頻率地與真實世界交互,甚至一些應用的每次計算都需要感知物理世界的數據或物理世界的反饋作為輸入,這種應用場景與傳統Web系統有著很大的差別,我們有必要針對新的環境,為物端計算系統設計改進的REST架構風格,來指導物端系統軟件架構的設計.同時,我們必須從軟硬件協同的角度出發,設計高效的、低功耗Web體系,使其能夠應用在資源受限的物端設備上.

Fig. 3 REST APIs provide uniform interaction interface for things圖3 REST API可為物端系統元素間交互提供統一接口
2) 不支持智能.目前的海量物端設備功能單一,資源受限,只是作為數據收集和命令執行的工具,無法有效地處理智能任務.然而,物端計算系統很多應用場景需要模型在設備端進行本地化地、實時地、在線學習與進化[31].考慮物端設備的多樣性和資源受限的特點,我們需要從芯片到應用架構全新的創新和設計才能高效地支持未來的人工智能應用.例如設計低功耗、高能效、面向物理世界的智能物端處理器,在硬件上原生的支持智能.在系統上,形成統一的體系架構,支持設備間主動交互與協同.在應用架構上,將算法的模型分布式化,從而利用物端設備有限的計算能力進行局部學習.這樣可以充分利用海量設備的有限計算能力,同時減輕數據上傳到云端計算時造成的網絡負載和云端智能計算負載[5].
3) 開發難度高.應用開發人員要想在物端計算系統上開發程序,通常需要具備從芯片、操作系統到高級編程語言等完備的全棧知識.物端系統通常有數十種微處理器架構、上百種嵌入式操作系統[16]、數十種通信協議[21].一個嵌入式程序員通常需要使用匯編語言初始化SoC上的各種資源、選擇合適的操作系統和通信協議棧來構建整個軟硬件系統.這對程序員的能力和經驗要求十分高,阻礙了物端系統應用程序的開發和普及.而且大多數應用是為了特定硬件實現特定功能而編寫,依賴于特定的硬件資源.為特定硬件平臺編譯好的應用通常無法運行在另外一個平臺上.
物端設備大多數為傳統的嵌入式設備,其應用開發使用交叉編譯環境,需要配置復雜的編譯調試環境和特定的硬件調試器,增加了調試的難度[32].此外,由于物端計算系統通常分布在復雜的居住環境中,需要隨時隨地的動態交互.開發人員很難預測系統所有的限制和程序執行情境,從而在部署前驗證程序所有可能的分支.
綜上所述,物端計算系統輸入輸出與物理環境高度相關,而且未來物端系統會承擔更多的智能處理任務.基于Web技術和腳本語言的物端計算系統架構能夠有效解決物端設備多樣性的問題,并且能夠支持人工智能應用.接下來,本文將調研基于REST的Web技術應用于物端計算系統的一些研究工作.
REST[7]是Web系統軟件架構的基本風格和原理.其基本原理包括:客戶-服務器風格、無狀態、緩存、統一接口、分層系統、和按需編碼.合理的設計和強大的生命力使其成為現代Web系統設計的基本原理.文獻[33]是早期倡導通過REST原理將物整合到Web中的研究之一.文中提出構建物理世界的“智能物體”網絡,并將其融入現有的Web系統,即Web of Things[34].其優點是可以利用成熟的Web系統的技術(例如JavaScript,Ruby,HTML等)和機制快速構建可用的應用.
隨著邊緣計算的興起,學術界和工業界出現了許多致力于將Web技術擴展到資源受限環境的研究.然而,由于物端計算系統的多樣性,這些研究大多數沒有考慮萬物互聯場景下人工智能應用的新需求,只針對特定的場景和問題對Web的一些技術進行裁剪和優化,應用在特定的場景.下面將介紹5個典型的基于REST風格的物端計算系統應用層協議:pREST (pico-REST)[9], ubiREST[10], TinyREST[35], seaHTTP[36], CoAP[27].這些協議都支持客戶-服務器、無狀態和分層的原則,因此,在表4中只列出是否支持緩存、統一接口和按需代碼原則.

Table 4 The Representative Application Layer Protocols in Things Computing System Based on REST
從表4中可以看出,這類協議大部分支持REST的客戶-服務器風格、無狀態和分層系統的約束.但大部分都不支持緩存,也沒有強調按需代碼的原則.其中 pREST簡化了統一接口原則(只支持原有的GET和POST方法),增加了SUBSCRIBE方法,允許表達對給定資源的興趣,并在該資源發生變化時被通知,從而提高上層應用的實時性.ubiREST是建立在Pervasive REST (P-REST)[10]架構風格的一個中間件.而P-REST通過加強統一接口這一原則來實現對泛在網絡環境應用程序的支持.P-REST定義了一個新的資源操作方法“INSPECT”,該方法允許獲取目標資源的元數據(Meta-data).P-REST還通過引入抽象的統一資源標識符(abstract URI, 即aURI)[10]來支持標識一組資源.seaHTTP提供了2種新的方法(BRANCH和COMBINE),用于并發群組多資源請求的拆分和合并[36].同時在標準URI中加入時空屬性支持動態群組命名和實體資源表述.
CoAP支持在資源受限的情況下實現簡單、低開銷和多播的傳輸,旨在資源極端受限的節點和網絡中以適當的形式實現REST架構.學術界和工業界也涌現了很多基于CoAP的物聯網應用體系架構方面的研究,例如uID-CoAP[37],Lithe[38],jCoAP[39],mjCoAP[40],CoAPthon[41]等.CoAP是目前應用最為廣泛的資源受限環境的基于REST的應用層協議,基本上解決了一些物端設備應用層傳輸協議與現代Web的HTTP協議的兼容問題.
文獻[42]還針對智能互聯環境提出了一種可擴展的設備服務發現機制;文獻[43]提出了智能家居協議(SHP),使應用可以使用標準的HTTP方法來檢索和操縱設備的資源;文獻[44]提出了一種通過基于云的應用服務器和一致的REST風格的編程模型為物端設備提供類似Web腳本的架構.
這些研究大多都試圖通過修改或加強統一接口這一原則,使REST架構更加適合有高動態性、高擴展性、面向物理世界的物端計算系統.然而在萬物互聯時代,人工智能應用的興起,對物端計算系統提出了更多的需求.因此,研究者們必須謹慎地改進原有的REST設計原理,設計更加靈活的、可擴展的系統架構原則,指導構建統一的物端計算系統體系架構,從而支持未來人工智能應用的大量部署.
腳本語言是REST按需代碼原則的具體實現,相對于C/C++和Java等系統編程語言,其具有更高層次的抽象.它們簡單易用、可移植性強,適合具有多樣性的物端設備上應用程序的開發,例如JavaScript[45],Lua[46],Ruby[47],Python[41].本節介紹這4種語言和其為適應物端計算系統所做的改進,并從內存占用(memory footprint)角度對它們進行比較.
基于JavaScript將腳本編程拓展到資源受限環境的工作主要有:IoT.js[48],Cylon.js[49],Node.js[50],Device.js[51]等.IoT.js是由Samsung公司推出的基于輕量級JS引擎JerryScript[11]的IoT應用程序的平臺,它針對IoT器件在CPU性能和內存占用方面限制,做了大量優化工作;Node.js基于Google V8 JavaScript引擎和libuv事件I/O,使得JavaScript既可用于客戶端,又可用于服務端,實現了客戶端-服務器語言的統一;Cylon.js是面向機器人和物聯網的JavaScript框架,支持多種物聯網硬件平臺;Device.js允許用戶在選擇和控制各種智能設備時構建Web應用程序.
另外Lua,Ruby,Python等也經常被裁剪用于資源受限的環境里.mRuby[52]是為IoT應用定制的輕量級Ruby編程語言;MicroPython[53]是Python語言的變體,使用它開發的應用可以做到離線運行,給調試帶來很大的便利,它集成了多種網絡通信協議,適用于需要多種網絡通信協議的物聯網領域.
物端設備的內存資源受限,因此編程語言運行時內存占用的大小對物端計算系統十分重要.由于實驗環境的限制,無法評估一些語言變種的各項性能,本文測試Node.js,Lua,Ruby和Python這4種語言編寫的Helloword程序運行時內存占用情況.實驗平臺為MacBook Pro,處理器為2.7 GHz Intel Core i5,操作系統為OSX10.12.6,4種語言編寫的測試程序均輸出“Hello World”字符串,使用top命令采集內存占用.表5是不同語言的內存占用對比.

Table 5 The Comparison of Memory Footprint of Scripts表5 腳本語言內存占用比較
此外,本文引用了程序語言測試平臺(the computer language benchmarks game)[54]對上述語言做測試結果.其基準測試程序為fasta格式的轉換,平臺處理器為4核2.4 GHz Intel Q6600,操作系統為UbuntuTM17.04 Linux x64 4.10.0-28-generic,測試結果如表6所示:

Table 6 The Result From the Computer LanguageBenchmarks Game
Note:The code size is calculated by the GZip compressed bytes size.
由表6可知,Lua的內存占用量是最少的,Node.js是運行速度最快的.因此,在存儲資源非常珍貴的物端設備上,Lua最適合用來改進,作為其應用編程語言.
物端設備大多是傳統的嵌入式設備,因此大多采用的是傳統嵌入式的交叉編譯調試技術[55].程序通常在宿主機上開發,而在目標機上運行.隨著嵌入式操作系統和應用程序的功能和規模不斷擴大,這種復雜高難度的調試過程逐漸成為這些設備上應用發展的瓶頸.現有的嵌入式調試方法可分為軟件模擬、硬件模擬(包括ROM仿真和在線仿真2種方法)、監視器和在線調試等4種方法[56-57],下面分別對其進行介紹.
1) 軟件模擬.為了降低調試難度,將調試工具和需要調試的程序均運行在計算資源豐富的宿主機器上,通過調試工具來模擬程序在目標機上行為的方式稱為軟件模擬調試.然而,軟件模擬目標機處理器行為的方式,有可能因為處理器的指令集、體系結構的不同造成執行時間、中斷響應等系統重要特征上的巨大差異,無法反應程序在目標機上的實際運行狀況.
2) 硬件模擬.分為ROM仿真和在線仿真2種方式.ROM仿真器又稱為ROMEmulator[58],通常由RAM以及附加電路組成.程序通過串口等通信方式下載到ROM仿真器的RAM里,模擬在目標機上的運行.這種方式避免了程序調試過程中頻繁操作目標機的存儲設備.ROM仿真器通常針對特定MCU架構設計的專用仿真硬件,使用這種方式調試會顯著增加成本.在線仿真又稱為In-CircuitEmulator(ICE)[59].它可以確保在線調試器在目標系統崩潰后仍然能控制程序的運行,再現程序崩潰“現場”.但是,仍需要針對特定的平臺定制價格昂貴的硬件仿真器.
3) 監視器.即Monitor調試方法[60],由于資源受限,這種方式通常會將傳統的調試器拆分,分別運行在目標機和宿主機的操作系統中,使用串口、USB等常見串行通信方式,遵守相同的遠程調試協議來實現通信.這種方式通常無須特定硬件,價格低廉,使用較為方便,能再現程序在目標系統上運行的真實狀況.然而這種方式需要目標操作系統和調試模塊的支持,同時會增加目標系統資源開銷.例如GdbStub[61]技術是對MCU程序進行監控調試的一種方法,該方法為開發嵌入式軟件的調試工具提供了技術基礎.
4) 在線調試(in-circuit debugging, ICD)[62].在線調試是目前嵌入式開發主要的調試方式.由于硬件仿真器的價格昂貴,且需要針對特定平臺定制,使得開發成本十分高.解決方法之一是將調試接口標準化、集成在處理器中.例如Motorola的背景調試模式(BDM)[63]接口和聯合測試小組的JTAG接口[64].其中JTAG是一種開放的國際標準測試接口協議,現有的大部分嵌入式器件都支持JTAG調試接口.JTAG在保持強大功能的前提下,大大降低了在線調試的成本.
除了上述4個調試方法外,許多研究者使用軟硬件相結合的方法實現遠程調試.文獻[65]提出了一種在協同設計環境下的交叉調試技術BackC方法.在軟件調試中,可逆調試技術[66-67]是解決復雜程序調試過程中錯誤復現、錯誤定位問題的有效技術,近年來成為研究的熱點.文獻[68]提出了一種基于硬件輔助模塊的適用于多核平臺的記錄-調試方案;文獻[69-70]等也分別研究了可逆調試技術;文獻[71]通過使用一個程序將串口和Telnet 協議進行轉換,主機通過Telnet與目標機通信.表7對4種主要調試方法進行了簡單對比,其中,在線調試方法的系統開銷小,功能多,通用性強并且成本低,適合物端系統物端設備上的應用開發調試.

Table 7 The Comparison of Debugging Methods of the Embedded System
物端計算作為新興計算模式應用前景廣闊,涉及傳感器、芯片、網絡、人工智能等多個研究方向[72].因此也面臨眾多挑戰.本節總結物端計算系統研究的趨勢和遇到的挑戰,列舉了值得進一步研究的方向:體系結構、高效能Web、支持智能和應用程序調試等.
1) 體系結構.物端系統的多樣性阻礙了其統一的體系結構的形成.由于物端設備資源受限的特性,在PC互聯網和移動互聯網取得巨大成功的Web技術無法很好地直接應用在物端計算系統.隨著越來越多的物端設備連入互聯網,統一體系結構的研究與形成變得越來越迫切.如圖2所示,物聯網模式下,設備間的架構極為混亂,計算系統和通信方式十分多樣化.
文獻[8]提出了可應用于物端計算領域的SWoT架構,如圖4所示,將已經在PC互聯網和移動互聯網上得到驗證的REST架構拓展到物端計算領域.一個SWoT 系統由一個或者多個物端控域(ΦZone)構成,物端控域是物理空間的抽象(例如智能家庭).它與云端之間通過網關(ΦPort)連接,ΦZone 內部的多個物端設備通過基于REST的協議ΦREST交互,ΦPort 可以在ΦZone內外自動轉換協議,在內部使用ΦREST,而外部使用REST.該體系結構將PC的Web技術拓展至物端設備,讓計算盡可能更靠近設備和用戶.

Fig. 4 The architecture of Smart Web of Things (SwoT)圖4 Smart Web of Things (SwoT)架構[8]
文獻[73]為物端計算系統提出了IoT-Aggregator的架構,如圖5所示,其主要思想是為每一個設備分配一個全球唯一的ID (ucode)[74],云端或邊緣上存儲該ID關聯的所有數據,所有計算和訪問控制都在云端或邊緣上進行.這種架構繼承了傳統物聯網的計算模式,其終端設備主要任務是采集數據和執行命令.

Fig. 5 The architecture of IoT-Aggregator圖5 IoT-Aggregator架構[73]
2) 高能效Web.由于物端設備資源受限,應用于其上的Web系統必須是高能效的.這里的高能效指的是輕量級、速度快、功耗低.文獻[8]提出了一個從硬件到軟件完全開放的技術棧Φ-Stack,為物端設備提供智能、高效的Web支持.如圖6所示,Φ-Stack是一個全新的、軟硬件協同設計的系統棧,主要模塊包括ΦPU,ΦOS,ΦDK和應用程序Weblet.所有模塊的設計都優先考慮設備的物理功能.

Fig. 6 The structure of Φ-Stack圖6 Φ-Stack結構圖[8]
其他研究多集中于系統的某一部分實現部分目標.例如在硬件上,很多廠商將計算、通信、傳感等全部集成在一個芯片上,并盡可能地減少功耗.操作系統的主要設計目標則是占用更小的內存空間,為應用預留更多計算資源,提供更全面的功能(例如支持HTTP協議棧等)[75-76].
3) 支持智能.目前AI算法大多需要大量的數據和很強的計算能力,一般運行在云端.而由于資源限制,物端設備無法運行現有的絕大部分智能算法.我們需要在硬件和算法2個層面進行研究.在硬件上,需要設計面向物端設備的人工智能芯片,它應具有速度快、功耗低、面積小并且可重塑的特點,文獻[8]介紹了其為物端設備設計的一款基于RISC-V指令集的低功耗智能處理器ΦPU.ΦPU包含AI核、大核(通用核)和用于監視和控制傳感器的小核.其中AI核是一個能根據用戶需求可重塑的神經網絡處理引擎,實現了可重塑AI的概念.
在軟件上,應該考慮到人的參與因素,具體需要根據物端計算場景設計輕量級智能算法,需要基于小數據集進行實時在線學習、遷移學習,需要提出適用于物端計算場景的計算框架等.弗羅里達大學提出了一個注重用戶滿意度的CNN 推理框架——Pervasive CNN (P-CNN)[77].P-CNN在物端計算的場景下滿足終端用戶的多樣性需求,為不同的推理任務提供最佳的用戶滿意度.P-CNN框架由跨平臺離線編譯(cross-platform offline compilation)和運行時間管理(runtime management)兩個部分組成,可根據用戶的需求生成不同的內核.該架構在符合可接受準確率的要求下動態地確定一個最快的內核,內核調度器會為每一層神經網絡分配出最優的計算資源,并根據用戶的反饋選擇最優內核.
4) 物端調試技術.物端計算系統本身受物理環境影響大,而REST這種松耦合架構會給系統軟件帶來更大的不確定性,具體體現在響應延遲上.這種不確定性給物端系統程序的調試帶來尤其巨大的挑戰,程序員可能無法使用現有的調試的方法來驗證程序的正確性.為了設計高效、安全、可移植的Web底層代碼格式,研究者們提出了名為WebAssembly[78]的字節碼技術.該技術具有高效率、速度快、安全、可調試等特點,然而WebAssembly的設計并沒有考慮到物端設備資源相對受限的特性.
信息技術的發展即將進入萬物互聯時代,聯網的每個節點是計算機化、智能化、可重塑的[79],需要通用的軟硬件體系架構支撐應用的無縫運行和系統間的自主協作.本文詳細調研了將Web技術應用到物端計算系統的一些工作.我們可以得出結論:物端計算系統市場規模巨大,但設備資源受限、功能弱.其尚無一個實際的既支持REST Web架構,又支持智能的系統平臺,即沒有一個統一的體系架構.大多數研究只是針對某一個方面的問題進行優化.針對物端系統的多樣性和資源受限特性,文獻[8]提出了一個軟硬件協同設計的開放式架構棧Φ-Stack.通過“軟硬件高度協同設計”和“原生的支持Web和智能”2個核心創新手法來設計和構造高效能的、適合物端設備的REST Web體系結構.Φ-Stack的最終目標是將物端設備計算機化,從而徹底地改造現在的物端計算系統.
本文在第1節分析了物端計算系統的現狀和存在的問題與挑戰.然后,調研和分析了學術界和工業界為應對這些挑戰而做出的努力.在第2節詳細分析了5個典型的基于REST的物端計算系統應用層協議的特性.這些協議大多數只針對“統一接口”原則進行改進,并不能滿足物端計算系統的需求.第3節中,我們詳細調研和分析了一些代表性的腳本語言,并對它們的性能做了簡單的評估.其中Lua開發出的腳本程序占用存儲空間最小,適合用來改進并應用于資源受限的物端計算系統.第4節詳細調研了嵌入式系統使用的應用程序調試技術.最后,本文總結了未來物端計算系統需要致力的4個關鍵問題,包括統一的體系結構、高能效Web、物端智能和物端調試技術.隨著技術不斷進步,物端計算系統、移動互聯網、桌面互聯網最終會組成一個萬物互聯網絡,成為未來人工智能應用的基礎設施.為“萬物互聯”設計一個相互兼容的軟件架構風格來指導其體系結構的建立,會為即將爆發的人工智能應用的爆發打下堅實的基礎.
[1] Evans D. The Internet of things: How the next evolution of the Internet is changing everything[R/OL]. San Jose, CA: CISCO, 2011. [2017-11-15]. https://www.cisco.com/c/dam/en_us/about/ac79/docs/innov/IoT_IBSG_0411FINAL.pdf
[2] Satyanarayanan M. The emergence of edge computing[J]. Computer, 2017, 50(1): 30-39
[3] Shi W, Dustdar S. The promise of edge computing[J]. Computer, 2016, 49(5): 78-81
[4] Ahmed A, Ahmed E. A survey on mobile edge computing[C] //Proc of the 10th Int Conf on Intelligent Systems and Control. Piscataway, NJ: IEEE, 2016: 1-8
[5] Shi Weisong, Sun Hui, Cao Jie, et al. Edge computing—an emerging computing model for the Internet of everything era[J]. Journal of Computer Research and Development, 2017, 54(5): 907-924 (in Chinese)
(施巍松, 孫輝, 曹杰, 等. 邊緣計算: 萬物互聯時代新型計算模型[J]. 計算機研究與發展, 2017, 54(5): 907-924)
[6] Bonomi F, Milito R, Zhu Jiang, et al. Fog computing and its role in the Internet of things[C] //Proc of the 1st Edition of the MCC Workshop on Mobile Cloud Computing. New York: ACM, 2012: 13-16
[7] Fielding R T, Taylor R N. Principled design of the modern Web arc-hi-tecture[C] //Proc of the 22nd Int Conf on Software Engineering. New York: ACM, 2000: 407-416
[8] Xu Zhiwei, Peng Xiaohui, Zhang Lei, et al. The Φ-stack for smart Web of things[C] //Proc of SmartIoT’17. New York: ACM, 2017: Article No.10
[9] Drytkiewicz W, Radusch I, Arbanowski S, et al. pREST: A REST-based protocol for pervasive systems[C] //Proc of 2004 IEEE Int Conf on Mobile Ad-hoc and Sensor Systems. Piscataway, NJ: IEEE, 2004: 340-348
[10] Caporuscio M, Funaro M, Ghezzi C, et al. Advanced Web Services: UbiREST-A Restful Service-Oriented Middleware for Ubiquitous Net-Working[M]. Berlin: Springer, 2014: 475-500
[11] Gavrin E, Lee S J, Ayrapetyan R, et al. Ultra lightweight JavaScript engine for Internet of things[C] //Proc of the 2015 ACM SIGPLAN Int Conf on Systems, Programming, Languages and Applications: Software for Humanity. New York: ACM, 2015: 19-20
[12] Xie Kaibin, Chen Haiming, Cui Li. PMDA: A physical model driven software architecture for Internet of things[J]. Journal of Computer Research and Development, 2013, 50(6): 1185-1197 (in Chinese)
(謝開斌, 陳海明, 崔莉. PMDA:一種物理模型驅動的物聯網軟件體系結構[J]. 計算機研究與發展, 2013, 50(6): 1185-1197)
[13] Liu Peng, Lance H, Suman B. Lightweight multitenancy at the network’s extreme edge[J]. Computer, 2017, 50(10): 50-57
[14] Dey S, Mukherjee A, Paul H S, et al. Challenges of using edge devices in IoT computation grids[C] //Proc of 2013 Int Conf on Parallel and Distributed Systems. Piscataway, NJ: IEEE, 2013: 564-569
[15] Bormann C, Ersue M, Keranen A. Terminology for constrained node networks, RFC7228[R]. Fremont, CA: IETF, 2014
[16] Hahm O, Baccelli E, Petersen H, et al. Operating systems for low-end devices in the Internet of things: A survey[J]. IEEE Internet of Things Journal, 2016, 3(5): 720-734
[17] Atzori L, Iera A, Morabito G. The Internet of things: A survey[J]. Computer Networks, 2010, 54(15): 2787-2805
[18] Levis P, Madden S, Polastre J, et al. Ambient Intelligence: TinyOS: An operating system for sensor networks[M]. Berlin: Springer, 2005: 115-148
[19] Dunkels A, Grnvall B, Voigt T. Contiki-a lightweight and flexible operating system for tiny networked sensors[C] //Proc of the 38th Annual IEEE Conf on Local Computer Networks. Piscataway, NJ: IEEE, 2004: 455-462
[20] Sakamura K. The Objectives of the TRON Project: TRON Project 1987 Open-Architecture Computer Systems[M]. Berlin: Springer, 1987: 3-16
[21] Al-Fuqaha A, Guizani M, Mohammadi M, et al. Internet of things: A survey on enabling technologies, protocols, and applications[J]. IEEE Communications Surveys & Tutorials, 2015, 17(4): 2347-2376
[22] Heuer J, Hund J, Pfaff O. Toward the Web of things: Applying Web technologies to the physical world[J]. Computer, 2015, 48(5): 34-42
[23] Surhone L M, Timpledon M T, Marseken S F, et al. Z-Wave[J]. Internet of Things Key Applications & Protocols, 2010, 39(4): 620-622
[24] Gill K, Yang S H, Yao F, et al. A zigbee-based home automation system[J]. IEEE Trans on Consumer Electronics, 2009, 55(2): 422-430
[25] Gomez C, Oller J, Paradells J. Overview and evaluation of bluetooth low energy: An emerging low power wireless technology[J]. Sensors, 2012, 12(9): 11734-11753
[26] Kushalnagar N, Montenegro G, Schumacher C. IPv6 over low-power wireless personal area networks (6LoWPANs): Overview, assumptions, problem statement, and goals, RFC4919[R]. Fremont, CA: IETF, 2007
[27] Bormann C, Castellani A P, Shelby Z. CoAP: An application protocol for billions of tiny Internet nodes[J]. IEEE Internet Computing, 2012, 16(2): 62-67
[28] Kamio M, Nakamura K, Kobayashi S, et al. Micro T-Kernel: A low power and small footprint RTOS for networked tiny devices[C] //Proc of the 6th Int Conf on Information Technology: New Generations. Piscataway, NJ: IEEE, 2009: 587-594
[29] ARM Limited. Mbed[EB/OL]. [2017-11-15]. https://www.mbed.com
[30] Ahlgren B, Hidell M, Ngai C H. Internet of things for smart cities: Interoperability and open data[J]. IEEE Internet Computing, 2016, 20(6): 52-56
[31] Shi Weisong, Cao Jie, Zhang Quan, et al. Edge computing: Vision and challenges[J]. IEEE Internet of Things Journal, 2016, 3(5): 637-646
[32] Eugster P, Sundaram V, Zhang Xiangyu. Debugging the Internet of things: The case of wireless sensor networks[J]. IEEE Software, 2015, 32(1): 38-49
[33] Wilde E. Putting things to REST, 2007-015[R/OL]. Berkeley: School of Information, University of California, Berkeley, 2007. [2017-11-15]. http:/dret.net/netdret/docs/wilde-irep07-015-restful-things.pdf
[34] Guinard D, Trifa V, Mattern F, et al. From the Internet of things to the Web of things: Resource-oriented architecture and best practices[G] //Architecting the Internet of Things. Berlin: Springer, 2011: 97-129
[35] Luckenbach T, Gober P, Arbanowski S, et al. TinyREST: A protocol for integrating sensor networks into the Internet[C] //Proc of 2015 the Workshop on Real-World Wireless Sensor Networks. New York: ACM, 2005: 101-105
[36] Hou Chenda, Li Dong, Qiu Jiefa, et al. SeaHttp: A resource-oriented protocol to extend REST style for Web of things[J]. Journal of Computer Science and Technology, 2014, 29(2): 205-215
[37] Yashiro T, Kobayashi S, Koshizuka N, et al. An Internet of things (IoT) architecture for embedded appliances[C] //Proc of 2013 IEEE Region 10 Humanitarian Technology Conf. Piscataway, NJ: IEEE, 2013: 314-319
[38] Raza S, Shafagh H, Hewage K, et al. Lithe: Lightweight secure CoAP for the Internet of things[J]. IEEE Sensors Journal, 2013, 13(10): 3711-3720
[39] Konieczek B, Rethfeldt M, Golatowski F, et al. Real-time communication for the Internet of things using jCoAP[C] //Proc of the 18th IEEE Int Symp on Real-Time Distributed Computing. Piscataway, NJ: IEEE, 2015: 134-141
[40] Cirani S, Picone M, Veltri L. mjCoAP: An Open-source Lightweight Java CoAP Library for Internet of Things Applications[M]. Berlin: Springer, 2015: 118-133
[41] Tanganelli G, Vallati C, Mingozzi E. CoAPthon: Easy development of CoAP-based IoT applications with Python[C] //Proc of the 2nd IEEE World Forum on Internet of Things. Piscataway, NJ: IEEE, 2015: 63-68
[42] Stirbu V. Towards a RESTful plug and play experience in the Web of things[C] //Proc of the 6th IEEE Int Conf on Semantic Computing. Piscataway, NJ: IEEE, 2008: 512-517
[43] Kim S, Hong J Y, Kim S, et al. RESTful design and implementation of smart appliances for smart home[C] //Proc of IEEE UIC-ATC-SCALCOM’14. Piscataway, NJ: IEEE, 2015: 717-722
[44] Kovatsch M, Lanter M, Duquennoy S. Actinium: A RESTful runtime container for scriptable Internet of things applications[C] //Proc of the 3rd Int Conf on the Internet of Things. Piscataway, NJ: IEEE, 2012: 135-142
[45] Jaimini U, Dhaniwala M. JavaScript empowered Internet of things[C] //Proc of the 3rd Int Conf on Computing for Sustainable Global Development. Piscataway, NJ: IEEE, 2016: 2373-2377
[46] Ierusalimschy R, De Figueiredo L H, Celes Filho W. Lua-an extensible extension language[J]. Software Practice and Experience, 1996, 26(6): 635-652
[47] Yamamoto T, Oyama H, Azumi T. Lightweight ruby framework for improving embedded software efficiency[C] //Proc of the 4th IEEE Int Conf on Cyber-Physical Systems, Networks, and Applications. Piscataway, NJ: IEEE, 2016: 71-76
[48] Apache. IoT.js[EB/OL]. [2017-11-15]. http://iotjs.net
[49] The Hybrid Group. Cylon.js[EB/OL]. [2017-11-15]. https://cylonjs.com
[50] Tilkov S, Vinoski S. Node.js: Using JavaScript to build high-performance network programs[J]. IEEE Internet Computing, 2010, 14(6): 80-83
[51] Hemphill E. DeviceJS is Javascript for the physical world[EB/OL]. [2017-11-15]. http://devicejs.org/blog/post/devicejs-is-javascript-for-the-physical-world
[52] Nagumanthri A D, Tanaka K. Internet of things with mruby[C] //Proc of 2016 Int Conf on Information Technology. Piscataway, NJ: IEEE, 2016: 142-147
[53] Khamphroo M, Kwankeo N, Kaemarungsi K, et al. MicroPython-based educational mobile robot for computer coding learning[C] //Proc of 2017 Information and Comm-unication Technology for Embedded Systems. Piscataway, NJ: IEEE, 2017: 131-136
[54] Software in the Public Interest Inc. The computer language benchmarks game[EB/OL]. [2017-11-15]. http://bench marksgame.alioth.debian.org
[55] Wikipedia. Cross compiler[EB/OL]. [2017-11-15]. https://en.wikipedia.org/wiki/Cross_compiler
[56] MacNamee C, Heffernan D. Emerging on-ship debugging techniques for real-time embedded systems[J]. Computing & Control Engineering Journal, 2000, 11(6): 295-303
[57] R?ssler P, H?ller R. A novel debug solution for distributed embedded applications and implementation options[C] //Proc of the 37th IEEE Annual Conf on Industrial Electronics Society. Piscataway, NJ: IEEE, 2011: 2796-2801
[58] Wang J R, Yu C-H. ROM emulator: USA, US20060224377[P/OL]. 2006-10-15. [2017-11-15]. http://www.freepatentsonline.com/20060224377.pdf
[59] Chikao Uchino. In-circuit emulator system: USA, US20040078671A1[P/OL]. 2004-04-22. [2017-11-15]. http://www.freepatentsonline.com/20040078671.pdf
[60] Sutter E. Embedded Systems Firmware Demystified[M]. Boca Raton, FL: CRC Press, 2002: 247-249
[61] Gatliff B. Embedding with gnu: The gdb remote serial protocol[J]. Embedded Systems Programming, 1999, 12(11): 108-113
[62] Ibrahim D. Microcontroller debugging and testing tools[J]. Electronics World, 2009, 115: 20-23
[63] Huang Hongyan. Analysis and design of debugging technology in embedded system[D]. Hangzhou: Zhejiang University, 2016 (in Chinese)
(黃紅燕. 嵌入式系統調試技術的分析與設計[D]. 杭州: 浙江大學, 2016)
[64] Logt L V D, Heyden F V D, Waayers T. An extension to JTAG for at-speed debug on a system[C] //Proc of IEEE Int Test Conf (ITC). Piscataway, NJ: IEEE, 2003: 123-130
[65] Kra Y. A cross-debugging method for hardware/software co-design environments[C] //Proc of the 30th Int Design Automation Conf. New York: ACM, 1993: 673-677
[66] Lee Y-H, Song Y W, Girme R, et al. Replay debugging for multi-threaded embedded software[C] //Proc of the 8th IEEE/IFIP Int Conf on Embedded and Ubiquitous Computing. Piscataway, NJ: IEEE, 2010: 15-22
[67] Dunlap G W, King S T, Cinar S, et al. ReVirt: Enabling intrusion analysis through virtual-machine logging and replay[J]. ACM SIGOPS Operating Systems Review, 2002, 36(SI): 211-224
[68] Honarmand N. Record and deterministic replay of parallel programs on multiprocessors[D]. Urbana-Champaign, IL: University of Illinois at Urbana-Champaign, 2015
[69] Luo Yan. Research and primitive implementation of backtracking debugging based on process snapshotting in kernel mode[D]. Hangzhou: Zhejiang University, 2008 (in Chinese)
(羅琰. 基于內核模式下進程快照的可回溯調試研究及初步實現[D]. 杭州: 浙江大學, 2008)
[70] Jiang Shan. Research on reversible debugging on embedded multicore[D]. Hangzhou: Zhejiang University, 2016 (in Chinese)
(江山. 嵌入式多核架構可逆調試技術研究[D]. 杭州: 浙江大學, 2016)
[71] Wu Mingqi, Ma Chao. A software-hardware cooperative remote debugging method for embedded system[J]. Microcontrollers and Embedded Systems, 2005(7): 15-16 (in Chinese)
(吳明琪, 馬潮. 一種軟硬結合的嵌入式系統遠程調試方法[J]. 單片機與嵌入式系統應用, 2005(7): 15-16)
[72] Salman O, Elhajj I, Kayssi A, et al. Edge computing enabling the Internet of things[C] //Proc of the 2nd IEEE World Forum on Internet of Things (WF-IoT). Piscataway, NJ: IEEE, 2015: 603-608
[73] Asano S, Yashiro T, Sakamura K. Device collaboration framework in IoT-aggregator for realizing smart environment[C] //Proc of 2016 TRON Symposium. Piscataway, NJ: IEEE, 2016
[74] Koshizuka N, Sakamura K. Ubiquitous ID: Standards for ubiquitous computing and the Internet of things[J]. IEEE Pervasive Computing, 2010, 9(4): 98-101
[75] Choi N, Kim D, Lee S J, et al. A fog operating system for user-oriented IoT services: Challenges and research directions[J]. IEEE Communications Magazine, 2017, 55(8): 44-51
[76] Cao Jie, Xu Lanyu, Abdallah R, et al. EdgeOS_H: A home operating system for Internet of everything[C] //Proc of the 37th IEEE Int Conf on Distributed Computing Systems. Piscataway, NJ: IEEE, 2017: 1756-1764
[77] Song Mingcong, Hu Yang, Chen Huixiang, et al. Towards pervasive and user satisfactory CNN across GPU microarchitectures[C] //Proc of 2017 IEEE Int Symp on High-Performance Computer Architecture. Piscataway, NJ: IEEE, 2017: 1-12
[78] Haas A, Rossberg A, Schuff D L, et al. Bringing the Web up to speed with WebAssembly[C] //Proc of the 38th ACM Sigplan Conf on Programming Language Design and Implementation. New York: ACM, 2017: 185-200
[79] Shi Hailong, Li Dong, Qiu Jiefan, et al. EasiSHA: A reconfigurable node architecture for IoT based on joint design of software and hardware[J]. Journal of Computer Research and Development, 2014, 51(5): 959-973 (in Chinese)
(石海龍, 李棟, 邱杰凡, 等. EasiSHA: 一種軟硬件協同的物聯網可重塑終端架構[J]. 計算機研究與發展, 2014, 51(5): 959-973)