<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

    2009年12月8日 #

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     

    優(yōu)化雜談

    Author :放翁

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

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

    CPU利用率和Load

             在過(guò)去做壓力測(cè)試的時(shí)候,我們經(jīng)常會(huì)關(guān)注兩個(gè)指標(biāo),CPULoad。有同學(xué)覺(jué)得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í)間切片分配給這些線(xiàn)程,而真正需要CPU的線(xiàn)程,卻不得不在到了時(shí)間片以后暫時(shí)放棄工作被掛起。因此在程序設(shè)計(jì)的時(shí)候就要考慮如何利用好CPU的這個(gè)資源,如何均勻的將壓力分?jǐn)偟礁鱾€(gè)CPU上(有時(shí)候就一個(gè)線(xiàn)程在不斷循環(huán),導(dǎo)致單個(gè)CPU負(fù)荷很高)。

    NIO在客戶(hù)端的使用

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

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

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

             服務(wù)端使用NIO就不多說(shuō)了,這里主要說(shuō)一下在客戶(hù)端的使用場(chǎng)景。兩者是否真的有很大的差別,是否NIO有絕對(duì)的優(yōu)勢(shì),其實(shí)還是和場(chǎng)景有關(guān)。簡(jiǎn)單說(shuō)來(lái)就一個(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ì)話(huà)碼來(lái)提供異步處理入口選擇如何處理)

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

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

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

    單線(xiàn)程和多線(xiàn)程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        中午左右收到一個(gè)看我blog的朋友的郵件,最近他在研究mapreduce,然后想用hadoop來(lái)做一些工作,不過(guò)遇到了一些問(wèn)題,我這邊也貼一下他的幾個(gè)問(wèn)題,同時(shí)覺(jué)得自己把自己的一些看法分享一下,當(dāng)然只是自己的一些想法,也許對(duì)新學(xué)習(xí)的同學(xué)有幫助。

       問(wèn)題:

    1. 從Map(K,V)的方式來(lái)看,難道m(xù)apreduce只能做統(tǒng)計(jì)?
    2. 目前我想除了日志分析之類(lèi)的功能外,還想做一個(gè)全文檢索的功能,類(lèi)似windows查詢(xún)一下,通過(guò)關(guān)鍵字查詢(xún)文件的位置即可(可能還要根據(jù)匹配度做排序),這個(gè)我很迷茫不知道怎么下手,痛苦ing
    3. 你的實(shí)踐是一個(gè)單機(jī)模式,如果用戶(hù)把一個(gè)1G的log已經(jīng)上傳到hdfs了,此時(shí)分割工作已經(jīng)完成,只需要從client那里得到文件基本信息和塊的location就可以了,那mapreduce怎么進(jìn)行下去呢?

       我給回復(fù)的郵件內(nèi)容:

       首先,MapReduce的思想和Hadoop的MapReduce的架構(gòu)不是一個(gè)概念,說(shuō)的具體一點(diǎn)也就是Hadoop的架構(gòu)設(shè)計(jì)只是MapReduce的一個(gè)子集思想的實(shí)現(xiàn)。每個(gè)人都可以根據(jù)自己對(duì)MapReduce的理解去實(shí)現(xiàn)業(yè)務(wù)處理,簡(jiǎn)單來(lái)說(shuō)多線(xiàn)程處理就是MapReduce的一種最簡(jiǎn)單的實(shí)現(xiàn),復(fù)雜來(lái)說(shuō)多機(jī)協(xié)調(diào)工作就是一種復(fù)雜的實(shí)現(xiàn)。

       MapReduce的思想里面最值得借鑒的:

       a.問(wèn)題分而治之。(找到流程的關(guān)鍵路徑,優(yōu)化可以并行處理的工作)

       b.計(jì)算靠近數(shù)據(jù)。(這也是hdfs存在的最重要的特點(diǎn),計(jì)算的轉(zhuǎn)移往往要比數(shù)據(jù)轉(zhuǎn)移廉價(jià),特別是對(duì)海量數(shù)據(jù)的處理)

       c.數(shù)據(jù)規(guī)模化隨著并行處理成數(shù)量級(jí)遞減。

       剩下的內(nèi)容就是各個(gè)框架對(duì)于非業(yè)務(wù)性需求的處理,例如容災(zāi),如何盡量少穿數(shù)據(jù)協(xié)調(diào)處理等等。

       針對(duì)他提出的三個(gè)問(wèn)題:

        1. Hadoop的mapreduce從架構(gòu)上來(lái)說(shuō)最適合的就是統(tǒng)計(jì)分析計(jì)算。做其他方面的工作需要考慮是否適合,而不是為了技術(shù)而技術(shù),先有需求再有技術(shù)選型。
        2.  對(duì)于你這個(gè)需求直接用搜索技術(shù)實(shí)現(xiàn)就可以了,不一定要硬套在mapreduce上。
        3. 對(duì)于海量數(shù)據(jù)是否一定要到hdsf上,或者就簡(jiǎn)單得數(shù)據(jù)物理或者邏輯切割來(lái)直接處理,根據(jù)自己業(yè)務(wù)場(chǎng)景選擇。hdfs的特點(diǎn)就是對(duì)文件切割,容災(zāi),數(shù)據(jù)邏輯存儲(chǔ)和物理存儲(chǔ)無(wú)關(guān)性(便于擴(kuò)容管理,同時(shí)也是計(jì)算靠近數(shù)據(jù)的技術(shù)保證)。

        是否使用MapReduce框架,HDFS存儲(chǔ)關(guān)鍵還是看你是否真的需要,當(dāng)現(xiàn)有框架對(duì)自己來(lái)說(shuō)并不合適的時(shí)候可以對(duì)小規(guī)模問(wèn)題定制MapReduce的處理,最簡(jiǎn)化就是你去多線(xiàn)程或者多進(jìn)程處理問(wèn)題,需求決定技術(shù)選型。

      

    posted @ 2009-12-09 13:09 岑文初 閱讀(2590) | 評(píng)論 (1)編輯 收藏

    Author:放翁(文初)
    Email:fangweng@taobao.com
    Blog:http://blog.csdn.net/cenwenchu79 

     

    當(dāng)前問(wèn)題:

    1.       不小比重的Rest請(qǐng)求都是無(wú)效請(qǐng)求,全部接納數(shù)據(jù)消耗比較多的時(shí)間。

    2.       Multipart類(lèi)型的大文件流請(qǐng)求無(wú)法做到合理快速過(guò)濾。(參數(shù)錯(cuò)誤請(qǐng)求,數(shù)據(jù)文件過(guò)多請(qǐng)求,文件大小過(guò)大請(qǐng)求)

    歸結(jié)來(lái)說(shuō),TOP平臺(tái)處理的服務(wù)在解析參數(shù)時(shí)比較消耗時(shí)間和帶寬(客戶(hù)端網(wǎng)絡(luò)速度慢導(dǎo)致傳輸字節(jié)流比較慢,文件比較大導(dǎo)致帶寬占用嚴(yán)重)

    處理方式:

    通過(guò)自行解析字節(jié)流方式來(lái)lazy化處理請(qǐng)求,減少無(wú)效請(qǐng)求對(duì)于解析參數(shù)時(shí)間消耗(導(dǎo)致web容器連接消耗)及帶寬消耗。

    優(yōu)化目標(biāo):

             Get由于內(nèi)容長(zhǎng)度有限不列入在優(yōu)化范圍。

             優(yōu)化Post方式的請(qǐng)求(普通的和Multipart),要求優(yōu)化后:在正常請(qǐng)求處理上兩者處理速度不低于傳統(tǒng)方式,非正常請(qǐng)求在策略命中情況下(后面會(huì)談到什么情況下優(yōu)化失效),性能有明顯提高。

    具體實(shí)現(xiàn):

            由于現(xiàn)在用的是傳統(tǒng)IO模式,因此可以用流的方式來(lái)lazy解析和處理請(qǐng)求(NIOchannel + buffer package就無(wú)法lazy了)。




             一共有三個(gè)組件角色:

    1. 請(qǐng)求處理配置策略:配置在解析參數(shù)時(shí),優(yōu)先的規(guī)則(參數(shù)可以從header,uri,post body中獲取,相互之間的優(yōu)先性),異常拋出規(guī)則(字節(jié)流長(zhǎng)度,文件大小,文件個(gè)數(shù)限制等),字節(jié)流解析模塊的參數(shù)配置(字節(jié)流解析的窗口大小,超時(shí)時(shí)間等)。

    2. 線(xiàn)程上下文:用來(lái)保存處理過(guò)的請(qǐng)求參數(shù)。一來(lái)復(fù)用,二來(lái)也是由于請(qǐng)求字節(jié)流處理不可逆(不保存字節(jié)流副本),必須保留。

    3. Http請(qǐng)求字節(jié)流解析模塊。根據(jù)具體的配置以及解析策略來(lái)解析字節(jié)流,同時(shí)將解析結(jié)果保存在線(xiàn)程上下文中。主要的實(shí)現(xiàn)代碼在于對(duì)Post消息體逐步解析部分(普通的Postmultipart

    壓力測(cè)試結(jié)果:

        正常請(qǐng)求場(chǎng)景( 100并發(fā)用戶(hù),multipart 文件大小300k,當(dāng)前業(yè)務(wù)場(chǎng)景這個(gè)值已經(jīng)滿(mǎn)足了):

    普通post的處理能力1000TPS。(servlet方式處理差不多,不過(guò)有波動(dòng))  

      multipart處理能力610TPS。(apache開(kāi)源項(xiàng)目fileupload,處理能力400TPS左右)

    錯(cuò)誤請(qǐng)求場(chǎng)景

             異常情況的處理有了很大提高,對(duì)于遠(yuǎn)程客戶(hù)端傳輸較慢或者是大流量圖片的錯(cuò)誤請(qǐng)求都有很大的優(yōu)化。

    優(yōu)化存在問(wèn)題:

    1. 參數(shù)缺失導(dǎo)致優(yōu)化失效。

    2. sign類(lèi)似的交驗(yàn),導(dǎo)致獲取所有的參數(shù)。

    3. 當(dāng)前圖片限制在300k,由于考慮處理速度快,就都沒(méi)有設(shè)置超過(guò)閥值存儲(chǔ)到本地,因此在高并發(fā)大流量的情況下也會(huì)有內(nèi)存問(wèn)題,當(dāng)然已經(jīng)做了部分保護(hù)。

    針對(duì)上面的兩個(gè)問(wèn)題,作了部分的協(xié)議限制,對(duì)于API2.0希望將所有的系統(tǒng)參數(shù)和業(yè)務(wù)參數(shù)區(qū)分開(kāi),放入到Http header中或者url中,這樣可以避免系統(tǒng)參數(shù)缺失導(dǎo)致優(yōu)化失敗,同時(shí)大量過(guò)濾系統(tǒng)參數(shù)出現(xiàn)問(wèn)題的無(wú)效請(qǐng)求。

    Sign類(lèi)似的交驗(yàn)放在流程最后,避免過(guò)早獲取所有參數(shù)。

    作安全保護(hù),設(shè)定簡(jiǎn)單丟棄或者io交互來(lái)緩解這個(gè)問(wèn)題。

             這部分內(nèi)容還有很多可以做得工作,其實(shí)最初的目的就是為了防止系統(tǒng)對(duì)于無(wú)效請(qǐng)求的處理消耗,我想在很多系統(tǒng)都會(huì)有這樣的問(wèn)題,利用緩存設(shè)置黑名單防止攻擊也是這樣的初衷。因此這點(diǎn)可以考慮在很多系統(tǒng)設(shè)計(jì)的時(shí)候都作一樣的優(yōu)化,對(duì)正常的不能優(yōu)化,起碼對(duì)錯(cuò)誤的可以做一些優(yōu)化,防止在異常請(qǐng)求高漲的時(shí)候,系統(tǒng)被擊垮.

    posted @ 2009-12-08 01:51 岑文初 閱讀(2243) | 評(píng)論 (2)編輯 收藏

    Author:放翁(文初)
    Email:fangweng@taobao.com
    Blog:http://blog.csdn.net/cenwenchu79


    其實(shí)想說(shuō)這句話(huà)很久了
    ,和很多同事接觸,有時(shí)候或多或少的都會(huì)發(fā)現(xiàn)大家會(huì)陷入在自己的一畝三分地里面.

             主要表現(xiàn)得癥狀

    1.       PD的需求就是目標(biāo),踏實(shí)的實(shí)現(xiàn),不懂的就猜。

    2.       經(jīng)驗(yàn)蓋過(guò)一切,設(shè)計(jì)系統(tǒng)就是要夠完備夠復(fù)雜。

    從開(kāi)發(fā)人員角度來(lái)看,第一種人多半比較有自己的想法,同時(shí)也有不少的工作經(jīng)驗(yàn),同時(shí)可能對(duì)技術(shù)比較著迷。另一種人多半是剛剛工作或者經(jīng)驗(yàn)不足,要么就是習(xí)慣性把工作當(dāng)任務(wù),而不是愛(ài)好,寫(xiě)程序也就是一份賺錢(qián)的活。但看起來(lái)其實(shí)各自都在自己的一畝三分地上搗鼓,忘記了作為一個(gè)開(kāi)發(fā)人員最基本的原則:“滿(mǎn)足客戶(hù)需求”。

    先說(shuō)1類(lèi)型吧,在我們的Team有一個(gè)剛畢業(yè)一年多的同學(xué),很勤奮,不論從學(xué)習(xí)以及工作,實(shí)實(shí)在在,踏踏實(shí)實(shí)。我們這邊來(lái)需求,通常大需求我們都會(huì)全體過(guò)一下,一些小點(diǎn)的需求他就自己考慮一下就作了。那天正要上線(xiàn),突然說(shuō)了一下設(shè)計(jì)修改的內(nèi)容,發(fā)現(xiàn)不僅滿(mǎn)足不了PD原有的需求,而且給系統(tǒng)帶來(lái)了緩存暴增的隱患。然后找來(lái)PD一談,其實(shí)他要的功能已經(jīng)在現(xiàn)有系統(tǒng)中已經(jīng)實(shí)現(xiàn),只是需要做部分的修改,而不需要新的去建立一套機(jī)制。這樣的情況其實(shí)在前前后后出現(xiàn)了不少次數(shù)了,但其實(shí)一直沒(méi)有和他細(xì)談。后來(lái)我下班時(shí)候和他一起回家的時(shí)候說(shuō):“很多時(shí)候, PD為了讓你理解,從開(kāi)發(fā)的角度想要去描述一個(gè)需求,但其實(shí)最終失去了他自己想要的東西。因此對(duì)你來(lái)說(shuō)第一步不是急忙的去考慮如何實(shí)現(xiàn)PD的想法或者和他爭(zhēng)論他的設(shè)計(jì)是否合理,而是需要先問(wèn)他:你想要什么,想要實(shí)現(xiàn)的東西最終目的是什么,能滿(mǎn)足客戶(hù)的什么需求?當(dāng)他能夠說(shuō)清楚他想要什么,也知道要的東西能給客戶(hù)帶來(lái)什么價(jià)值的時(shí)候,我們?cè)倩剡^(guò)頭來(lái)看,究竟應(yīng)該怎么做?”這其實(shí)和我每次和同學(xué)分享一些設(shè)計(jì)的時(shí)候步驟是一樣的,首先為什么要這么做,然后才是考慮如何從我的目標(biāo)去尋找行動(dòng)的方法方式,不然你會(huì)發(fā)現(xiàn)你和別人討論了許久的東西,實(shí)現(xiàn)出來(lái)的時(shí)候已經(jīng)背離了你的目標(biāo)很遠(yuǎn)。因此在做任何需求或者設(shè)計(jì)的時(shí)候第一個(gè)問(wèn)題就要問(wèn)自己為什么要做,作的過(guò)程中時(shí)刻要記得我的目標(biāo)是什么。這讓我想起了我在離開(kāi)阿軟的那些日子和王堅(jiān)博士談話(huà)以及聽(tīng)他的一些對(duì)于設(shè)計(jì)的理念,很多時(shí)候還沒(méi)有到規(guī)模化的情況下,先解決客戶(hù)的需求,在解決客戶(hù)需求以后,逐步的去考慮規(guī)模化問(wèn)題的設(shè)計(jì)。(當(dāng)然不是說(shuō)第一版設(shè)計(jì)就可以隨便作,良好的基礎(chǔ)能夠提升后續(xù)改進(jìn)的速度)。

    二類(lèi)型的就比較多了,其實(shí)是很多開(kāi)發(fā)人員的通病,包括有時(shí)候我自己也會(huì)陷入這樣的誤區(qū)。通常情況下有兩種場(chǎng)景會(huì)陷入這樣的誤區(qū),同時(shí)當(dāng)事人卻又不愿意改變。第一種情況就是覺(jué)得自己有不少的經(jīng)驗(yàn),同時(shí)對(duì)技術(shù)很執(zhí)著,希望設(shè)計(jì)出來(lái)的都是很完美的,一次發(fā)布就可以滿(mǎn)足個(gè)12年,但其實(shí)從這些年的設(shè)計(jì)角度來(lái)看,首先系統(tǒng)都是不斷迭代進(jìn)化的,因此一步到位的說(shuō)法基本上不靠譜(除非就是一模一樣的場(chǎng)景代碼重復(fù)使用),其次系統(tǒng)的架構(gòu)要做的足夠靈活,通常情況就需要先做核心功能,預(yù)留出足夠的空間和切入點(diǎn),這樣對(duì)未來(lái)擴(kuò)展和需求變化有足夠的適應(yīng)度。從這兩點(diǎn)來(lái)看,其實(shí)設(shè)計(jì)初期就是要求找到客戶(hù)最想要的,擴(kuò)展可以實(shí)現(xiàn)客戶(hù)可能要的,防范客戶(hù)沒(méi)有估量到的。但這其實(shí)就需要和我們的產(chǎn)品設(shè)計(jì)師有充分的交流,好的產(chǎn)品設(shè)計(jì)師不會(huì)告訴你你怎么去實(shí)現(xiàn),但是他會(huì)告訴你我想要的是什么,這些能給客戶(hù)帶來(lái)什么,這時(shí)候你可以告訴他我能夠通過(guò)什么方式來(lái)滿(mǎn)足你的需求。這樣的開(kāi)發(fā)和產(chǎn)品設(shè)計(jì)交流的結(jié)果才是技術(shù)化的產(chǎn)品,大家各司其職,同時(shí)也通曉對(duì)方領(lǐng)域的一些情況,對(duì)對(duì)方領(lǐng)域的只能給出建議,不是指導(dǎo),這點(diǎn)在TOP我很慶幸有很好的黑羽同學(xué),我們的交流就是這樣產(chǎn)生良性互動(dòng)。這有點(diǎn)撤遠(yuǎn)了,剛才說(shuō)了第一種場(chǎng)景,然后說(shuō)說(shuō)第二種場(chǎng)景,就是初期其實(shí)大家都沒(méi)有明確細(xì)節(jié),但是在實(shí)施過(guò)程中開(kāi)發(fā)人員會(huì)根據(jù)自己的接觸面來(lái)選擇一些技術(shù)和架構(gòu)設(shè)計(jì),最后看起來(lái)很復(fù)雜,很完美,但其實(shí)越是復(fù)雜的設(shè)計(jì)背后有越多的隱患。但是此時(shí)因?yàn)橐呀?jīng)設(shè)計(jì)好了,就不愿意再去簡(jiǎn)化,也不愿意聽(tīng)任何人的意見(jiàn),其實(shí)這是很危險(xiǎn)的。我過(guò)去也犯過(guò)類(lèi)似的錯(cuò)誤,但是其實(shí)當(dāng)你冷靜下來(lái),想想那句話(huà),我們的目標(biāo)是什么:“滿(mǎn)足客戶(hù)需求”,這時(shí)候你就會(huì)考慮,這么復(fù)雜的系統(tǒng)會(huì)不會(huì)給客戶(hù)帶來(lái)更多的不穩(wěn)定以及復(fù)雜度,其實(shí)客戶(hù)不關(guān)心你背后如何實(shí)現(xiàn)的,但是你需要滿(mǎn)足客戶(hù)的最基本的需求,用起來(lái)方便,高效,實(shí)實(shí)在在提供了解決問(wèn)題的手段。

    今天下午面試了一個(gè)外部的同學(xué),工作年限比我長(zhǎng),看了簡(jiǎn)歷也經(jīng)歷了很多項(xiàng)目,同時(shí)在描述的時(shí)候?qū)懥藢?duì)高并發(fā),分布式等等都很熟悉和熱衷,我開(kāi)始看了簡(jiǎn)歷就擔(dān)心,可能我這邊不一定要他,因?yàn)槲遗滤_(kāi)口就是說(shuō)一大堆如何做高并發(fā)和分布式的內(nèi)容。在我看來(lái)如果你沒(méi)有搞清楚你什么時(shí)候要用牛刀,什么時(shí)候要用剪刀的人,和你談?wù)撆5兜臉?gòu)造其實(shí)沒(méi)啥意思,因?yàn)樵谖铱磥?lái),技術(shù)只要你肯花時(shí)間去學(xué),沒(méi)什么學(xué)不到的,但是做事方式和項(xiàng)目設(shè)計(jì)經(jīng)驗(yàn)卻是長(zhǎng)時(shí)間積累的。幸好今天和他一談,他對(duì)于技術(shù)的態(tài)度以及架構(gòu)設(shè)計(jì)的思想都和我想的比較接近,不是為了技術(shù)而技術(shù),不是為了過(guò)程而過(guò)程,了解如何從簡(jiǎn)如繁,再?gòu)姆比牒?jiǎn),最終能夠找到自己的目標(biāo)。當(dāng)然后來(lái)還是談了很多技術(shù)細(xì)節(jié)的問(wèn)題,畢竟干活還是要一個(gè)好手,作了那么多年如果沒(méi)有經(jīng)驗(yàn)和技術(shù)積累也是很可怕的事情。最后我問(wèn)了他兩個(gè)問(wèn)題:1.你學(xué)習(xí)一個(gè)新技術(shù)的過(guò)程是怎么樣的?2.你和你同事如果在設(shè)計(jì)方案上有沖突你怎么解決?他告訴我他學(xué)習(xí)新技術(shù)首先會(huì)去考慮這個(gè)技術(shù)的特點(diǎn)是什么,和其他技術(shù)的差別,他的擅長(zhǎng)領(lǐng)域是什么,這樣才能夠用到實(shí)處。第二個(gè)問(wèn)題他和我說(shuō)就是開(kāi)會(huì)討論,最后大家群體決定。我對(duì)他第一個(gè)問(wèn)題感到很滿(mǎn)意,因?yàn)槲揖托枰@樣的同事,第二個(gè)問(wèn)題我給了他一個(gè)建議,其實(shí)在很多時(shí)候,將別人的架構(gòu)設(shè)計(jì)的優(yōu)點(diǎn)融入到自己的設(shè)計(jì)中,不再以方案作為邊界,那么大家最終就很容易達(dá)成一致,因?yàn)槟阍诮邮軇e人的思想時(shí)其實(shí)能夠看到自己的不足,同時(shí)對(duì)待別人不是用否定的態(tài)度,會(huì)讓你更容易得到認(rèn)可和接受。(這點(diǎn)作起來(lái)需要不斷的改變程序員自身的好勝個(gè)性,我起碼還是出于變化中

    我記得我小時(shí)候上政治課的時(shí)候,老師給我們劃分了三種人:有能力但是沒(méi)有道德的人是危險(xiǎn)的人,沒(méi)有能力但是有道德的人是對(duì)社會(huì)無(wú)害的人(覺(jué)得像葛優(yōu)說(shuō)的那個(gè)對(duì)社會(huì)無(wú)害的海龜一個(gè)概念),有能力同時(shí)也有道德的人是對(duì)社會(huì)有益的人。我覺(jué)得其實(shí)程序員也就可以從兩個(gè)緯度看:

    1.       有能力,有經(jīng)驗(yàn),對(duì)技術(shù)有追求。

    2.       對(duì)產(chǎn)品化和客戶(hù)沒(méi)有任何感覺(jué)。

    擁有了素質(zhì)1但是沒(méi)有素質(zhì)2,那么最多也就只能說(shuō)是試驗(yàn)室的花朵,在大學(xué)搞搞研究還不錯(cuò),實(shí)際要做出產(chǎn)品來(lái)可能就是紙上談兵,好鋼始終用不到刀刃上,有力沒(méi)地使。

    素質(zhì)1有所欠缺,素質(zhì)2很明晰,對(duì)自己目標(biāo)不斷追求,其實(shí)這樣的人,有時(shí)候笨鳥(niǎo)也會(huì)飛的比聰明的鳥(niǎo)更高。

    擁有12的人,當(dāng)然就是最好的人,只需要學(xué)會(huì)做人那么就可以發(fā)揮自己的能量。(程序員有時(shí)候就是很難改變自己的個(gè)性,去學(xué)會(huì)如何溝通和理解)
             最后一類(lèi)就是自以為有12的人,這類(lèi)人最怕就是面試的時(shí)候被考官通過(guò),那么后續(xù)的問(wèn)題就大了。

    說(shuō)了怎么多,其實(shí)也無(wú)非想說(shuō)出一個(gè)程序員這些年的經(jīng)歷,從做開(kāi)發(fā)到做基礎(chǔ)平臺(tái),到做業(yè)務(wù)平臺(tái),該怎么踏實(shí)做事,該在什么時(shí)候找到自己的瓶頸,該在什么時(shí)候改變自己的狀態(tài),都需要自己好好的讓自己冷靜下來(lái)想想。做基礎(chǔ)平臺(tái)需要耐得住寂寞,同時(shí)也要知道自己是有客戶(hù)的,服務(wù)不好客戶(hù),那么基礎(chǔ)組件平臺(tái)就是玩具。做業(yè)務(wù)平臺(tái)需要學(xué)會(huì)去分析和溝通,需要去了解每一個(gè)層次的設(shè)計(jì)如何協(xié)作,同時(shí)在兼顧業(yè)務(wù)需求的同時(shí)滿(mǎn)足隱性需求(穩(wěn)定性,可用性,響應(yīng)速度,規(guī)模化等等)。但歸根到底,能給開(kāi)發(fā)人員不斷能量的不是技術(shù)本身,而是你用技術(shù)給你的客戶(hù)帶來(lái)的價(jià)值,對(duì)你的認(rèn)可是長(zhǎng)期做事的一個(gè)最基本的動(dòng)力,因?yàn)楫?dāng)你現(xiàn)在覺(jué)得純做技術(shù)能夠支持你不斷向前走的時(shí)候,其實(shí)在不遠(yuǎn)的將來(lái)你會(huì)體會(huì)到原來(lái)過(guò)程和目標(biāo)是同樣重要的。走出自己的一畝三分地,給自己多一點(diǎn)的空間,會(huì)讓自己看得更遠(yuǎn),走的更高。

    posted @ 2009-12-08 00:54 岑文初 閱讀(4238) | 評(píng)論 (6)編輯 收藏

    主站蜘蛛池模板: 免费看男人j放进女人j免费看| 曰批全过程免费视频在线观看无码| 女人体1963午夜免费视频| 国产成人精品免费视频大全麻豆| 日本特黄特色免费大片| 国产亚洲精品a在线观看app| 亚洲 日韩 色 图网站| 中文字幕免费人成乱码中国| 无码高潮少妇毛多水多水免费| 亚洲色无码专区在线观看| 亚洲砖码砖专无区2023| 99在线免费视频| 国产自产拍精品视频免费看| 久久亚洲精品成人av无码网站 | 亚洲国产精品不卡在线电影| 亚洲国产精华液2020| 污视频在线免费观看| 一本久久综合亚洲鲁鲁五月天| 亚洲成人福利网站| 91免费在线视频| 国产乱人免费视频| 亚洲高清中文字幕| 国产99久久久久久免费看| 成年女人18级毛片毛片免费| 五月天网站亚洲小说| 一区视频免费观看| 国外成人免费高清激情视频| 亚洲AV日韩AV永久无码下载| 一级毛片免费在线播放| 在线观看成人免费视频| 久久亚洲AV成人无码电影| 中文字幕看片在线a免费| 国产乱弄免费视频| 亚洲日本一线产区和二线 | 亚洲一日韩欧美中文字幕在线 | 精品无码AV无码免费专区 | 亚洲码和欧洲码一码二码三码 | 亚洲人片在线观看天堂无码| 永久在线观看www免费视频| 国产精一品亚洲二区在线播放| 理论秋霞在线看免费|