2.6 應(yīng)用服務(wù)器的集群策略及Java EE 5.0
開源代表的經(jīng)常是理想主義者,而商業(yè)公司代表的經(jīng)常是現(xiàn)實(shí)主義者,兩者之間有相互競(jìng)爭(zhēng)的地方,但從長(zhǎng)遠(yuǎn)來看,更多的是一種是相互補(bǔ)充、相互促進(jìn)的過程……
編者按:在中國(guó)Java技術(shù)界,袁紅崗是一個(gè)不能忽視的名字。他的觀點(diǎn),及對(duì)中間件趨勢(shì)的看法,是很多人感興趣的。日前,在金蝶Apusic于廣州花園酒店舉辦的“Java俱樂部”上,記者和這位極少露面的金蝶中間件首席科學(xué)家就集群、Java EE5.0等熱門話題展開了直率的深入對(duì)話。果然,袁紅崗出語驚人,帶來了很多獨(dú)特的視角和精彩的觀點(diǎn)。
不管是一般的技術(shù)觀點(diǎn),還是在平時(shí)打單過程中,我們似乎可以感覺到,集群功能一直是國(guó)外中間件廠商攻擊國(guó)內(nèi)中間件的弱點(diǎn)。而據(jù)我們所知,你們金蝶中間件在去年下半年推出了自己的集群功能,并且在宣傳中提及,在國(guó)家質(zhì)檢總局全行業(yè)這個(gè)大單中和幾個(gè)主要國(guó)外產(chǎn)品同等測(cè)試,測(cè)試結(jié)果甚至排在前面,這是否表示Apusic的集群功能已經(jīng)能滿足客戶的需求?你對(duì)集群功能又怎么看,你認(rèn)為中J2EE集群的本質(zhì)是什么?
首先我可以向你證實(shí),在國(guó)家質(zhì)檢總局的核心電子業(yè)務(wù)系統(tǒng)“大通關(guān)”項(xiàng)目中,金蝶Apusic中間件與三家世界主要中間件廠商的產(chǎn)品,在同一平臺(tái)和環(huán)境下用國(guó)際測(cè)試工具進(jìn)行了全方位的性能測(cè)試,經(jīng)過三輪嚴(yán)苛的點(diǎn)對(duì)點(diǎn)、兼容性和性能測(cè)試,結(jié)果我們成功奪標(biāo)。在測(cè)試結(jié)果中,Apusic在集群性能上并不遜色國(guó)外同類產(chǎn)品。
集群是中間件廠商經(jīng)常熱捧的一個(gè)概念,說只有采取集群策略你的應(yīng)用系統(tǒng)的性能才能提高。不明就里的用戶在付出了數(shù)倍的價(jià)錢去購(gòu)買集群設(shè)備和軟件以后,卻往往得不到所應(yīng)該得到的效果。Apusic作為一家負(fù)責(zé)任的公司,應(yīng)當(dāng)向大家來澄清所謂的“集群悖論”。所謂集群,只有在細(xì)粒度計(jì)算中其效果才會(huì)明顯,也就是將計(jì)算過程以一定的并行算法進(jìn)行細(xì)分,將計(jì)算分布到多個(gè)處理機(jī)運(yùn)行,最后再將計(jì)算結(jié)果合并。有一個(gè)很有名計(jì)劃叫做SETI@home,是一項(xiàng)利用全球聯(lián)網(wǎng)的閑置計(jì)算機(jī)共同搜索地外文明的科學(xué)實(shí)驗(yàn)計(jì)劃,只需要下載一個(gè)小程序就可以對(duì)從射點(diǎn)望遠(yuǎn)鏡得到數(shù)據(jù)進(jìn)行分析。這就是一個(gè)典型的細(xì)粒度計(jì)算,所有的參與計(jì)劃的計(jì)算機(jī)并行地計(jì)算浩如煙海的龐大數(shù)據(jù)庫中的一小段數(shù)據(jù),再將計(jì)算的結(jié)果匯總,從而發(fā)現(xiàn)可能的智能信號(hào)。而反過來我們看到在J2EE應(yīng)用中大多數(shù)計(jì)算都是粗粒度的,再加上事務(wù)處理需要在分布式計(jì)算中進(jìn)行協(xié)調(diào),更降低了集群的整體處理能力。因此集群并不是解決性能問題的最佳途徑,在單機(jī)低并發(fā)的情況下如果你認(rèn)為性能不理想,那么請(qǐng)不要指望集群能給你帶來性能的提升,相反你會(huì)發(fā)現(xiàn)性能反而還會(huì)有所下降。
那么,集群僅是廠商宣傳的噱頭嗎?在以下兩種情況下集群是有用的:1. 高并發(fā)超負(fù)荷運(yùn)行的主機(jī),例如google這樣的網(wǎng)站,它的訪問量是相當(dāng)大的,因此google會(huì)采取集群策略來分散客戶的請(qǐng)求,以提高整體響應(yīng)能力。我們接觸的很多J2EE應(yīng)用負(fù)荷量都不大,其實(shí)每秒訪問量在500以下的應(yīng)用都沒有必要采取集群策略。2. 失效轉(zhuǎn)移,其實(shí)我認(rèn)為這才是集群真正有用的地方,使用一臺(tái)低成本計(jì)算設(shè)備作為主設(shè)備的備份,在主設(shè)備發(fā)生故障時(shí)及時(shí)接替,以保證7x24小時(shí)不間斷服務(wù)。綜上所述,在準(zhǔn)備采用集群之前,一定要仔細(xì)分析具體的應(yīng)用環(huán)境,以避免不必要的浪費(fèi)。
作為一種選擇,Apusic同樣實(shí)現(xiàn)了集群技術(shù),但我們并沒有沿用大多數(shù)應(yīng)用服務(wù)器廠商所采取的內(nèi)存復(fù)制技術(shù)(in-memory replication),我們知道在集群中需要在各結(jié)點(diǎn)之間同步一些狀態(tài)信息,如果采用內(nèi)存復(fù)制技術(shù),將耗費(fèi)大量的網(wǎng)絡(luò)帶寬,對(duì)性能也有很大影響。這是因?yàn)槊慨?dāng)一個(gè)結(jié)點(diǎn)的狀態(tài)發(fā)生變化時(shí),都需要通過多播等方式向其他結(jié)點(diǎn)傳遞狀態(tài)信息,隨著集群內(nèi)部結(jié)點(diǎn)的增多,內(nèi)存復(fù)制將會(huì)非常頻繁,從而造成廣播風(fēng)暴,嚴(yán)重阻塞帶寬。Apusic所采取的技術(shù)是客戶端緩存,即直接將狀態(tài)信息保存在客戶端,當(dāng)服務(wù)器失效時(shí)將狀態(tài)轉(zhuǎn)移到可用服務(wù)器。
其實(shí)直到現(xiàn)在,還有人對(duì)中國(guó)人能做出中間件不相信、對(duì)產(chǎn)品不信任。你在去年曾說“大家在同一個(gè)標(biāo)準(zhǔn)下開發(fā),Apusic和IBM、BEA的產(chǎn)品沒什么本質(zhì)區(qū)別”、對(duì)于這句話,你今天能否再解釋一下?
這個(gè)問題其實(shí)不需要證明,沒有人認(rèn)為神舟飛船和阿波羅飛船在本質(zhì)上有什么區(qū)別,都是為載人航天而制造出來的工具,并不會(huì)因?yàn)橐粋(gè)是中國(guó)制造、另一個(gè)是美國(guó)制造,在用途上就存在什么區(qū)別。誠(chéng)然,我們和國(guó)外產(chǎn)品還存在一些差距,但在J2EE標(biāo)準(zhǔn)框架之下,我們提供了完全可供用戶使用的產(chǎn)品,用戶的選擇是對(duì)我們產(chǎn)品最大的肯定。中國(guó)軟件起步較晚,基礎(chǔ)較薄弱,但在中間件領(lǐng)域我們是及時(shí)跟進(jìn)的,當(dāng)時(shí)站在同一條起跑線上,現(xiàn)在仍然沒有被淘汰出局,相反差距還在逐步縮小。我相信憑我們的技術(shù)實(shí)力,我們完全有資格和國(guó)外產(chǎn)品同臺(tái)競(jìng)技。
在我參加各種技術(shù)大會(huì),包括去年北京Java10周年大會(huì)時(shí),跟許多技術(shù)人員交流、聊天的時(shí)候,他們都反映Apusic的啟動(dòng)速度非?,很快就啟動(dòng)了,和同類產(chǎn)品相比非常突出?磥硎褂谜邆儗(duì)它快速啟動(dòng)的特點(diǎn)非常喜愛。據(jù)我了解,Apusic的代碼只是其它產(chǎn)品的幾分之一,是因?yàn)檫@個(gè)原因嗎?你設(shè)計(jì)時(shí)是怎么想的?
很多人不理解,為什么Apusic和其他產(chǎn)品比起來代碼規(guī)模上要小很多,但使用起來并沒有感覺到有什么功能缺失呢?這里要涉及到軟件使用上的一個(gè)“二八原則”,即80%的使用者通常只會(huì)用到一個(gè)軟件20%的功能。象微軟的產(chǎn)品個(gè)個(gè)都是巨無霸,但對(duì)某個(gè)產(chǎn)品真正做到完全精通的可以說寥寥無幾。以Word為例,平時(shí)我們只是用它來寫寫文檔,很多高級(jí)功能其實(shí)根本用不上。在Apusic應(yīng)用服務(wù)器的開發(fā)上我們也是遵循同樣的原則,我們將盡可能地將整個(gè)軟件產(chǎn)品最重要的20%的功能做好、做完善,以保證大多數(shù)用戶的需求,剩下的80%功能將根據(jù)需要逐步增加。譬如國(guó)外產(chǎn)品很早就有的集群功能我們最近才推出來,并不是我們沒有能力實(shí)現(xiàn)集群功能,而是在我們看來,集群并不是解決性能問題的最好方案,只有在真正大并發(fā)請(qǐng)求下集群才會(huì)展現(xiàn)它的優(yōu)勢(shì)。因此,我們把集群功能歸結(jié)為低優(yōu)先級(jí)需求,只有在其他方面的性能和穩(wěn)定性有了很大提高后再來考慮集群。
另一個(gè)使Apusic運(yùn)行輕便的重要原因在于軟件架構(gòu)的設(shè)計(jì)。架構(gòu)是一個(gè)軟件的靈魂,好的架構(gòu)將延長(zhǎng)軟件的生命力,輕松應(yīng)付各種變化。Apusic的架構(gòu)在2001年時(shí)就已定型,以微內(nèi)核和多路復(fù)用為其核心,歷經(jīng)產(chǎn)品多次重大升級(jí)而未影響核心體系,展現(xiàn)了頑強(qiáng)的生命力。相反,如果架構(gòu)設(shè)計(jì)不合理,每次升級(jí)都要對(duì)架構(gòu)進(jìn)行調(diào)整,勢(shì)必引入大量冗余代碼,使整個(gè)產(chǎn)品臃腫不堪。
第三個(gè)原因在于代碼編寫的簡(jiǎn)潔性上。莎士比亞有一句名言:“簡(jiǎn)潔是智慧的靈魂”,在科學(xué)界同樣也推崇簡(jiǎn)潔性,麥克斯韋方程組簡(jiǎn)潔深刻,被譽(yù)為是上帝譜寫的詩歌,愛因斯坦的著名公式E=mc^2更是將簡(jiǎn)潔性發(fā)揮到了極致。程序設(shè)計(jì)語言不僅僅是為計(jì)算機(jī)運(yùn)行而設(shè)計(jì)的,它也是一種思想表達(dá)工具,甚至比自然語言更簡(jiǎn)潔、深刻、無歧義。我平時(shí)很少寫文檔,因?yàn)槲艺J(rèn)為代碼本身就已經(jīng)表達(dá)了作者的思想。當(dāng)我看到簡(jiǎn)潔優(yōu)美的代碼時(shí),我認(rèn)為是在讀一篇美麗的詩篇,并為作者深邃奔放的思想所折服。相反,當(dāng)看到混亂、繁復(fù)而無章法的代碼時(shí),我相信作者的思想同樣是混亂的。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |