書名: 分布式Java應(yīng)用作者名: 林昊著本章字?jǐn)?shù): 1995字更新時間: 2018-12-27 17:09:09
前言
軟件系統(tǒng)得到用戶認(rèn)可后,訪問量通常會產(chǎn)生爆發(fā)性的增長,互聯(lián)網(wǎng)網(wǎng)站,例如淘寶、豆瓣等更是如此。在不斷完善功能和多元化發(fā)展的同時,如何應(yīng)對不斷上漲的訪問量、數(shù)據(jù)量是互聯(lián)網(wǎng)應(yīng)用面臨的最大挑戰(zhàn)。
對于用戶而言,除了功能以外,網(wǎng)站訪問夠不夠快,網(wǎng)站能否持續(xù)提供服務(wù),也是影響用戶訪問量的重要因素,因此如何保證網(wǎng)站的高性能,及高可用也是我們要關(guān)注的重點(diǎn)。
為了支撐巨大的訪問量和數(shù)據(jù)量,通常需要海量的機(jī)器,例如現(xiàn)在的google已經(jīng)擁有了百萬臺以上的機(jī)器,這些機(jī)器耗費(fèi)了巨大的成本(硬件采購成本、機(jī)器的電力成本、網(wǎng)絡(luò)帶寬成本等)。網(wǎng)站規(guī)模越大,運(yùn)維成本就越高,這意味著商業(yè)公司所能獲得的利潤越低,而通常這會導(dǎo)致商業(yè)公司必須從多種角度關(guān)注如何降低網(wǎng)站運(yùn)維成本。
本書的目的是從以上幾個問題出發(fā),介紹搭建高性能、高可用以及可伸縮的分布式Java應(yīng)用所需的關(guān)鍵技術(shù)。
目標(biāo)讀者
本書涵蓋了編寫高性能、高可用以及可伸縮的分布式Java應(yīng)用所需的知識點(diǎn),適合希望掌握這些知識點(diǎn)的讀者。
在介紹各個知識點(diǎn)時,作者盡量結(jié)合自己的工作,分享經(jīng)驗(yàn)與心得,希望能夠?qū)δ切┯邢嚓P(guān)工作經(jīng)驗(yàn)的讀者有所幫助。
內(nèi)容導(dǎo)讀
本書按照介紹的知識點(diǎn)分為五個部分:第一部分介紹基于Java實(shí)現(xiàn)系統(tǒng)間交互的相關(guān)知識,這些知識在第1章中進(jìn)行介紹;第二部分為基于SOA構(gòu)建大型分布式Java應(yīng)用的知識點(diǎn),這些在第2章中介紹;第三部分為高性能Java應(yīng)用的相關(guān)知識,這些在第3、4、5章中介紹;第四部分介紹高可用Java應(yīng)用的相關(guān)知識,這些在第6章中介紹;第五部分介紹可伸縮Java應(yīng)用,這些在第7章介紹,讀者也可根據(jù)自己的興趣選擇相應(yīng)的章節(jié)進(jìn)行閱讀。
網(wǎng)站業(yè)務(wù)多元化的發(fā)展會帶來多個系統(tǒng)之間的通信問題,因此如何基于Java實(shí)現(xiàn)系統(tǒng)間的通信是首先要掌握的知識點(diǎn),在本書的第1章中介紹了如何基于Java實(shí)現(xiàn)TCP/IP(BIO、NIO)、UDP/IP(BIO、NIO)的系統(tǒng)間通信、以及如何基于RMI、Webservice實(shí)現(xiàn)系統(tǒng)間的調(diào)用,在基于這些技術(shù)實(shí)現(xiàn)系統(tǒng)間通信和系統(tǒng)間調(diào)用時,性能也是要考慮的重點(diǎn)因素,本章也講解了如何實(shí)現(xiàn)高性能的網(wǎng)絡(luò)通信。
在解決了系統(tǒng)之間的通信問題后,多元化的發(fā)展帶來的另外一個問題是多個系統(tǒng)間出現(xiàn)了一些重復(fù)的業(yè)務(wù)邏輯,這就要將重復(fù)的業(yè)務(wù)邏輯抽象為一個系統(tǒng)。這樣演變后,會出現(xiàn)多個系統(tǒng),這些系統(tǒng)如何保持統(tǒng)一、標(biāo)準(zhǔn)的交互方式是要解決的問題,SOA無疑是首選的方式,在本書的第2章中介紹了如何基于SOA來實(shí)現(xiàn)統(tǒng)一、標(biāo)準(zhǔn)的交互方式。
高性能是本書關(guān)注的重點(diǎn),Java程序均運(yùn)行在JVM之上,因此理解JVM是理解高性能Java程序所必須的。本書的第3章以Sun Hotspot JVM為例講述了JVM執(zhí)行Java代碼的機(jī)制、內(nèi)存管理的機(jī)制,以及多線程支持的機(jī)制。執(zhí)行代碼的機(jī)制包含了Sun hotspot將Java代碼編譯為class文件,加載class文件到JVM中,以解釋方式執(zhí)行class,以及client模式和server模式編譯為機(jī)器碼方式執(zhí)行class的實(shí)現(xiàn)方式;內(nèi)存管理的機(jī)制包含了Sun hotspot內(nèi)存分配以及回收的機(jī)制,內(nèi)存分配涉及的主要為堆上分配、TLAB分配以及棧上分配。內(nèi)存回收涉及的有常見的垃圾回收算法、Sun Hotspot JVM中新生代可用的GC、舊生代可用的GC及G1;多線程支持的機(jī)制包含了多線程時資源的同步機(jī)制,以及線程之間交互的機(jī)制。
除JVM外,在編寫分布式Java應(yīng)用時,通常要使用到一些Sun JDK的類庫。如何合理地根據(jù)需求來選擇使用哪些類,以及這些類是如何實(shí)現(xiàn)的,是編寫高性能、高可用的Java應(yīng)用必須掌握的。在本書的第4章中介紹了Sun JDK中常用的集合包的集合類、并發(fā)包中的常用類(例如ConcurrentHashMap、ThreadPoolExecutor)、序列化/反序列化的實(shí)現(xiàn)方式,同時對這些類進(jìn)行了基準(zhǔn)的性能測試和對比。
掌握J(rèn)VM和使用到的類庫是編寫高性能Java應(yīng)用的必備知識,但除了編寫之外,通常還會面臨對已有系統(tǒng)進(jìn)行調(diào)優(yōu)。調(diào)優(yōu)是個非常復(fù)雜的過程,在本書的第5章中介紹了尋找系統(tǒng)性能瓶頸的一些方法以及針對這些瓶頸常用的一些調(diào)優(yōu)方法。尋找性能瓶頸的方法主要是根據(jù)系統(tǒng)資源的消耗尋找對應(yīng)問題代碼的方法,常用的一些調(diào)優(yōu)方法主要是降低鎖競爭、降低內(nèi)存消耗等。
除了高性能外,高可用也是大型Java應(yīng)用要關(guān)注的重點(diǎn),在本書的第6章中介紹了一些構(gòu)建高可用系統(tǒng)常用的方法,例如負(fù)載均衡技術(shù)、構(gòu)建可容錯的系統(tǒng)、對資源使用有限制的系統(tǒng)等。
在面對不斷訪問的訪問量和數(shù)據(jù)量時,最希望能做到的是僅升級硬件或增加機(jī)器就可支撐,但要達(dá)到這個效果,在軟件上必須付出巨大的努力。本書的第7章介紹了構(gòu)建可伸縮系統(tǒng)的一些常用方法,主要包括支持垂直伸縮時常用的降低鎖競爭等方法;以及支持水平伸縮時常用的分布式緩存、分布式文件系統(tǒng)等方法。
關(guān)于本書的代碼
書中大部分代碼只列出了關(guān)鍵部分或偽代碼,完整的代碼請從http://bluedavy.com下載。
關(guān)于本書的反饋
每次重看書稿,都會覺得這個知識點(diǎn)尚須補(bǔ)充,那個知識點(diǎn)尚須完善,但書不可能一直寫下去。在提交終稿的時候,我不特別興奮,倒是有一點(diǎn)遺憾和擔(dān)心,遺憾書里的知識點(diǎn)還沒有足夠講開,擔(dān)心自己對某些知識點(diǎn)理解不夠,誤導(dǎo)了大家。為此,我在自己的網(wǎng)站(http://bluedavy.com)上開辟了一個專區(qū),用于維護(hù)勘誤,并將不斷地完善書中涉及的知識點(diǎn),歡迎讀者反饋和交流。
- 大數(shù)據(jù)項(xiàng)目管理:從規(guī)劃到實(shí)現(xiàn)
- 電力自動化實(shí)用技術(shù)問答
- 中文版Photoshop CS5數(shù)碼照片處理完全自學(xué)一本通
- 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)實(shí)訓(xùn)
- 基于多目標(biāo)決策的數(shù)據(jù)挖掘方法評估與應(yīng)用
- Blender Compositing and Post Processing
- 大數(shù)據(jù)技術(shù)與應(yīng)用
- 嵌入式操作系統(tǒng)
- Storm應(yīng)用實(shí)踐:實(shí)時事務(wù)處理之策略
- Visual Basic.NET程序設(shè)計(jì)
- 網(wǎng)絡(luò)布線與小型局域網(wǎng)搭建
- 嵌入式Linux系統(tǒng)實(shí)用開發(fā)
- JSP通用范例開發(fā)金典
- 數(shù)據(jù)庫技術(shù):Access 2003·計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)
- Artificial Intelligence for Robotics