在Google雲端運算平臺Google App Engine(GAE)推出滿周年之際,Google宣布支援企業用戶常用的Java開發語言。在GAE平臺上,企業可以利用Google全球資料中心,來執行自己打造的Java應用程式。我們特別採訪Google臺灣雲端運算計畫主持人葉平,來分享打造雲端應用的祕訣。

Q:目前Google App Engine的使用狀況如何?
A:目前註冊了15萬個開發者帳號,超過4萬5千個應用程式。GAE上面所有應用程式的每天瀏覽總次數超過1億次。前1百大熱門應用,每月瀏覽數都超過1百萬次。

Q:除了支援Java,GAE還推出哪些新功能?
A:主要有四個新功能,第一個是支援Cron,可以在背景中定時執行程式,在設定檔中最多能設定20項要執行的工作,最快頻率是每分鐘執行一次。第二個功能是Database import,可以大量上傳或下載資料,不過,下載匯出功能目前只是實驗版。

第三項新功能是Access to firewalled data,只要企業內部防火牆開放存取權限,在Google上的GAE應用程式可以穿過企業防火牆,來讀取企業內部資料,目前在Google小工具和Google文件的試算表也可以透過這個通道存取企業內部資料。

網管人員只要安裝了Secure Data Connector這套開源程式,指定可存取的Google網域,透過X.509標準確認企業端和Google端彼此的伺服器身分後,就可以建立一個SSL加密的資料傳輸通道。當企業使用者要執行外部的雲端應用程式時,可以透過這個加密通道,來存取企業內部網站提供的資料網址。

Oracle在功能發表活動中,也示範如何將企業內部的Oracle CRM資料,透過這個通道傳輸到Google文件的試算表中對外分享。使用者可以透過Google當作中介網站,不需連線回企業網站也能閱讀內部資料。

Google在使用條款中也註明,不會偷看客戶傳輸的任何資料。透過這個機制,企業資料可以具有保密性,同時又能享受雲端協同作業的好處。第四項就是最多人關心的Java Runtime機制。

Q:GAE目前支援到哪個版本的Java,能夠支援所有套件的功能嗎?
A:GAE目前支援第六版Java。不過,針對第六版203個套件,Google沒有全部支援。有一些套件的功能在Google沙箱(sandbox)環境中沒有意義。例如網頁不需要桌面的介面功能套件Swing,GAE就不支援。另外像RMI遠端訊息傳遞也不支援,因為GAE只容許HTTP傳輸模式。剩下GAE有支援的Java套件,就和原來套件的功能一模一樣,不會有不相容的情形。

Q:使用Java的應用程式,仍然享有雲端運算的擴充性嗎?
A:有,因為GAE底層的儲存機制仍然是建立在BigTable系統上。

Q:目前有使用者反應還有一些程式錯誤?
A:因為GAE屬於早期預覽版本,只是告知我們有這項產品,發生問題或有功能需求,可以反應機制回報,我們會排出優先順序後加入開發時程中,後續會有很多小改版。但是,穩定版本的推出時程,我們通常也不會預先公布。

Q:支援Java後,有提供開發工具的支援嗎?
A:可以在Eclipse上安裝GAE的外掛工具,不像先前MAC版只提供部署工具,Eclipse上的GAE工具會在本地端建立小型的模擬執行環境,提供除錯追蹤機制,可以逐行追蹤。對開發者而言,開發流程和原來Java的流程一模一樣。程式開發完成,按下部署按鈕,就可以將應用程式發布到Google伺服器中。

Q:可以支援Hibernate這類ORM的框架嗎?
A:因為Hibernate底層必須是關連式資料庫,所以,GAE完全無法支援。我們內部討論過是否要打造一套關連式資料庫,評估過是一個很大的工程,目前我們沒有足夠人力來開發。

Q:開發雲端平臺上的應用時,最大的困難是資料結構的處理嗎?
A:沒錯,開發者需要了解分散式資料庫的特性,了解BigTable的基本原理,根據這些特性來設計資料架構,才會有效率和好的擴充性。

比如,BigTable是沒有關連性,光是同一列資料就可能拆開儲存在不同的伺服器上,一個表更是儲存在很多伺服器上,這種分散特性的影響,像是要做資料查詢時的加總計算非常困難,反而必須在插入資料時進行計算。

進一步來說,在SQL語法中,開發者經常使用select count(*) from 表格的語法,來計算資料筆數,在BigTable中,應用程式必須連線到每一臺伺服器讀取資料,才能統計出總數,效率很差。

比較好的作法是,先建立一個計數用的資料欄位,每次新增資料時,程式自動將新增數量加總到那個欄位的內容。需要讀取總數的資訊時,直接取出那個資料欄位的數字即可。此外,像資料表有Secondary key時,光是排序也會是個很複雜的問題。


Google臺灣雲端運算計畫主持人葉平認為,開發雲端應用時,最大的困難是資料結構的處理。

Q:GAE的資料庫系統和關連式資料庫有什麼不同?
A:GAE上儲存資料的方式是Datastore,這是在BigTable上面一層的資料庫系統。Datastore是物件化的資料庫,一筆資料就是一個物件,每次存取都是整個物件。

沒有關連式資料庫的外部索引(Foreign Key)機制,只有類似的機制叫做參考(Reference),可以透過參考來找到物件。此外,GAE也不提供資料表結合(Join)的功能,因為BigTable只有一個表,所有資料都放在上面。

Q:關連式資料庫的作法中,經常會將客戶資料和訂單資料分開,只有1張表的GAE要如何處理呢?
A:一種常見的作法是在一列中只儲存一個客戶資料,包括基本資料和所有相關的訂單資料。BigTable有一個很大的特性是每一個列的長度可以不同,也可以這一列有A、B、C欄位,另外一列則是B、D、G、H,單一列甚至可以有上百萬個欄位。不同列可以容許資料長度不同、欄位不同,這也和傳統關連式資料有很大的差異。

Q:將同一個客戶的所有資料都放到同一列中,會不會影響效率?
A:不會。剛提到不同列的資料會放在不同伺服器,同一列資料的不同欄位也會存在很多伺服器。不同應用程式可以只讀取同一列資料中需要的欄位就好,不用存取整列資料。另外,還提供了欄位家族(Column Family)的概念,開發者可以將這個應用程式經常要一起讀取的資料欄位,設定成相同的欄位家族,通常一支應用程式會設定好幾個欄位家族。

底層資料庫系統會自動將同一個欄位家族的相鄰列資料,都放在同一臺伺服器上,來提高應用程式的存取速度。如果開發者用關連式資料庫的概念來設計資料架構,反而會讓資料庫的效率很差。

Q:不同應用程式要讀寫同一列資料時,會不會發生資料鎖定的衝突?
A:通常不需要整列鎖住,只需鎖住這個應用程式所使用的欄位家族,讓其他應用程式可以讀寫同一列中沒有被鎖定的欄位。

Q:目前對於中文編碼的支援情形呢?
A:支援Unicode的正體中文編碼方式,但是沒有支援Big-5的編碼格式。(採訪整理⊙王宏仁)

熱門新聞

Advertisement