Java對你而言是什么?一門你大學里學過的語言?一個IT行業(yè)的通用語言?你相信Java已經(jīng)為下一次互聯(lián)網(wǎng)爆炸做好了準備么?Java 一方面為嵌入式計算做了增強,而另一方面為實時應用做了精簡,本文將介紹為什么 Java 是IoT(物聯(lián)網(wǎng))開發(fā)的最佳語言。
為嵌入式計算增強、為實時系統(tǒng)精簡——為什么 Java 是最適合 IoT 的語言
自1969年至今,我們可以看到網(wǎng)絡設備爆炸式的增長:從最初四個大學的計算機群構(gòu)建成的ARPANET,直到現(xiàn)今互聯(lián)網(wǎng)上有兩億活躍用戶。而不久之后的將來這一數(shù)字將會呈指數(shù)級的增長,從幾億臺設備到數(shù)十億嵌入式處理設備。我們生活的方方面面都將通過網(wǎng)絡設備接入互聯(lián)網(wǎng):家庭、工作場所、汽車、家電、工具、玩具——一切由你說了算。
?。ㄗg者注:美國高等研究計劃署網(wǎng)絡 Advanced Research Projects Agency Network,美國國防高等研究計劃署開發(fā)的世界上第一個運營的封包交換網(wǎng)絡,它是全球互聯(lián)網(wǎng)的始祖。最初由西海岸的四個節(jié)點, 加州大學洛杉磯分校(UCLA)、斯坦福研究院(SRI),加州大學圣巴巴拉分校(UCSB)和猶他大學(UTAH)構(gòu)成)
為嵌入式系統(tǒng)打造的Java
十九年前,David L. Ripps 為 JavaWorld寫了一篇介紹Java和嵌入式系統(tǒng)相關(guān)的文章。如果你想要明白嵌入式系統(tǒng)編程、移動互聯(lián)設備、物聯(lián)網(wǎng)三者之間的相互協(xié)作,Ripps 的文章依然是非常受用的。
雖然時下關(guān)于物聯(lián)網(wǎng)(Internet of Things)的閑談有部分炒作之嫌,但本質(zhì)上來說,下一刻在互聯(lián)網(wǎng)中將要發(fā)生的改變,會使前幾代信息處理技術(shù)黯然失色。物聯(lián)網(wǎng)不只是流口常談之物,而是改變世界的新技術(shù)。參考下面的時間線,這展示了如我們所知的那些互聯(lián)網(wǎng)中的引爆點:
1982年到1989年:TCP/IP網(wǎng)絡誕生。
1985年到1989年:互聯(lián)網(wǎng)商業(yè)化開始出現(xiàn)。
1990年到1991年:萬維網(wǎng)正式建立。
1990年到1998年:傳統(tǒng)計算機真正意義上被重新設計為互聯(lián)網(wǎng)設備。
1996年至今:雖然緩慢但確信的是,我們步入了由移動互聯(lián)網(wǎng)絡設備(即物聯(lián)網(wǎng))“統(tǒng)治”的時代。
物聯(lián)網(wǎng)的補充技術(shù)正在陸續(xù)上線。HTTP/2作為新版的關(guān)鍵網(wǎng)絡協(xié)議,在一定程度上將適應機器到機器的通訊。Thingsee 則是物聯(lián)網(wǎng)開發(fā)套件的先驅(qū),它提供了物聯(lián)網(wǎng)開發(fā)所需的硬件。
硅谷智者 Tim O’Reilly 作出強調(diào)說,物聯(lián)網(wǎng)的成果遠不只是將咖啡機、電冰箱這種無關(guān)緊要的設備接入網(wǎng)絡。在充足的傳感器和自動化設備的支撐下,物聯(lián)網(wǎng)無疑將會是人類的巨大進步。Java 在即將到來的變革中將承擔主力軍的角色。
物聯(lián)網(wǎng)是怎么工作的
2014年9月,Andrew C. Oliver撰寫了這樣一篇文掌,在實現(xiàn)層面討論了網(wǎng)聯(lián)網(wǎng)在團隊協(xié)作中的重要性。在這種情況下,團隊協(xié)作將同時凝結(jié)人類與計算機。
由于設備不只是和人類用戶溝通,也需要和其他設備溝通,從根本上新的功能出現(xiàn)了——冰箱不僅能夠知道你的番茄用完了,它還可以以你的名義訂購更多。普適計算的成功之處在于,計算機將退居“幕后”,與其他連接的設備一起運算出實事與事件及解決方案。只有可執(zhí)行級別的結(jié)果將會被提交給用戶?;ヂ?lián)網(wǎng)的成就將使我們不再考慮過多,因為物聯(lián)網(wǎng)無縫地為我們解決了一切。
最平凡的例子往往是最有說服力。在最近的新聞當中,我們親眼見證了一系列令人印象深刻的物聯(lián)網(wǎng)應用方式,包括農(nóng)業(yè)害蟲處理、小型炸彈嗅探器以及醫(yī)療診斷技術(shù)的進步等。想想卑微的自動販賣機的代替品——它適量地存儲、被妥善地維護,永遠默默地等待著你的命令。
當你將你的賬單放進一臺自動販賣機并按下按鈕執(zhí)行你的購買時,會有幾種交互機制以確認能滿足你的饑餓。你不需要理解或是認同整個實現(xiàn)過程,你的胃會對結(jié)果非常滿意?,F(xiàn)在,我們有了具備物聯(lián)網(wǎng)功能的自動販賣機了。當你在啟用物聯(lián)網(wǎng)的自動販賣上購買時,你的購買將會觸發(fā)遍布全球的操作以保持庫存的均衡、部件的妥善維護,這種新模式較前物聯(lián)網(wǎng)模式降低了30%的總成本。
Java的嵌入式計算之旅
現(xiàn)在只有少數(shù)人意識到 Java 是為嵌入式計算打造的語言。它的早期版本用意明確地劍指諸如電視機頂盒接口一類的家用電器。James Gosling (Java 之父)關(guān)于最初的設想是以設備間通信為核心的,他設想 Java 不僅僅被用于設備到用戶的通信,同時也被用于設備到設備的通信。二十年之后,這些初始設計優(yōu)勢已經(jīng)準備好來支持物聯(lián)網(wǎng)了。
Java 的普適性也使之非常好地適應物聯(lián)網(wǎng)。來自世界各地的大量的資源傾注于將 Java 傳輸給新一代程序員,并確保它已經(jīng)被維護——以支持所有依賴于之的產(chǎn)品系統(tǒng)。數(shù)以十萬計的成功的應用程序和系統(tǒng)已經(jīng)證明了 Java 的才能。
對于探索嵌入式編程的開發(fā)人員來講區(qū)分Java平臺的部分是很重要的。沒必要為嵌入式開發(fā)做出編寫或閱讀程序的改變:好的 Java 程序員可以很容易地閱讀嵌入式系統(tǒng)的源代碼,像他們閱讀典型的桌面企業(yè)應用一樣。不過庫和開發(fā)環(huán)境(特別是開發(fā)和測試的環(huán)境)是為嵌入式 Java 編程所定制的。確保你有正確的嵌入式開發(fā)環(huán)境。
Java 對嵌入式系統(tǒng)來說是否過于龐大?
因為嵌入式設備對于計算性能總是捉襟見肘,Java 往往不是嵌入式開發(fā)的第一選擇。匯編、C 甚至是 Python 都能在局限的內(nèi)存、低功率的 CPU 或是有其他硬件限制的系統(tǒng)上更能吃得開。然而,隨著嵌入式環(huán)境平均水平的增長,近些年來這種妨礙已經(jīng)逐漸在消失。嵌入式環(huán)境下新的 Java 編譯技術(shù)的采用也使資源需求也有所縮減。
2015年 Java 嵌入式開發(fā)的展望
Java 早在 1996 年就有了進行嵌入式編程的資質(zhì),然而缺乏勢頭。今天這種趨勢發(fā)展迅速,一套為嵌入式打造的生態(tài)系統(tǒng)——包含 Java 標準和工具——已經(jīng)蓄勢以待。
在 2000 年到 2010 年間,基于 Java 的嵌入式或“微”計算集中在 J2ME (Jave 2 Platform, Micro Edition)是一個普遍事實?,F(xiàn)在, Java 平臺,微型版本或者說 Java ME已經(jīng)是標準的嵌入式應用運行環(huán)境了。盡管Java ME和它的概念——特別是profiles和configurations ——依然非常關(guān)鍵,但移動 Java 開發(fā)者往往更專注于Android和HTML5的用戶界面。移動電話是最常見的嵌入式計算機,現(xiàn)在銷售的手機大約有五分之四基于安卓系統(tǒng)。(雖然 Android 支持 Java ME,但這兩個有不同的產(chǎn)品生命周期,而且尚不清楚誰將決定什么會是下一代實際嵌入式設備的應用程序環(huán)境)。
?。ㄗg者注: profiles 常譯作簡表,是某個行業(yè)或某個領(lǐng)域內(nèi)的特性概括,每套簡表專門針對某一類設備;configurations 常譯作配置,Java ME引入了配置的概念,屏蔽了不同硬件設備的物理特性)
簡表(profiles)和配置(configurations)在嵌入式編程中是非常關(guān)鍵的概念。一個像MIDP(Mobile Information Device Profile,移動信息設備配置文件)這樣的嵌入式簡表是一套 API 的集合,用于支持相關(guān)的設備。而配置則是一套框架規(guī)范。不嚴謹?shù)貙⑴渲每醋魇呛啽淼乃鶎?,也許有助于理解簡表這一概念,包括最顯著的 CLDC (Connected Limited Device Configuration)或稱之為有線連接設備配置也符合這一所想。(見 “Jim Connors’ Weblog” 以了解更多有關(guān)應用于物聯(lián)網(wǎng)的簡表和配置)。
除了 Java ME 的簡表和配置之外,一小撮企業(yè)級 Java 技術(shù)持有嵌入式開發(fā)的潛力。用于分布式資源管理與監(jiān)測的Java 管理擴展 (即JMX Java Management Extensions)可以在有朝一日完整地補足嵌入式的定義。Real-time Java (實時 Java)在物聯(lián)網(wǎng)嵌入式編程中也占據(jù)著重要地位。
Java 的實時模型與工具
在醫(yī)療、運輸、制造和其他行業(yè)中,連接傳感器與效應器的嵌入式應用程序?qū)τ趯崟r要求非常高??深A測的、準確的結(jié)果對于心臟起搏器、 發(fā)動機控制器,管道閥門等等都關(guān)乎生死,而不只是惱人的堆?;厮?。
雖然 James Gosling 想讓 Java 去完成普遍的實時要求,但在早年間實時并不是 Java 的強項。尤其是很多 Java 運行時(Java Runtimes)聲名狼藉,全因為它們并不可靠或者至少也在處理垃圾回收的時候不協(xié)調(diào)。RTSJ(Real-Time Specification for Java,即 Java 實時規(guī)范)以及相關(guān)標準用以處理這些事件的時間不確定性——定期或零星的任務調(diào)度、任務期限和 CPU 時間預算、垃圾收集線程、啟用某些任務以避免垃圾收集延遲的定量供給。RTSJ 被批準于2002年,已經(jīng)被許多Java虛擬機實現(xiàn)。
雖然RTSJ在2015年2月之前一直被Java社區(qū)進程(Java Community Process)列為擱置項目,但過去十年中專家們一直積極地對其進行改善與更新。舉例而言,JamaicaVM 就是一套由 aicas GmbH 支持的RTSJ實現(xiàn)方案,現(xiàn)在免費提供給教育或其他非商業(yè)用途使用。
實時系統(tǒng)的時間線
嵌入式尤其是實時標準發(fā)展的時間線普遍較典型消費軟件長的多。一個成功的移動 App 可能在六個月間達到峰值并消失出視線,而在醫(yī)療設備,汽車和工廠的嵌入式軟件往往需要幾十年的可靠運行。而影響這些應用程序的已發(fā)布標準相應地需要更長時間來起草。
最近 Oracle 推出了Java SE 實時系統(tǒng),暗示著Java SE 已經(jīng)被充分增強以滿足“軟”實時要求?!败洝痹谶@里至少有兩個截然不同的含義。一是要求有軟件有平均水平的性能表現(xiàn),例如,一次普通的銀行交易在 300 毫秒內(nèi)被發(fā)送就足夠好了。 “硬”實時要求是完全不同的,例如某個機動電磁閥,在應用程序接收警報的四分之一秒內(nèi)關(guān)閉都是最壞情況?!坝病睂崟r的最關(guān)鍵要求在這種意義上來講,即是最壞情況能被預測。
對很多嵌入物聯(lián)網(wǎng)的應用來講,“軟”實時是完全合格的。對于需要硬實時支持的應用程序,Java 開發(fā)人員很大程度上轉(zhuǎn)向 JSR-302:安全關(guān)鍵型的 Java 技術(shù)。這個規(guī)范是 Java 實時規(guī)范的一個子集,它部分依賴于 CLDC。除了其他特性之外,安全關(guān)鍵型的 Java 定義了自己的并發(fā)模型和實時線程。The Open Group 最初在 2003 年開始致力于安全關(guān)鍵型 Java 的工作。今春在被問及該規(guī)范的狀況時,JSR 302 規(guī)范的主管 Doug Locke估計在長期的醞釀后,在 2015 年 5 月初將會有一個規(guī)范被認證,其中包含一套實現(xiàn)方式的參考。
嵌入式 Java 的未來前景
Java 在嵌入式編程中有諸多期許,而為使之能夠滿足即將到來的物聯(lián)網(wǎng)大爆炸中的需求與契機,還有長遠的路要走。未來幾年中,數(shù)百億美元的 Java 驅(qū)動的設備將作為物聯(lián)網(wǎng)的一部分被投入使用。我下一篇相關(guān)話題的文章會分別以愛好者和商業(yè)環(huán)境為例,列舉 Java 嵌入式編程的具體實例,并更加深入地解釋為何 RTSJ 2.0 對 Java 實時編程的影響會遠遠超越傳統(tǒng)領(lǐng)域。