什么是Project Zero?一個面向Web的平臺
什么是Project Zero?
用一個詞來形容,那就是:敏捷。我們的目標就是要為創建面向Web的應用引入敏捷。我們正準備圍繞三個方面進行創新。創新圍繞著創建面向Web應用,從存在的RESTful服務、feeds和內容中裝配和拼接新的應用,以使你從Web或者企業開發中解放出來,第三個方面就是執行這些應用。
讓我對每一方面稍微多說一點,因為它們都很酷。我認為圍繞著創建有兩個主要的概念。***個概念是動態腳本(dynamic scripting)。如何使你的項目變得敏捷?其實并沒有必要在面向對象的結構環境中編寫代碼,而可以使用腳本。
在Project Zero中我們認識到了這一點,所以便引入了2種腳本語言。
在深入探討腳本之前,我先說下Java。Java社區為我們提供了很好的服務,就像在IBM特別是WebSphere中那樣。 Java充滿了活力,也許能夠繼續輝煌十年。我們已經對Java的發展做了促進。現在Java已經成為了系統編程語言。它應該被用于實現Project Zero中精妙的部分,但我們希望你關于敏捷的***次經驗大部分來自動態腳本。
所以我們在Project Zero中提供了兩種動態腳本用于選擇。一個是為熟悉Java的人準備的——腳本語言Groovy。我在博客上曾開玩笑說Groovy是Java的尼古丁貼劑(nicotine patch)。當你開始使用Groovy貼劑,我們就有一定的把握讓你戒掉Java,轉而接受動態腳本。因此,如果你想不再使用Java,但又想能訪問你之前使用Java寫的類或者方法,你可以用Groovy做到這一點。但是,我們將讓你使用Groovy提供的更簡潔的動態語法,就像Ruby和 Python一樣。
另外,基于PHP的人氣和內容。我們認為使用Project Zero,通過基于一個公共Java平臺支撐的動態腳本語言Groovy和PHP,你的項目將會敏捷起來并且能按需編碼。
那么,動態腳本是其一。另一方面的概念是:Project Zero是基于SOA架構構建的,并且這個架構是一個RESTful的架構。圍繞著概念REST,我們已經做了約束和簡化。在Project Zero中,你基本上只需要使用HTTP。當你在Zero中表示一個服務的時候,就代表你在用RESTful的方式或者REST派生方式表示服務。我們可以用RSS feed或者ATOM feed的方式表示服務;但Web是我們使用Zero構建的主要平臺,而REST正是我們在Project Zero中構建的服務交互風格。
對此,我們同時考慮了現行的一些流行框架,并已經為此建立了一套約定。約定替代配置,因此如果你想要表示服務,并沒有必要編碼。Project Zero中有一套標準,如果你在構建服務的時候遵循它們,就會發生奇跡。將動態腳本和REST結合起來,現在你已經真正地理解了它!這是兩個真正重要的因素。
另一部分是裝配。對松耦合的系統來說,SOA的優點之一就是你可以從這些新近發布的服務中創建一套新的應用程序。在 Project Zero中我們會毫無疑問促進這個優點。正如我提到的,我們的服務模型是圍繞著一個面向Web模型構建的,因此它的構建基于REST、feeds。那么現在要做的就是通過腳本、PHP或者Groovy編寫程序,或者通過一套我們擁有的可視化編輯器設計,讓你圍繞剛剛創建或發布的基于Web面向Web的服務創建新的應用。或者可能重用其它來源的服務,比如來自Web或者你所在的企業。這就是關于裝配的基本想法。現在我們用一些有趣的功能來拓寬這些想法。
如果你已經在Web中使用了其它技術來可視化地創建動態Web應用,那我們是支持這些可視化技術的。Zero中提供了管道(Pipe)類型的接口。我們的一些裝配可視化工具并沒有什么太大的區別,但我們現在要做的區分是建立在一個很簡單的方法之上——圍繞流程的一些基本概念。不管我是否構造和裝配數據流(data-flow)——在數據流中我可以得到兩個feeds、匯集這些feeds、歸類這些feeds。這樣,我不僅通過創建數據流來構建一個應用或者構造一個新的裝配集,而且順著流程嵌入了活動,也就是活動流。因此,對于合并feed、發送郵件或者SMS信息這樣的服務,我可以使用可視化編輯的方式或者純編碼的方式將其混合匹配起來。我可以編寫Groovy或者PHP腳步來獲取feed,合并它、匯集它等等。能夠根據先前創建的服務迅速地組裝出新的應用,這非常強大,而且是對Project Zero敏捷特性的又一貢獻。
第三部分是關于執行。正如我剛才所說的,Java世界充滿了活力。我們圍繞Project Zero所做的就是將執行動態腳步語言(也就是Groovy和PHP)的環境集中于Java上。在運行時我們可以做許多有趣的事情,來優化這些動態腳步語言的執行。能工作在這個領域之中,我真的感到很興奮,特別是在為Websphere應用服務器在執行腳本可能性工作的這些年里。
什么是腳本?一份腳本有著非常精確的起點和終點。執行它,而后就會結束。很多運行在應用服務器之上的傳統應用程序是為了長期運行而構建的。那長期運行會有什么樣的問題呢?我們并不***,所以在這些程序中會有一些細小的缺陷,而且隨著時間的推移開始潰爛:內存泄露、線程吊起等等。這往往使應用程序運行時間越長越難駕馭。
Project zero的應用程序和執行環境傾向于采用運行隨即結束(run-and-done)的特性。開始一個腳本,運行結束然后停止(Kill)這個腳本,如此開始一個新的腳本,運行它并停掉它。即使應用編寫的不***,其中的缺陷也是可以忽視的。如果應用中存在內存泄露,至少它不會對結果或者系統有明顯的影響。我稱這種缺陷為海森堡蟲(HeisenBug)。我喜歡說Zero運行環境是對海森堡蟲免疫的,因為有些我們通常在運行的服務器中看到的缺陷是可以繞過去的,例如通過運行和完成腳本模型。我們可以得到很多有趣的好處。
關于執行環境的另一部分,即Zero是一個面向Web的平臺。我們知道如何來縮放網絡應用,我們已經在Websphere中做了好一段時間。Web自然地縮放;REST是極好的縮放協議。我之前提到過句子的比喻,url是圍繞內容的nounds、操作和動詞。基于此很容易建立緩存規則,并且非常準確。在其中有許多緩存技術,而且有一些我們正明確地構建于Zero中,以協助你構建高性能可伸縮的應用。分區(Partitioning)、負載管理(workload management)、高可用性(high availability),在面向Web的背景下,我們知道如何做到這一點。我們在Project Zero運行時中構建了這些。Project Zero可以運行在普通的JVM上,不過我們也會對其(特別是IBM的虛擬機)進行增強,以更好地運行敏捷的腳本化應用。
什么類型的應用不適合使用Project Zero,并且你何時需要整合其它資源來進行實踐?
當談到典型的Zero式RESTful應用時,我通常會用句子來比喻。當你思考一個基于Zero的應用時,想一想英語中的句子。在句子中有名詞、動詞和形容詞。我可以這樣造一個句子。名詞可能是“照片”,動詞是“觀察或者讀缺這個照片,“獲取照片”,并且形容詞是照片的類型 ——JPEG格式的照片。這個句子是:“讀取JPGE格式的照片”。在Zero中我可以表示這一點。名詞是RESTful實體。那你如何來表示一個 RESTful實體?用URL:/something/photo。動詞是“獲缺,而在REST的術語中正好有四個主要的動作:get、post、 put和delete。這樣句子就是“get photo”。數據類型是什么?可以是JPEG。想想構建這樣的服務就像組織句子一樣簡單。通過這種機制快速的表示語句、表示服務和暴露內容是非常強大的,能使你的時間實現價值。
數據從何而來?腳本的內容從何而來?我認為一種情況(特別是對于企業情況)是,數據來自外在環境。當你想基于那些數據開始構建應用時,打比方說我有一個商業系統;我不建議在Zero中構建商業系統,而可以使用Zero的一種情況是構建一套應用程序。我們稱其為情景應用(situational app)。你可能在年初并沒有計劃做這些應用,而是剛剛提出需求。在過去,你可能使用Lotus Notes和基于Lotus協作產品的工作平臺,或者Microsoft Visual basic,或者諸如此類的東西來構建這些應用。我們有一些典型的老企業應用,它們產生著數據,現在你想通過新的視圖查看數據,想用新的方式組合數據。可能會有多個來源的數據,一些企業數據,一些數據來自互聯網,你想把那些數據集合起來給出新的透視圖。你要做到這一點很快。
我沒有必要規定你使用限制類型的應用程序,但當你嘗試快速地完成某事而且數據來自外界時,可以說Project Zero是最有用的。