天天看點

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和它的概念——特别是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 實時程式設計的影響會遠遠超越傳統領域。

繼續閱讀