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