最近“全網(wǎng)域(Web Scale)”一詞被炒得火熱,人們也正在通過(guò)擴(kuò)展他們的應(yīng)用程序架構(gòu)來(lái)使他們的系統(tǒng)變得更加“全網(wǎng)域”。但是究竟什么是全網(wǎng)域?或者說(shuō)如何確保全網(wǎng)域?

全網(wǎng)域被炒作的最多的是擴(kuò)展負(fù)載(Scaling load),比如支持單個(gè)用戶訪問(wèn)的系統(tǒng)也可以支持10 個(gè)、100個(gè)、甚至100萬(wàn)個(gè)用戶訪問(wèn)。在理想情況下,我們的系統(tǒng)應(yīng)該保持盡可能的“無(wú)狀態(tài)化(stateless)”。即使必須存在狀態(tài),也可以在網(wǎng)絡(luò)的不同處理終端上轉(zhuǎn)化并進(jìn)行傳輸。當(dāng)負(fù)載成為瓶頸時(shí)候,可能就不會(huì)出現(xiàn)延遲。所以對(duì)于單個(gè)請(qǐng)求來(lái)說(shuō),耗費(fèi)50到100毫秒也是可以接受的。這就是所謂的橫向擴(kuò)展(Scaling out)。
擴(kuò)展在全網(wǎng)域優(yōu)化中的表現(xiàn)則完全不同,比如確保成功處理一條數(shù)據(jù)的算法也可成功處理10條、100條甚至100萬(wàn)條數(shù)據(jù)。無(wú)論這種度量類型是是否可行,事件復(fù)雜度(大O符號(hào))是最佳描述。延遲是性能擴(kuò)展殺手。你會(huì)想盡辦法將所有的運(yùn)算處理在同一臺(tái)機(jī)器上進(jìn)行。這就是所謂的縱向擴(kuò)展(Scaling up)。
如果天上能掉餡餅的話(當(dāng)然這是不可能的),我們或許能把橫向擴(kuò)展和縱向擴(kuò)展組合起來(lái)。但是,今天我們只打算介紹下面幾條提升效率的簡(jiǎn)單方法。
大O符號(hào)Java 7的 ForkJoinPool 和Java8 的并行數(shù)據(jù)流(parallel Stream) 都對(duì)并行處理有所幫助。當(dāng)在多核處理器上部署Java程序時(shí)表現(xiàn)尤為明顯,因所有的處理器都可以訪問(wèn)相同的內(nèi)存。
所以,這種并行處理較之在跨網(wǎng)絡(luò)的不同機(jī)器上進(jìn)行擴(kuò)展,根本的好處是幾乎可以完全消除延遲。
但不要被并行處理的效果所迷惑!請(qǐng)謹(jǐn)記下面兩點(diǎn):
降低算法復(fù)雜度毫無(wú)疑問(wèn)是改善性能最行之有效的辦法。比如對(duì)于一個(gè) HashMap 實(shí)例的 lookup() 方法來(lái)說(shuō),事件復(fù)雜度 O(1) 或者空間復(fù)雜度 O(1) 是最快的。但這種情況往往是不可能的,更別提輕易地實(shí)現(xiàn)。
如果你不能降低算法的復(fù)雜度,也可以通過(guò)找到算法中的關(guān)鍵點(diǎn)并加以改善的方法,來(lái)起到改善性能的作用。假設(shè)我們有下面這樣的算法示意圖:

該算法的整體時(shí)間復(fù)雜度為 O(N3),如果按照單獨(dú)訪問(wèn)順序計(jì)算也可得出復(fù)雜度為 O(N x O x P)。但是不管怎樣,在我們分析這段代碼時(shí)會(huì)發(fā)現(xiàn)一些奇怪的場(chǎng)景:
在沒(méi)有生產(chǎn)數(shù)據(jù)參照的情況下,我們可能會(huì)輕易的得出要優(yōu)化“高開(kāi)銷操作”的結(jié)論。但我們做出的優(yōu)化對(duì)交付的產(chǎn)品沒(méi)有起到任何效果。
優(yōu)化的金科玉律不外乎以下內(nèi)容:
理論就先談到這里。假設(shè)我們已經(jīng)發(fā)現(xiàn)了問(wèn)題出現(xiàn)在了右分支上,很有可能是因產(chǎn)品中的簡(jiǎn)單處理因耗費(fèi)了大量的時(shí)間而失去響應(yīng)(假設(shè)N、O和 P 的值非常大), 請(qǐng)注意文章中提及的左分支的時(shí)間復(fù)雜度為 O(N3)。這里所做出的努力并不能擴(kuò)展,但可以為用戶節(jié)省時(shí)間,將困難的性能改善推遲到后面再進(jìn)行。
這里有10條改善Java性能的小建議:
1、使用StringBuilder
StingBuilder 應(yīng)該是在我們的Java代碼中默認(rèn)使用的,應(yīng)該避免使用 + 操作符。或許你會(huì)對(duì) StringBuilder 的語(yǔ)法糖(syntax sugar)持有不同意見(jiàn),比如:
String x = "a" + args.length + "b";
                文章題目:10種簡(jiǎn)單的Java性能優(yōu)化-創(chuàng)新互聯(lián)
                
                鏈接URL:http://www.chinadenli.net/article44/idshe.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、手機(jī)網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站導(dǎo)航、用戶體驗(yàn)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容