放翁(文初)的一畝三分地

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評(píng)論 :: 0 Trackbacks

          2009年12月11日 #

               摘要: Beatles小記(三)-分布式數(shù)據(jù)流分析中Master的橫向擴(kuò)展  閱讀全文
          posted @ 2012-01-17 13:21 岑文初 閱讀(5282) | 評(píng)論 (2)編輯 收藏

               摘要: Beatles小記-分布式數(shù)據(jù)流分析框架(二),局部代碼設(shè)計(jì)和實(shí)現(xiàn)分享  閱讀全文
          posted @ 2011-12-09 16:44 岑文初 閱讀(4828) | 評(píng)論 (4)編輯 收藏

               摘要: 分布式流式數(shù)據(jù)分析設(shè)計(jì)和代碼分析  閱讀全文
          posted @ 2011-12-07 16:46 岑文初 閱讀(9687) | 評(píng)論 (7)編輯 收藏

               摘要: java優(yōu)化設(shè)計(jì)實(shí)現(xiàn)細(xì)節(jié)分享  閱讀全文
          posted @ 2011-09-23 14:03 岑文初 閱讀(5130) | 評(píng)論 (1)編輯 收藏

               摘要: 兩個(gè)開放平臺(tái)內(nèi)部組件開放   閱讀全文
          posted @ 2011-07-12 11:54 岑文初 閱讀(3782) | 評(píng)論 (2)編輯 收藏

               摘要: 討論一下并發(fā)消息下行的設(shè)計(jì)方案和實(shí)現(xiàn)  閱讀全文
          posted @ 2011-06-23 12:16 岑文初 閱讀(4557) | 評(píng)論 (0)編輯 收藏

               摘要: Jetty內(nèi)部透明簡(jiǎn)單實(shí)現(xiàn)  閱讀全文
          posted @ 2011-06-22 17:03 岑文初 閱讀(4014) | 評(píng)論 (0)編輯 收藏

               摘要: 慢連接&LazyParser  閱讀全文
          posted @ 2011-06-20 23:47 岑文初 閱讀(5356) | 評(píng)論 (0)編輯 收藏

               摘要: PipeComet測(cè)試  閱讀全文
          posted @ 2011-06-08 23:58 岑文初 閱讀(6948) | 評(píng)論 (0)編輯 收藏

               摘要: 一段代碼,幾句話  閱讀全文
          posted @ 2011-04-13 23:11 岑文初 閱讀(4601) | 評(píng)論 (1)編輯 收藏

               摘要: 開放平臺(tái)的技術(shù)問題  閱讀全文
          posted @ 2011-03-31 00:43 岑文初 閱讀(4830) | 評(píng)論 (4)編輯 收藏

               摘要: Web容器測(cè)試模型選擇  閱讀全文
          posted @ 2011-03-31 00:40 岑文初 閱讀(3382) | 評(píng)論 (0)編輯 收藏

               摘要: 十年  閱讀全文
          posted @ 2011-03-08 23:46 岑文初 閱讀(2929) | 評(píng)論 (6)編輯 收藏

               摘要: 模擬登錄看前端門外漢學(xué)習(xí)  閱讀全文
          posted @ 2011-03-03 23:26 岑文初 閱讀(5546) | 評(píng)論 (10)編輯 收藏

               摘要: 邏輯劃分線程池  閱讀全文
          posted @ 2011-03-01 00:32 岑文初 閱讀(5171) | 評(píng)論 (4)編輯 收藏

               摘要: OAuth2的一些改變  閱讀全文
          posted @ 2011-02-28 23:01 岑文初 閱讀(3416) | 評(píng)論 (0)編輯 收藏

               摘要: “淘寶的”開放平臺(tái)  閱讀全文
          posted @ 2011-02-23 23:39 岑文初 閱讀(5089) | 評(píng)論 (4)編輯 收藏

               摘要: 交流分享  閱讀全文
          posted @ 2011-02-20 23:58 岑文初 閱讀(4970) | 評(píng)論 (7)編輯 收藏

               摘要: ask & answer  閱讀全文
          posted @ 2011-01-12 23:22 岑文初 閱讀(3871) | 評(píng)論 (0)編輯 收藏

               摘要: 耗內(nèi)存應(yīng)用優(yōu)化實(shí)際案例  閱讀全文
          posted @ 2010-12-22 23:40 岑文初 閱讀(4307) | 評(píng)論 (0)編輯 收藏

               摘要: Local Cache的小TIP   閱讀全文
          posted @ 2010-12-14 22:34 岑文初 閱讀(3422) | 評(píng)論 (4)編輯 收藏

               摘要: SD開放平臺(tái)技術(shù)分享  閱讀全文
          posted @ 2010-12-13 20:35 岑文初 閱讀(3203) | 評(píng)論 (2)編輯 收藏

               摘要: Facebook優(yōu)化分享后記  閱讀全文
          posted @ 2010-12-12 19:43 岑文初 閱讀(3445) | 評(píng)論 (4)編輯 收藏

               摘要: 這篇文章將會(huì)從問題,技術(shù)背景,設(shè)計(jì)實(shí)現(xiàn),代碼范例這些角度去談基于管道化和事件驅(qū)動(dòng)模型的Web請(qǐng)求處理。建議從頭看,能夠從概念上更多的去理解和碰撞,其中的一些描述和例子也許不是很恰當(dāng),也希望得到更多的反饋。  閱讀全文
          posted @ 2010-11-25 14:44 岑文初 閱讀(4122) | 評(píng)論 (7)編輯 收藏

               摘要: 這篇文章將會(huì)從問題,技術(shù)背景,設(shè)計(jì)實(shí)現(xiàn),代碼范例這些角度去談基于管道化和事件驅(qū)動(dòng)模型的Web請(qǐng)求處理。建議從頭看,能夠從概念上更多的去理解和碰撞,其中的一些描述和例子也許不是很恰當(dāng),也希望得到更多的反饋。  閱讀全文
          posted @ 2010-11-24 01:26 岑文初 閱讀(3374) | 評(píng)論 (4)編輯 收藏

               摘要: 圖片是大綱,先拋出來,后續(xù)會(huì)有更詳細(xì)的文章分享  閱讀全文
          posted @ 2010-11-17 01:00 岑文初 閱讀(2656) | 評(píng)論 (2)編輯 收藏

               摘要: 如果關(guān)注開放平臺(tái)或者關(guān)注平臺(tái)的一些內(nèi)容,這篇文章應(yīng)該有點(diǎn)內(nèi)容可看  閱讀全文
          posted @ 2010-10-11 23:42 岑文初 閱讀(2924) | 評(píng)論 (1)編輯 收藏

               摘要: 美國(guó)JavaOne之行內(nèi)容,需要看直播請(qǐng)關(guān)注微博  閱讀全文
          posted @ 2010-09-22 15:55 岑文初 閱讀(1678) | 評(píng)論 (1)編輯 收藏

               摘要: 代碼背后的點(diǎn)滴,通過一些設(shè)計(jì)理念來分享技術(shù)的積累  閱讀全文
          posted @ 2010-09-09 02:05 岑文初 閱讀(4299) | 評(píng)論 (8)編輯 收藏

               摘要: 面試有感  閱讀全文
          posted @ 2010-09-02 11:31 岑文初 閱讀(2412) | 評(píng)論 (4)編輯 收藏

               摘要: 對(duì)同學(xué)性能優(yōu)化總結(jié)的一點(diǎn)回復(fù)  閱讀全文
          posted @ 2010-08-23 16:58 岑文初 閱讀(2292) | 評(píng)論 (0)編輯 收藏

               摘要: ppt分享  閱讀全文
          posted @ 2010-08-10 07:48 岑文初 閱讀(3640) | 評(píng)論 (2)編輯 收藏

               摘要: 在概念篇介紹完以后,開始實(shí)際的對(duì)TOP開始做技術(shù)改造。(這篇東西更像是對(duì)短期工作的總結(jié)和匯報(bào),寫的不是很詳實(shí),后續(xù)會(huì)有一個(gè)ppt來深化異步化的一些思想)下面將第一階段的工作做個(gè)總結(jié),第一階段主要做了以下幾個(gè)方面的事情  閱讀全文
          posted @ 2010-08-06 00:38 岑文初 閱讀(4221) | 評(píng)論 (0)編輯 收藏

               摘要: 淘寶一年陳  閱讀全文
          posted @ 2010-07-24 00:34 岑文初 閱讀(2854) | 評(píng)論 (7)編輯 收藏

               摘要: Web服務(wù)的重放攻擊的一點(diǎn)想法  閱讀全文
          posted @ 2010-07-07 00:40 岑文初 閱讀(3189) | 評(píng)論 (0)編輯 收藏

               摘要: Web服務(wù)請(qǐng)求異步化介紹  閱讀全文
          posted @ 2010-06-30 08:41 岑文初 閱讀(5237) | 評(píng)論 (4)編輯 收藏

               摘要: Web服務(wù)請(qǐng)求異步化測(cè)試  閱讀全文
          posted @ 2010-06-13 14:35 岑文初 閱讀(4431) | 評(píng)論 (9)編輯 收藏

               摘要: 訪問TOP鏈接超時(shí)和重置問題  閱讀全文
          posted @ 2010-06-09 13:34 岑文初 閱讀(1721) | 評(píng)論 (1)編輯 收藏

               摘要: 對(duì)TOP高并發(fā)的一點(diǎn)回答  閱讀全文
          posted @ 2010-06-07 21:22 岑文初 閱讀(1769) | 評(píng)論 (0)編輯 收藏

               摘要: TOP的價(jià)值所在  閱讀全文
          posted @ 2010-06-01 08:49 岑文初 閱讀(3542) | 評(píng)論 (5)編輯 收藏

               摘要: 開放平臺(tái)兩三點(diǎn)感悟(下)  閱讀全文
          posted @ 2010-06-01 02:53 岑文初 閱讀(3290) | 評(píng)論 (4)編輯 收藏

               摘要: 開放平臺(tái)兩三點(diǎn)感悟  閱讀全文
          posted @ 2010-05-28 02:29 岑文初 閱讀(4394) | 評(píng)論 (6)編輯 收藏

          http://t.sina.com.cn/fangweng

          posted @ 2010-05-24 21:54 岑文初 閱讀(1291) | 評(píng)論 (0)編輯 收藏

               摘要: ModJK與tomcat消息傳遞出現(xiàn)的串消息問題  閱讀全文
          posted @ 2010-05-11 20:00 岑文初 閱讀(2778) | 評(píng)論 (0)編輯 收藏

               摘要: 異步模式下的Web請(qǐng)求(技術(shù)介紹篇)  閱讀全文
          posted @ 2010-04-20 08:50 岑文初 閱讀(4249) | 評(píng)論 (1)編輯 收藏

               摘要: Q1技術(shù)點(diǎn)滴  閱讀全文
          posted @ 2010-04-02 02:26 岑文初 閱讀(3127) | 評(píng)論 (5)編輯 收藏

               摘要: 普通程序員的2009  閱讀全文
          posted @ 2010-01-29 01:34 岑文初 閱讀(2156) | 評(píng)論 (4)編輯 收藏

           

          優(yōu)化雜談

          Author :放翁

          Bloghttp://blog.csdn.net/cenwenchu79/

                   當(dāng)應(yīng)用遇到規(guī)模化問題的時(shí)候,就是考慮性能優(yōu)化的時(shí)候了。今天同事和我聊起了NIO在客戶端的使用與BIO有什么優(yōu)勢(shì),也勾起了我前一陣子和其他同學(xué)交流優(yōu)化的一些想法,純粹個(gè)人的一點(diǎn)想法。

          CPU利用率和Load

                   在過去做壓力測(cè)試的時(shí)候,我們經(jīng)常會(huì)關(guān)注兩個(gè)指標(biāo),CPULoad。有同學(xué)覺得CPU利用率上去了Load肯定也上去了,Load上去了CPU利用率同樣會(huì)上去。但是在一些需要優(yōu)化的場(chǎng)景下,常常會(huì)看到Load很高,CPU利用率卻可能比較低(多核更是可能出現(xiàn)分配不均的情況)。Load其實(shí)就是等待處理的任務(wù)隊(duì)列,當(dāng)你的應(yīng)用在等待同步消息返回處理的同時(shí),CPU還是會(huì)將時(shí)間切片分配給這些線程,而真正需要CPU的線程,卻不得不在到了時(shí)間片以后暫時(shí)放棄工作被掛起。因此在程序設(shè)計(jì)的時(shí)候就要考慮如何利用好CPU的這個(gè)資源,如何均勻的將壓力分?jǐn)偟礁鱾€(gè)CPU上(有時(shí)候就一個(gè)線程在不斷循環(huán),導(dǎo)致單個(gè)CPU負(fù)荷很高)。

          NIO在客戶端的使用

                   Http消息設(shè)置keepalive和采用NIO的方式復(fù)用信道、BIO結(jié)合連接池的方式,最基本的目的就是降低建立TCP產(chǎn)生握手的成本,最大限度的復(fù)用已有的資源,但是否NIO就只有復(fù)用信道這點(diǎn)呢?

                   NIOBIO在數(shù)據(jù)傳輸和處理的模式上有不同,NIO采用的是BufferPacket+Channel的模式,這其實(shí)和操作系統(tǒng)本身的傳輸模式很類似,而BIOStream的模式是Java自己獨(dú)特的模式。在采用NIO的這種數(shù)據(jù)傳輸模式以后,可以充分利用操作系統(tǒng)本身對(duì)傳輸?shù)膬?yōu)化,因此這是一方面好處。另一方面異步和事件機(jī)制的使用,可以降低對(duì)于昂貴的資源申請(qǐng),在高并發(fā)下提高處理能力。

          NIO客戶端的編程模型最大特點(diǎn):依賴反置,松耦合帶來性能提升。在請(qǐng)求流程協(xié)議中支持“票根”,也就是我們說的回執(zhí)。例如,你今天面試完了,不需要你在阿里巴巴前臺(tái)等著結(jié)果,直接留個(gè)電話,有消息就會(huì)直接通知,電話就是通知結(jié)果和服務(wù)請(qǐng)求者的關(guān)聯(lián)手段。(此時(shí)阿里巴巴前臺(tái)和會(huì)議室就會(huì)有足夠的空間給其他人來面試,這就是資源)

                   服務(wù)端使用NIO就不多說了,這里主要說一下在客戶端的使用場(chǎng)景。兩者是否真的有很大的差別,是否NIO有絕對(duì)的優(yōu)勢(shì),其實(shí)還是和場(chǎng)景有關(guān)。簡(jiǎn)單說來就一個(gè)判斷標(biāo)準(zhǔn):應(yīng)用對(duì)于通道的利用率是否夠高。下面列了4種場(chǎng)景:

          1. 一次請(qǐng)求數(shù)據(jù)量很少,服務(wù)處理速度很快。

          2. 一次請(qǐng)求數(shù)據(jù)量很多,服務(wù)處理速度很快。

          3. 一次請(qǐng)求數(shù)據(jù)量很少,服務(wù)處理速度很慢。

          4. 一次請(qǐng)求數(shù)據(jù)量很多,服務(wù)處理速度很慢。

          場(chǎng)景1,傳輸效率很高,服務(wù)處理速度很快,一次請(qǐng)求很快就被完成,采用NIOBIO,在性能優(yōu)勢(shì)上除了操作系統(tǒng)對(duì)NIO的優(yōu)化以外,BIO連接池不輸于NIO。在易用性上,BIO更加容易處理。(NIO的異步機(jī)制,就要求消息傳輸協(xié)議需要有會(huì)話碼來提供異步處理入口選擇如何處理)

          場(chǎng)景2,傳輸過程比較長(zhǎng),消耗時(shí)間比較多,服務(wù)處理速度很快,因此交互的時(shí)間大部分都還是在數(shù)據(jù)通道傳輸上,由于NIO在傳輸過程中依然是串行化的,因此BIO的連接池優(yōu)于NIO,同時(shí)NIO一個(gè)客戶端只有一個(gè)通道,因此BIO開的連接池越大,并行處理能力越強(qiáng),因此BIO效率比較好一些。

          場(chǎng)景3,傳輸量比較少,服務(wù)處理比較慢,很明顯這是通道利用率低的表現(xiàn),NIO有絕對(duì)的優(yōu)勢(shì),特別是在高并發(fā)下。信道和服務(wù)端客戶端資源被充分利用。

          場(chǎng)景4,傳輸量比較多,服務(wù)處理也比較慢,這時(shí)候可以發(fā)現(xiàn)信道利用率取決于服務(wù)事件和傳輸消耗時(shí)間的比例,這類場(chǎng)景某些情況下BIO也會(huì)優(yōu)于NIO

          單線程和多線程

                   在使用多線程來優(yōu)化程序的時(shí)候,是否考慮過多線程的使用場(chǎng)景,多線程不是萬能藥,在某些情況下還可能是毒藥。使用多線程的過程中,需要考慮這么幾個(gè)因素:

          1. 資源競(jìng)爭(zhēng),復(fù)雜度增加。

          為什么前面提到的NIO客戶端在處理數(shù)據(jù)流發(fā)送和讀取的時(shí)候都是采用單線程,數(shù)據(jù)流的發(fā)送和讀取都是在一個(gè)數(shù)據(jù)通道上的,而讀取和發(fā)送本身時(shí)間消耗是固定的(不論是多線程還是單線程),同時(shí)增加了復(fù)雜度(需要處理數(shù)據(jù)包整合問題)。這其實(shí)就是在資源上的串行化操作直接導(dǎo)致了任務(wù)的串行化,因此任務(wù)多線程反而起到了反作用。

          2. 是否是關(guān)鍵路徑的工作,占關(guān)鍵路徑的比例。

          首先,在優(yōu)化以前需要考慮優(yōu)化的內(nèi)容是否是關(guān)鍵路徑的工作,如果不是,那么增加復(fù)雜度實(shí)現(xiàn)的多線程模式,就沒有價(jià)值。其次就是看是否是在關(guān)鍵路徑中占有比較大的比例,同樣的,還是投入產(chǎn)出比例(多線程帶來的復(fù)雜度以及在高并發(fā)下的一些資源保護(hù)措施都需要很多的維護(hù)成本)。

          3. 任務(wù)的合理切分。

          NIO的客戶端,接受數(shù)據(jù)的事件將會(huì)寫得很輕量級(jí),但是接受到數(shù)據(jù)然后分析數(shù)據(jù)還原成業(yè)務(wù)對(duì)象,則會(huì)通過線程池的方式來分別處理。就好比監(jiān)聽連接到來,和實(shí)際的去建立連接分成了兩個(gè)階段的任務(wù),讓事件型的任務(wù)單純,快速執(zhí)行,讓與業(yè)務(wù)相關(guān)的部分通過多線程并行的方式提高處理效率。總的來說就是把任務(wù)劃分成為系統(tǒng)性的任務(wù)和業(yè)務(wù)性的任務(wù),前者消耗時(shí)間少,設(shè)計(jì)盡量簡(jiǎn)單高效,采用單線程處理即可,后者通常情況下在處理流程和資源上不沖突的情況可以通過多線程并行提高效率。

                   優(yōu)化應(yīng)用關(guān)注點(diǎn):

          A.關(guān)鍵路徑是否可以優(yōu)化,關(guān)鍵路徑的任務(wù)拆分。

          B.關(guān)鍵路徑上的單個(gè)任務(wù)是否可以拆分并行執(zhí)行。(是否有資源競(jìng)爭(zhēng),是否會(huì)有流程上的前后依賴,是否增加復(fù)雜度引入新的不穩(wěn)定因素)

          C.系統(tǒng)資源和依賴外部系統(tǒng)是否會(huì)成為瓶頸。(單機(jī)的CPU,IO都會(huì)在一定的壓力下成下降趨勢(shì),并行執(zhí)行反而降低了處理能力)

          因此,可以看到不論是MapReduce設(shè)計(jì)下的Hadoop,還是Erlang語言級(jí)別的特性,都盡量的希望任務(wù)之間可以并行執(zhí)行,相互之間低耦合,通過異步事件消息通知方式來交互,同時(shí)數(shù)據(jù)沒有共享,防止資源競(jìng)爭(zhēng)導(dǎo)致無法并行高效處理。系統(tǒng)設(shè)計(jì)還是要根據(jù)場(chǎng)景來判斷使用什么方式優(yōu)化,越簡(jiǎn)單越好。

          posted @ 2010-01-27 01:45 岑文初 閱讀(3670) | 評(píng)論 (1)編輯 收藏

               摘要: 基于MapReduce的配置型日志分析組件  閱讀全文
          posted @ 2010-01-12 21:58 岑文初 閱讀(3866) | 評(píng)論 (5)編輯 收藏

               摘要: TOP團(tuán)隊(duì)招賢納士  閱讀全文
          posted @ 2009-12-11 15:52 岑文初 閱讀(1909) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 本溪| 昂仁县| 绥阳县| 哈巴河县| 香河县| 靖江市| 贺兰县| 靖边县| 昌江| 长沙县| 扶余县| 上犹县| 汝南县| 福贡县| 临沧市| 家居| 扶余县| 应用必备| 曲沃县| 湟源县| 柞水县| 垦利县| 新民市| 马公市| 云林县| 永定县| 锡林郭勒盟| 葫芦岛市| 文化| 自治县| 凤台县| 大化| 庆元县| 全州县| 承德市| 靖安县| 泸西县| 长宁县| 临洮县| 阿勒泰市| 巴彦淖尔市|