Java:過去、未來的網際網路程式設計之王

Bugtags發表於2016-03-05

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)的閒談有部分炒作之嫌,但本質上來說,下一刻在網際網路中將要發生的改變,會使前幾代資訊處理技術黯然失色。物聯網不只是流口常談之物,而是改變世界的新技術。參考下面的時間線,這展示瞭如我們所知的那些網際網路中的引爆點:

物聯網的補充技術正在陸續上線。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 實時程式設計的影響會遠遠超越傳統領域。

相關文章