論Java技術在網際網路平台上的應用—論文2:通訊服務平台的應用
來源:互聯網
上載者:User
【本文】
資料通訊是當前十分活躍與熱門的電腦與資訊技術的應用領域。某大型通訊公司開發了其業務的主要支撐平台,在這裡,我們簡稱之為“通訊資訊服務平台”,用於在全國與全球開展資料業務的需要。該平台是一個典型的Java技術應用於Internet的項目。
作為資訊技術公司中的一名技術骨幹,我有幸參加了該系統的分析與設計工作,承擔了相當多的Java應用開發工作單位。此系統中的軟體部分大多由Java來實現,在全系統中我們是這樣來用Java構架系統的:
(1)本系統可分為4層,分別是Browser、展示層、中介軟體層和資料層。
(2)展示層用Java中的Java Script來實現頁面輸出。
(3)中介軟體層用Java來實現CORBA,即實現Component(構件),主要實現商務邏輯的封裝與複用。
(4)資料層主要是資料庫和預存程序的實現。
我們在應用Java技術時,所採用的技術和策略可大致上歸納為以下5個方面:
(1)使Java Script盡量簡單,因為Java Script在我們系統中是放在伺服器端執行的,該語言是通過一個解譯器解釋執行的,相對速度很慢,我們採用了兩台HP前置機來運行Java Script,但是其運行速度還是不理想,所以我們在設計中把Java Script僅用來顯示從中介軟體層所得到的資料,產生動態網頁面。在最初的設計中展示層(Java Script)曾承擔了一些商務邏輯處理操作,導致效率不理想,因此,我們不得不盡量地減少Java Script的程式量。
(2)用Java實現CORBA時,應盡量考慮共用和複用。在本系統中,最初的設計是讓Java在實現Component時,只是執行一些資料庫表的操作,導致展示層的負載較大。後來,我們重新設計時,總結歸納了所有的Use Case,找出了其中可供共用和複用的介面,把相同的商務邏輯操作封裝到一個介面中去。因為 Java的執行效率比Java Script要高,因此提高了系統效率。
(3)在別的項目中,我們曾大量地使用過Java中的JSP技術和Servlet技術,一般人可能不能區分這兩種Java技術的區別。為了得到系統的一些執行速率的資料,我們採用了一個著名的壓力測試軟體——Load Runner來測試這兩種技術的差別。測試表明:用JSP和Servlet完成同樣的一個操作,並且保證是在相同的測試環境中(相同伺服器、壓力測試工作站與資料庫環境),得到的測試資料卻有著很大差別,JSP完成一個操作的平均執行時間大致會是Servlet程式的兩倍。在一個企業級應用項目中,這可能是一個很關鍵的瓶頸。因此,我們得出的結論是:在可能的條件下,盡量地多使用Servlet。當然,與Servlet相比,JSP編程快速,修改方便,在訪問量不是很大的應用場合下也是可以接受的。
(4)使用Java作為整體解決方案時,應盡量使用相同版本的JDK。在用Java作為程式設計語言的項目中,幾乎大多要遇到“漢字”問題,即Java在沒有經過轉換的情況下,在輸出漢字時,很可能會出現亂碼。採用不同版本的JDK,解決的方案是不一樣的,比如V1.2.2版本的JDK和V1.3版本的JDK解決方案就會有一些不一樣,把V1.2.2的Java程式放在V1.3的JDK中,就不能順利輸出漢字了。其根本原因在於Java使用了Unicode編碼,和我們中國的國標編碼不一樣。所以在這個意義上一些人竭力鼓吹的“一次編寫,到處運行”似乎不一定能在所有的場合都行得通。
(5)使用Java時,應盡量遵從軟體規範。在Java中有一個JVM的概念,即在Java虛擬機器中使用了一個垃圾收集器,專門用來回收記憶體。但是該垃圾收集器在給編程人員帶來方便的同時,也隱埋下了隱患。在程式設計中,並不能強制執行垃圾收集器,所以,開發人員不能確定某對象是否已釋放,常常讓編程人員養成依賴自動收集的壞習慣,因此我們要求:在Try,Catch之後必須明確要求回收記憶體(當然,也只能是通知垃圾收集器來回收垃圾),這樣可以有效地提高系統穩定性。
以上這些實用性的技術與策略,是我們在實踐中的一些實際體會,僅供各位開發人員根據實際情況參考。
當然,在使用Java作為解決方案時,也會遇到很多讓我們頭疼的問題,這些問題導致同時執行的並發性比較差,系統速度慢等等。歸納起來看,我們曾遇到過的主要具體的問題有:
(1)用Java來實現CORBA中的Component,有時效率會比較低。
(2)用Java來建立資料庫連接往往會比較慢。
(3)用JSP編程時容易導致系統資訊的擴散。比如,如果有駭客攻擊一台運行JSP程式的伺服器,他可以故意地輸入一些非法字元或異常資訊給JSP程式,於是程式執行將出現異常。這時,就會在頁面上列印出相應的錯誤資訊。很不幸的是,這些資訊極有可能暴露出這台伺服器的JDK的版本號碼與路徑資訊等內容。這往往容易讓駭客們有機可乘,有可能去抓住系統的漏洞。
在發現了這些問題後,我們經過仔細研究,找出了一些解決辦法。比如:
(1)既然用Java實現Component比較慢,我們就盡量減少Component所執行的商務邏輯量。爭取把能夠放在預存程序中實現的操作,儘可能在預存程序中加以實現。眾所周知,資料庫的預存程序操作,比起在Java程式中執行資料庫操作要快得多。
(2)既然用Java建立資料庫連接比較慢,我們就可以把資料庫連接封裝成串連池(Connect Pool),從而能非常有效地提高系統效率。我們也曾經用“Load Runner”作過壓力測試,使用串連池比不使用串連池的速度要快上3~5倍。
(3)為了對付JSP程式與Servlet程式會列印出異常系統資訊的問題。我們曾查閱了很多JSP或Servlet的資料,最終是毫無頭緒。但是我們可以換另一種思路,即是不從程式下手,而從Web Server著手,我們可以把Apache配置成為使這類異常資訊不再列印出來,而是使之僅出現一個通用的異常說明的頁面,這樣,就能十分有效地解決這個問題。
在我們使用Java作為程式設計語言的這麼多項目中,絕大多數是比較成功的。Java語言作為一種快捷、穩定的電腦語言,開發基於網際網路應用的項目大多是相當穩定和比較適用的。
在我個人看來,Java的應用前景十分光明,大體上可以著眼於以下方面:
(1)在網際網路上將會有更加廣泛的應用。
(2)在嵌入式裝置中,Java也大有用武之地。比如,在最新推出的Java技術中,Java已經進入了手機領域。
(3)Java程式大多以線程運行,佔用資源少,會逐步代替ASP與CGI程式。根據第三方測試表明:JSP程式比ASP程式要快2倍以上。用JSP代替ASP應是大勢所趨。
(4)Java在無線互連網中的應用將會更加廣泛。Java支援WAP,可以方便地用Java開發WAP程式,實現WAP應用。
(5)Java與XML的無縫串連使Java在資料轉送和異構網路通訊方面有著很大的優勢。
就我個人而言,我將會在相當長一段時期內致力於Java在無線互聯中的應用,為我國的移動通訊事業開發出更多的優秀實用的項目。
評註;參與了一個較大的項目後有實踐體會。全文都採用1、2、3、4方式,文章的風格顯得單調,不大吸引人。但是本文的優點是;(1)寫得很有條理。(2)內容的選擇合適。(3)所列舉的策略、注意事項與發現的問題都很現實可信。(本文主要參考了廣州王海波等人論文)