提前N久的揭秘:《構(gòu)建高性能的大型分布式Java應(yīng)用》書的大概內(nèi)容
記得自己在沒有進入互聯(lián)網(wǎng)行業(yè)之前,對于互聯(lián)網(wǎng)行業(yè)并不怎么感冒,總覺得互聯(lián)網(wǎng)行業(yè)的技術(shù)含量不高,沒什么意思,值得進入互聯(lián)網(wǎng)行業(yè)了,才明白,原來互聯(lián)網(wǎng)行業(yè)的技術(shù)是這么的復(fù)雜,這么的困難,而構(gòu)建一個擁有巨大用戶量的系統(tǒng)無疑也會給自己帶來更多的成就感,記得自己剛進入互聯(lián)網(wǎng)行業(yè)的時候,才發(fā)現(xiàn)構(gòu)建一個高并發(fā)、高性能、承受高壓力、高度可伸縮以及高可用性的系統(tǒng)要掌握的知識體系是在太多了,而且這些知識體系根本就不是在學(xué)校或是google、網(wǎng)絡(luò)中能夠?qū)W習(xí)到的,于是當(dāng)時就想,如果能有一本書全面的介紹構(gòu)建這”五高“特性的系統(tǒng)需要掌握的知識體系,那將是多么的美好呀,畢竟很多的知識體系都是靠經(jīng)驗積累出來的,甚至可是說,是痛苦的教訓(xùn)等得出來的,但當(dāng)然,要在一本書中完全講清楚所有的知識體系,自然是不靠譜的,但我想我會盡量在書中表達出自己的一些觀點、看法以及少少的經(jīng)驗吧,希望能夠讓更多的同學(xué)即使沒有大型系統(tǒng)的實際經(jīng)驗,也能掌握到一些大型系統(tǒng)所需的知識體系,那么我心甚慰了,由于本書需要寫的東西非常的多,預(yù)計在9月底完成寫作,估計要到明年春節(jié)后上市,:),以下先揭秘下本書的大概內(nèi)容,也請大家多多提出意見,目錄的信息我在隨后的blog中再行貼出,同時在以后的blog中也會不定期的放出一些寫好的草稿以及做進度的預(yù)告。
本書圍繞著構(gòu)建大型分布式Java應(yīng)用系統(tǒng)的知識體系來進行編寫的,包括會出現(xiàn)哪些方面的難點和挑戰(zhàn),對于這些難點和挑戰(zhàn)有什么辦法來解決,需要掌握些什么知識體系(例如第一章中的分布式Java應(yīng)用的通訊技術(shù)、遠程調(diào)用技術(shù)也都是大型分布式Java應(yīng)用所必須掌握的知識體系)。
1、 眾多子系統(tǒng)構(gòu)成
當(dāng)系統(tǒng)由眾多子系統(tǒng)構(gòu)成時,想想100多個子系統(tǒng)構(gòu)成的應(yīng)用系統(tǒng),如何管理好這些子系統(tǒng)就很重要了,例如子系統(tǒng)之間是如何調(diào)用的、每個子系統(tǒng)對外提供了哪些功能、子系統(tǒng)之間的依賴關(guān)系是怎么樣的、當(dāng)發(fā)生調(diào)用時調(diào)用路徑是怎么樣的、這些子系統(tǒng)在運行期的狀況如何(例如有多少訪問量)等等。
要管理好這些子系統(tǒng),首先第一個需要解決的問題是標(biāo)準(zhǔn)化子系統(tǒng)之間交互的方式,這一方面要求標(biāo)準(zhǔn)化每個子系統(tǒng)對外提供功能的方式,另一方面要求標(biāo)準(zhǔn)化每個子系統(tǒng)調(diào)用其他子系統(tǒng)提供的功能的方式,只有在這些標(biāo)準(zhǔn)化了以后才有可能管理好這些子系統(tǒng),SOA無疑是非常匹配的一種架構(gòu)級的選擇,除了軟件角度外,如何運維、管理好這么眾多的子系統(tǒng)也是難點。
對于眾多子系統(tǒng)構(gòu)成的應(yīng)用而言,如何管理并不是全部,還有其他很多相伴而來的問題也是需要解決的,例如跨子系統(tǒng)的調(diào)用時,如何保證整個調(diào)用過程的事務(wù)、雪崩效應(yīng)等。
標(biāo)準(zhǔn)化是管理好眾多子系統(tǒng)的根本,并且它要求的是架構(gòu)級的全局支持,因此在本書中首先講解這個形容詞定語的解決方案以及所需的知識體系,也就是本章節(jié)的重點。
2、 承受高壓力
大型企業(yè)應(yīng)用或互聯(lián)網(wǎng)應(yīng)用,都有眾多的使用者,眾多的使用者也就意味著系統(tǒng)需要并發(fā)的被眾多的用戶訪問,而這通常很容易暴露出系統(tǒng)中很多并發(fā)場景中罕見的現(xiàn)象,因此在編寫此類應(yīng)用時需要非常仔細的考慮系統(tǒng)對于高并發(fā)的支持,同時,由于每臺機器上的應(yīng)用能夠支撐的用戶量必然是有限(例如某網(wǎng)站的服務(wù)器,單臺支撐500W的PV已經(jīng)是業(yè)界佳話了),如何支撐巨大的用戶訪問量就成為了關(guān)鍵,而這里面如何在盡量不改變現(xiàn)有程序的基礎(chǔ)上來支撐不斷增長的用戶訪問量就是更為重要的關(guān)鍵了。
要承受高壓力首先要求系統(tǒng)具備高性能,只有系統(tǒng)是高性能的,才有可能支撐足夠的壓力,其次是系統(tǒng)需要具備高度可伸縮的能力(包括垂直伸縮和水平伸縮),要讓系統(tǒng)具備這兩點,對于系統(tǒng)的軟件結(jié)構(gòu)以及硬件體系都有很高的要求,在本書的第七章和第八章中將來重點講解從軟件結(jié)構(gòu)角度如何保障系統(tǒng)具備高度可伸縮的能力。
除了上述的點之外,要讓系統(tǒng)能夠更好的承受高壓力,其實還需要由合理的評估,以事先對系統(tǒng)的結(jié)構(gòu)進行改造或進行硬件上的擴充等,這屬于非常專業(yè)的容量規(guī)劃的領(lǐng)域,就不在這本書中進行講述了,如感興趣的話可以參閱相關(guān)的容量規(guī)劃的書籍。
3、 具備高性能
無論是大型企業(yè)應(yīng)用還是互聯(lián)網(wǎng)應(yīng)用,都要求在短時間內(nèi)響應(yīng)用戶的請求,如電話計費系統(tǒng)、淘寶網(wǎng),怎么樣才能讓系統(tǒng)具備高性能呢,這在大型分布式系統(tǒng)中就更為的復(fù)雜了,因為在大型分布式系統(tǒng)中通常一個請求需要經(jīng)過好幾個子系統(tǒng)才能完成。
要編寫高性能的應(yīng)用,這就要求應(yīng)用設(shè)計人員能夠充分掌握實現(xiàn)需求的可選的技術(shù)方案,并對技術(shù)方案中的所有細節(jié)都非常的精通,例如jdk的實現(xiàn)、操作系統(tǒng)的實現(xiàn)以及底層的原理,除了軟件方面的深刻理解外,對于硬件也是要求有深刻的理解的,但本書只涵蓋軟件方面的內(nèi)容,因此對于硬件相關(guān)的原理就不進行描述了,只有在充分掌握這些原理的情況下才能根據(jù)系統(tǒng)的需求以及性能要求選擇最為合適的技術(shù),除了編寫高性能的程序外,另外需要具備衡量系統(tǒng)性能的指標(biāo)以及方法,只有這樣才能知道系統(tǒng)的性能到底如何,瓶頸在什么地方,最后還需要具備系統(tǒng)調(diào)優(yōu)的能力,而這通常需要從硬件角度、軟件環(huán)境角度(例如操作系統(tǒng)、jvm等)以及程序角度來進行調(diào)優(yōu),以使系統(tǒng)能夠到達所要求的性能,在本書的第三、四、五以及六章中將來重點講述編寫高性能的Java應(yīng)用所需掌握的知識體系。。
4、 具備高可用性
大型企業(yè)應(yīng)用和互聯(lián)網(wǎng)應(yīng)用,都要求系統(tǒng)7 * 24小時不間斷的穩(wěn)定運行,如何才能保證系統(tǒng)在各種各樣的訪問情況下都不宕機,這對于系統(tǒng)的實現(xiàn)人員來說是個巨大的挑戰(zhàn)。
要讓系統(tǒng)在各種情況下不宕機,首先要求的是軟件本身具備很好的穩(wěn)定性,要編寫穩(wěn)定性高的程序要求對所采用的技術(shù)具備非常深刻的理解,這點和編寫高性能程序是一樣的,從這點也是互聯(lián)網(wǎng)公司都強調(diào)核心的技術(shù)都需要自己編寫的原因之一。
除了軟件本身需要具備很好的穩(wěn)定性外,也還需要采用其他很多的防范來保障系統(tǒng)的可用性,例如常用的方法為集群(即多臺提供同樣功能的服務(wù)器,這樣即使其中的幾臺出問題也仍然可以服務(wù))、容災(zāi),還有更為復(fù)雜的方法像異地容災(zāi)、異地分流以及多數(shù)據(jù)中心的建設(shè)等等,這些方法并不是直接按照理論就可以實現(xiàn)的,對于軟件本身的結(jié)構(gòu)也提出了很高的要求,在本書的第九章中將來詳細講述如何構(gòu)建高可用性的java應(yīng)用。
posted on 2009-03-06 09:15 BlueDavy 閱讀(6352) 評論(20) 編輯 收藏 所屬分類: Java