Java:過去、未來的互聯網編程之王
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和它的概念——特別是 profile s和 configuration s ——依然非常關鍵,但移動 Java 開發者往往更專注于Android和HTML5的用戶界面。移動電話是最常見的嵌入式計算機,現在銷售的手機大約有五分之四基于安卓系統。(雖然 Android 支持 Java ME,但這兩個有不同的產品生命周期,而且尚不清楚誰將決定什么會是下一代實際嵌入式設備的應用程序環境)。
( 譯者注: profile s 常譯作簡表,是某個行業或某個領域內的特性概括,每套簡表專門針對某一類設備; configuration s 常譯作配置,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 實時編程的影響會遠遠超越傳統領域。
原文鏈接: javaworld 翻譯:ImportNew.com -enigma