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