席捲全球Java界的《Java Puzzlers》作者-Google首席Java架構師
Joshua Bloch與Google專任工程師兼Java講師Neal Gafter,應邀來臺擔任Java 2006的講師。iThome邀請多位Java專家與兩位Google大師對談。在輕鬆的氣氛中,Joshua與Neal針對Java的發展與Google的技術應用等議題,以幽默詼諧的方式提出他們的看法。

PC組成高度容錯的分散式架構
王建興:當我們知道可與兩位來自Google的Java大師座談時,心中浮現的自然是Google舉世聞名的分散式架構,Java向來有效能上的爭議,但Google為何會採用Java?又如何應用Java?

Neal:Google打造的許多應用程式都是大型的分散式系統,我們不會將應用程式放到一臺大型的單一主機上。我們喜歡使用現成的PC,來建構我們的系統,而不是大型而且可靠度佳的昂貴主機。單一PC隨時可能發生錯誤,我們試著用軟體的方式建立容錯的機制。

基本上,我們沒使用J2EE,這其中有許多原因,包括Google在J2EE之前就已經有了自己的分散式架構,甚至還是使用 Java 語言建構出來的。所以Google有自己的RPC(Remote Procedure Call)系統,而且廣泛地使用,它可以在不同語言之間達到良好的溝通,不論伺服器、用戶端、Java、Python 或C++,而且運作地很平順。

我們應用Interface Definition Language編譯程式,成為可以跨Java、Python及C++三種語言的系統。所以當我們設計一個分散式系統時,其中一件事就是看哪種通訊協定可以適合這些語言來開發,另外就是我們怎麼處理容錯、備份、如何確保我們不會遺失任何使用者的資料、如何恢復某臺當掉的機器。Google有特別的解決方式處理這方面的問題,我們有個通用的解決方法。

Joshua:沒錯,如Neal所言,失敗不是少見的情況,而是很常見的。當你要建立一個像Google這樣規模的搜尋服務,你可以想像會有多少問題,但是我們就是要持續的讓服務運作下去,盡量讓系統可以自動修復,不要造成延遲。

王文彬:Google的應用好像都是自製的,是否曾使用其他公司的產品?

Joshua:會的,我們會拿現成的來用,多數工具是我們自製的,不過如果有別人已開發好的軟體,剛好是我們需要的,而且價格不錯,我們會買下它,Google Web Toolkit(GWT)就是很好的例子。

Neal:我們就常用一些開放源碼的產品,用哪些可能不方便講,不過我們用很多Linux工具,有時候我們會用些其他人開發好的工具,其實Google沒有規定一定什麼都要自己開發,當你要把程式交給開放源碼社群時,你會傾向社群支持你的東西,但你不會要他們付錢給你。

彬:這就是JBoss要做的。

Java與C++人才的比重逐漸改變
王建興:我們聽早上的主題演講,你們說Google應用Java在中介層(Middle-Tier),例如GMail、Calendar。我們很有興趣知道什麼樣的應用適合使用Java?

Neal:沒錯,在中介層的開發,Java是很好的選擇。Google 有很多基礎的設施,Web Servlet 引擎,讓你很簡單就能以Java撰寫與部署中介層的程式。

Joshua:而且有許多現成的函式庫,不需要用到bit-level,就可以整合原有底層的C++程式,這可以廣泛地移植到用戶端的程式,像是一些AJAX程式。

Neal:這還是要看各個開發團隊決定用什麼,如果是要開發一些以Web為主的程式,可能就不考慮Java而選擇C++,有可能因為他們對C++很熟,所以,即使他們開發的東西和我做的很像,但他們還是決定選擇C++。

王建興:你們認為Java能提供更好的可攜性嗎?

Joshua:絕對是的。而且Java可以提供較好的效能表現。

Neal:一般來說,以Google使用Java的方式下,可攜性沒那麼重要。因為我們將Java應用程式部署在特定版本的Linux。

不過,可攜性的優點,是當我們移至下一個版本的Java,或下一個版本的Linux時,我們不想鎖在某個特定版本的Java、架構或作業系統,所以可攜性很重要。

Joshua:但我們不會要求寫程式時,要同時兼顧在任何平臺上都可以執行,這有點與寫程式的態度有關,你是要寫給自己用的,或是寫給全世界用的。

王建興:我想你們會採用 Java 有一個很重要的理由是想要降低開發的心力和時間。

Joshua:絕對如此。還有另一個理由,學生在學校裡學的都是Java,而且喜歡Java,他們甚至不懂C++,所以比找C++人才容易。

Neal:而且Java除錯容易多了。

王文彬:現在Google的C++與Java工程師的比例為何?各占一半嗎?

Joshua:我不太確定。可以肯定的是Google正在徵求更多的Java工程師。

Neal:應該不到這個比例,使用C++的應該多一點,可能是 6:4 左右。不過,使用Java的人正在成長中,5年前Google大概沒什麼人使用Java,所以我們可以預見,Java在Google裏越來越重要。

王建興:即使Java對開發企業應用程式是夠快的,可是你們怎麼兼顧延展性(Scalability)?

Joshua: Google解決Java的延展性,就像解決其他這類延展性問題。像是複製、大型分散式系統,或者用更多機器來解決這些問題。

王建興:所以你們會用分散式架構來解決?

Joshua:對。

葉秉哲:請問Google分散式基礎架構早在Google搜尋引擎剛草創的時代就已經存在了嗎?

Neal:許多Google的叢集和分散式基礎架構,的確可追溯到Google兩位創始者在史丹福大學研究所,以三五臺機器研究時代。不過早期的基礎架構都已被重新設計過,所以現在已經很難看到雜亂的程式碼了。單以搜尋引擎核心本身而言,大概就被改寫過三次。

Joshua:不過,當然,某些核心的演算法,例如PageRank仍然存在。

沒有修改JVM,調校是從程式著手
王建興:在你們早上的演講中,提到有許多在Java社群有所貢獻的人,現在都在Google,我們看到有很多人都熟悉JVM,我們猜你們有基於效率的考量修改JVM。我們有猜對嗎?

Joshua、Neal:猜錯了。

Joshua:你們可能會這麼想,但就我所知沒有。我們使用現成的JVM,不是我們為自己人說話,但昇陽的JVM效能一直在精進,我們把原來跑在JRE 1.4的程式放在Tiger上,發現,哇!效能這麼好。再放在Mustang,哇!效能更快,我們就不用花什麼功夫特別去調整我們的程式了。

Neal:我們的確是和昇陽保持聯繫,所以當我們遇到了特定的問題時,我們就會讓他們知道,這樣的VM對我們不夠用。

Joshua:而且我們提供解決方案。

王建興:所以最佳化是在應用程式的層級進行?

Joshua:是的,開發精簡而有效率的程式,Java是很好的工具。Java程式既短且清楚,而且提供夠多的函式庫,可以根據需求置換。要寫出一樣的C++程式,就得花上更多的力氣。

Neal:你可以找到許多用在Java的效能衡量與調校的工具,那可以很容易找出問題在哪。

王建興:程式效能的瓶頸。

Neal:是呀,我總是很驚訝瓶頸怎麼會在這兒,所以總是真的找到了才相信。

王建興:效能瓶頸所在,總是令人驚訝不已。

Joshua:沒有真的證明前,總是猜錯瓶頸究竟在哪裏。

開放原始碼,對Java的幫助有限
朱仲傑:我們知道這幾年Java將會開放原始碼,你們們覺得這會對提升Java的效能,或找出Java的效能瓶頸有幫助嗎?

Joshua:Neal和我並不同意這個觀點,基本上我們有研究許可(Research License)已經可以閱讀原始碼,調校或找出問題都很簡單,我不是要說這麼做沒用,而是我們不需要因為原始碼不夠開放而這麼做,從1995年到現在,已有很多進步,可以寫很高效能的Java程式。

Neal:Java SE今年年底就要釋出原始碼,你可能會覺得屆時開放源碼社群協助Java SE,找出Java SE的問題。不過,其實他們現在就已經可以這麼做了,Java SE已有公開的原始碼,你可以在上面加些警告,也可以告訴昇陽哪裏有問題。但是實際上,很少人這麼做,所以我不覺得完全開放源碼之後,會吸引大家貢獻些什麼,因為現在就可以了。

Joshua:不過學術單位在Java開放以後,就可以更自由的使用與修改Java了。

Neal:有些事是開放Java源碼以後可以做的。像是Java語法的實驗,現在我雖然可以改Java的東西,做些實驗性質的應用,加些新的功能,但因為我不是昇陽的員工,不被允許提供給別人試用。

Joshua:我要提出相反的看法,7年前Philip Wadler、Martin Odersky這兩個人,在Java上加了很多功能,然後取名叫「Pizza」,現在的Generic功能很多都是根源於Pizza的。

Neal:但如果他們在Java開放原始碼之後再做,就不需要自己重寫一個Java SE了!

Joshua:我要說的是,這類在Java之上的再開發,7、8年前就有。

Google力求提供在地化的服務
馮彥文:我很好奇Google的軟體,有沒有還未自動化的?需要人工處理的?

Neal:有,像在地化,因地區不同的翻譯之類。

Joshua:也是有些工具可以幫忙。

Neal:其實也有系統幫助不在Google工作的人,協助我們做在地化。

Joshua:基本上Google會盡量能自動化就自動化,Yahoo就不那麼自動化,Yahoo是有歷史原因的,因為從一開始的設計就是由人工登錄網址;而Google從一開始的索引就是讓網路自己搜尋,但也沒辦法做到樣樣自動化。

Neal:還是有些服務像登廣告,得由人工檢查填寫資料的是否正確,及是否侵犯他人的商標。

Joshua:不過我再強調,我們都盡量自動化,不能做到的,才用人工補強。例如Google News,就不是用人工挑選資料,是電腦篩選的。

Neal:Google設計服務時,還是以自動化為原則,這樣的服務才不會被限制住。如果有服務是我們無法靠自動化來解決的,可能我們就做錯了方向。

馮彥文:所以像 Google廣告,如果我想申請的是中文、日文,這些不同語言的廣告,你們需要不同地區的人協助嗎?

Neal:我想我們在全球不同國家,都有分公司照顧各種語言的用戶,我們的服務在全球都有,還是需要有人知道當地的語言、文化、法律的特色,才能服務當地的人。

葉秉哲:所以我們才能看到Google Map在日本是日文,在希臘是希臘文。

Neal:沒錯。

Joshua:Google了解這個世界只有一小部分人的母語是英文,我們也了解,在這個一直成長的網路世界人口中,大部分的人說著其他語言,Google想要為這部分的人服務。
arrow
arrow
    全站熱搜

    Neo Chao 發表在 痞客邦 留言(0) 人氣()