<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

    #

       今天是轉(zhuǎn)崗到淘寶的第七天,也算是一周吧,期待來這個(gè)團(tuán)隊(duì)已經(jīng)有快大半年了,這次阿軟的重組給了一個(gè)機(jī)會(huì),過去的就過去吧,不再回首有任何的抱怨和遺憾,需要面對(duì)的是新的將來。

        很奇怪,來到淘寶,都是熟人,Boss是早就相識(shí)的菲青,TOP團(tuán)隊(duì)的自雪,鳳先,秀芳及我不認(rèn)識(shí)但是認(rèn)識(shí)我的其他同學(xué)都很熱情,運(yùn)營(yíng),PD,OST都是以前阿軟的老同學(xué),還有其他幾個(gè)團(tuán)隊(duì)的朋友,感覺回到了家,而不是離開了家。

        原先來淘寶是比較堅(jiān)決的,同時(shí)也得到王博士的支持,心里還是比較有底的,不過就是擔(dān)心過來以后和淘寶已有的團(tuán)隊(duì)合作可能會(huì)有磨合期,因?yàn)閾?dān)心有“小圈子”。結(jié)果卻是很出乎我的意料,TOP的人就和做的事情一樣,是一批開放的人,自雪,鳳先,張三各個(gè)都很放的開的和我聊,對(duì)于架構(gòu),對(duì)于技術(shù),對(duì)于未來的發(fā)展,這些人坐在一起什么都可以說,自己覺得自己早先是用老思維來看待這個(gè)團(tuán)隊(duì)了。這個(gè)團(tuán)隊(duì)很年輕,很有活力和創(chuàng)造力,缺少的只是一些經(jīng)驗(yàn),而我經(jīng)驗(yàn)是有一些,但是那些斗志已經(jīng)在去年一年被磨礪的差不多了,正好是我回爐好好再熱一熱的時(shí)候了。來之前就和黑羽有過接觸,也看過他對(duì)于TOP的一些構(gòu)想,在我的計(jì)劃中就有和他交流的部分,上周找了一個(gè)時(shí)間碰了一下,果然有很多和我一致的想法,同時(shí)還有一些比我更加深入的idea,特別是對(duì)于大淘寶未來的一個(gè)構(gòu)想。其實(shí)來到TOP我所要做的就是在技術(shù)的架構(gòu)上找到商業(yè)的感覺,讓商業(yè)驅(qū)動(dòng)技術(shù),技術(shù)沉淀積累來支持商業(yè)的暢想。

        這七天過的很快,全身心投入的工作,時(shí)間總是過的很快,而且過去那種沉悶的心情和處事的態(tài)度在這里得到了改變。明天基本上就看完了TOP的大部分代碼,整理了一些review的建議,同時(shí)昨天還花了一些時(shí)間去看了看google appengine,寫了幾個(gè)小應(yīng)用,看了看源碼(部分反編譯),因?yàn)橐oboss對(duì)于小應(yīng)用hosting方面的一些想法。

       總的來說還是和我原先的計(jì)劃一樣,商業(yè)上和PD運(yùn)營(yíng)交流,了解未來TOP商業(yè)發(fā)展方向,以及對(duì)技術(shù)架構(gòu)的一些需求。架構(gòu)上從代碼和文檔看起,文檔不是很多,所以就只好每個(gè)工程看過來,也不錯(cuò),看到自雪同學(xué)寫的代碼還是不錯(cuò)的,同時(shí)也看到了淘寶的基礎(chǔ)組件的推廣力度之大,這比在阿里軟件強(qiáng)的多,其實(shí)也是我一直希望看到的,人人都是技術(shù)牛人,都在做重復(fù)的事情,但是卻沒有技術(shù)沉淀,其實(shí)大家完全可以吧自己的構(gòu)想增強(qiáng)在別人的基礎(chǔ)之上,而不是什么都自己搞一套,淘寶的技術(shù)應(yīng)該來說在政策上得到了支持,技術(shù)積累效果還是不錯(cuò)的,這里還不得不提到我的淘寶同學(xué)畢玄同學(xué)的服務(wù)基礎(chǔ)框架HSF,雖然現(xiàn)在還沒有接觸,但是應(yīng)該已經(jīng)發(fā)展的挺好的。

       有兩個(gè)能夠用人,擔(dān)得起起技術(shù)團(tuán)隊(duì)發(fā)展的Boss,有這么一些年輕有沖勁的小同學(xué),有這么一些樂于傾聽分享協(xié)作的老同學(xué),有這么一些很有商業(yè)feeling的非技術(shù)團(tuán)隊(duì)同學(xué),要做好TOP,我想只有三個(gè)字:“沒問題”。這是我在入職七天寫的隨記,一年后再來回看我今天說的這些話,在來看看這個(gè)團(tuán)隊(duì)創(chuàng)造的價(jià)值。

       附:在淘寶申請(qǐng)好了花名:放翁。陸游的字,武俠小說的人就連掃地的都沒有了,歷史名人也沒有了,不過詩(shī)人倒是沒有人用,指不定還開創(chuàng)了淘寶同學(xué)入職的花名新取法。

       好好工作,天天向上,為了TOP,為了家里的BB,為了自己的一點(diǎn)理想,踏踏實(shí)實(shí)的走自己的路,讓別人開車去吧,^_^

     

    本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/cenwenchu79/archive/2009/08/12/4440248.aspx

    posted @ 2009-08-12 23:16 岑文初 閱讀(1165) | 評(píng)論 (1)編輯 收藏

       昨天是去淘寶工作的第一天,最近最頭痛的就是花名,在我兒子出生的時(shí)候我就知道起名字是最麻煩的事情,而起花名更是痛苦,因?yàn)槟愕倪x擇余地更小,同時(shí)還不能和前人重復(fù),好不容易找到兩個(gè)還不錯(cuò)的,結(jié)果一個(gè)給其他部門的老大保留了,一個(gè)因?yàn)槠匆艉鸵粋€(gè)同學(xué)相似而無法使用。想用文初,結(jié)果還給一個(gè)淘寶的活躍用戶使用了,問了HR不取花名是否可以,回答說,不可以,太折騰了。

       昨天開了一整天的會(huì),主要還是協(xié)調(diào)兩個(gè)平臺(tái)之間將來的合作模式,同時(shí)也梳理了雙方的現(xiàn)有功能,將未來雙方的邊界做了初步定奪,同時(shí)也對(duì)將來的一些需求做了初步的規(guī)劃,系統(tǒng)的模塊化也提上了最近的日程。

      今天會(huì)化一些時(shí)間看看已有的代碼熟悉一下Top的情況,同時(shí)也看看一些流程性的文檔,希望能夠盡快的對(duì)Top全方位的了解,這樣便于從細(xì)節(jié)實(shí)現(xiàn)到整體架構(gòu)設(shè)計(jì)都能給出自己的意見。

      初來乍到不容易,很多需要從新開始的,不過對(duì)我來說合作的人,做的事情還是有一定的基礎(chǔ),因此只是需要一周左右的過渡期,后續(xù)應(yīng)該會(huì)走的更加順暢。

     

     
    posted @ 2009-08-06 05:12 岑文初 閱讀(1028) | 評(píng)論 (0)編輯 收藏

         摘要: Author : 岑文初 Email: wenchu.cenwc@alibaba-inc.com Blog: http://blog.csdn.net/cenwenchu79 Date: 2009-5-26 目錄 需求轉(zhuǎn)而學(xué)習(xí) “軟”負(fù)載均衡 LVS (Linux Virtual Server) Virtual Server三種模式介紹 Virtual...  閱讀全文
    posted @ 2009-08-04 22:32 岑文初 閱讀(2277) | 評(píng)論 (1)編輯 收藏

         摘要: “軟”負(fù)載均衡學(xué)習(xí)點(diǎn)滴  閱讀全文
    posted @ 2009-08-04 22:30 岑文初 閱讀(2088) | 評(píng)論 (0)編輯 收藏

    Author : 岑文初

    Email: wenchu.cenwc@alibaba-inc.com

    Blog: http://blog.csdn.net/cenwenchu79

    Date: 2009-5-26

    目錄

    需求轉(zhuǎn)而學(xué)習(xí)

    “軟”負(fù)載均衡

    LVS Linux Virtual Server

    Virtual Server三種模式介紹

    Virtual Server三種模式的比較

    Virtual Server三種模式實(shí)踐

    三種模式下的簡(jiǎn)單壓力測(cè)試

    HA-Proxy

    HA-Proxy安裝和使用

    HA-Proxy的壓力測(cè)試結(jié)果

    負(fù)載學(xué)習(xí)心得

    需求轉(zhuǎn)而學(xué)習(xí)

             很多時(shí)候不少做開發(fā)的同學(xué)都認(rèn)為技術(shù)更新的快,新技術(shù)、新概念層出不窮,大家樂此不疲的去跟隨著所謂的“技術(shù)趨勢(shì)”走在風(fēng)頭浪尖上,但其實(shí)往往忘記了一個(gè)最重要的問題“滿足客戶需求”。其實(shí)技術(shù)就是為滿足需求服務(wù)的,用最小的代價(jià)來滿足用戶的需求,以最簡(jiǎn)單高效的方式來達(dá)到目標(biāo),就是每個(gè)開發(fā)者應(yīng)該追求的。(不要因?yàn)樽约旱募軜?gòu)很簡(jiǎn)單就臉紅拿不出手,只要你在滿足用戶當(dāng)前需求的基礎(chǔ)上對(duì)未來有所考慮,那么化繁為簡(jiǎn)就是一種能力的表現(xiàn))

             SIP(服務(wù)集成平臺(tái))5.7版本中對(duì)于未來多個(gè)服務(wù)提供商,多種類型的服務(wù),在每日幾億的調(diào)用壓力下,需要找到一個(gè)解決方案:可以分流不同服務(wù)提供商的服務(wù),分流不同類型的服務(wù),服務(wù)隔離化來減少服務(wù)相互之間影響以及服務(wù)提供商之間的影響。

             當(dāng)前SIP的前端是通過硬件F5作負(fù)載均衡,因此是無狀態(tài)無差別的服務(wù)負(fù)載,這也使得無法區(qū)分不同的服務(wù)提供商的服務(wù)請(qǐng)求和不同類型的服務(wù)請(qǐng)求,導(dǎo)致服務(wù)提供商之間的服務(wù)會(huì)產(chǎn)生相互影響(旺旺即時(shí)通信類API在峰值占用了大部分的服務(wù)處理資源,淘寶寶貝上傳類API占用了大量的帶寬)。近期還有更大的兩類API將會(huì)接入,因此尋找一個(gè)服務(wù)可分流的方案勢(shì)在必行。(當(dāng)然過去也考慮通過三級(jí)域名配置在負(fù)載均衡上來解決這些問題,但是這樣首先對(duì)于開發(fā)者來說不透明,其次也是一種比較僵化的設(shè)計(jì)方案,擴(kuò)展和維護(hù)也有一定的難度)

             在過去也嘗試過ApacheWeb容器自己的一些load balance特性,當(dāng)然效果不是很好,和硬件基本無法比擬,而一些專有的“軟”負(fù)載均衡方案和開源項(xiàng)目也沒有深入的去了解,因此借著這次機(jī)會(huì),好好深入的挖一挖“軟”負(fù)載均衡。

    “軟”負(fù)載均衡

             作為互聯(lián)網(wǎng)應(yīng)用,隨時(shí)都需要做好用戶量突然增大,訪問量突然上升的準(zhǔn)備。今年熱門的詞匯“云”我就不多說了,這里就簡(jiǎn)單說說服務(wù)器的橫向擴(kuò)展。其實(shí)和DB,文件系統(tǒng)等一樣,當(dāng)資源成為瓶頸的時(shí)候,就需要考慮如何通過擴(kuò)展或者提升資源能力來滿足用戶的需求,這就是我們常說的橫向擴(kuò)展和縱向擴(kuò)展。(對(duì)于橫向擴(kuò)展和縱向擴(kuò)展的優(yōu)劣大家應(yīng)該都很清楚了,這里也不做贅述)橫向擴(kuò)展中就會(huì)要求使用負(fù)載均衡的能力,如何根據(jù)資源能力不同以及資源在運(yùn)行期負(fù)荷動(dòng)態(tài)變化將負(fù)載合理分配是判斷負(fù)載均衡優(yōu)劣的標(biāo)準(zhǔn)。

             軟件負(fù)載均衡一般通過兩種方式來實(shí)現(xiàn):基于操作系統(tǒng)的軟負(fù)載實(shí)現(xiàn)和基于第三方應(yīng)用的軟負(fù)載實(shí)現(xiàn)。LVS就是基于Linux操作系統(tǒng)實(shí)現(xiàn)的一種軟負(fù)載,HA Proxy就是基于第三應(yīng)用實(shí)現(xiàn)的軟負(fù)載。(后面會(huì)詳細(xì)介紹這兩種方式的使用)

             最早期也是最原始的軟負(fù)載均衡:“Round Robin DNS”,通過輪詢方式在DNS綁定多個(gè)IP的情況下,將用戶對(duì)于同一個(gè)域名的請(qǐng)求分配到后端不同的服務(wù)節(jié)點(diǎn)。這種方案的優(yōu)點(diǎn):配置簡(jiǎn)單,負(fù)載分配效率高。缺點(diǎn):無法知曉后端服務(wù)節(jié)點(diǎn)服務(wù)情況(是否已經(jīng)停止服務(wù)),無法保證在一個(gè)Session中多次請(qǐng)求由一個(gè)服務(wù)節(jié)點(diǎn)服務(wù),每一個(gè)節(jié)點(diǎn)都要求有一個(gè)外網(wǎng)IP

             另一種較為常見的就是基于分發(fā)器的Load balance。服務(wù)使用者通過向分發(fā)器發(fā)起請(qǐng)求獲得服務(wù),分發(fā)器將請(qǐng)求分發(fā)給后端實(shí)際服務(wù)處理的節(jié)點(diǎn),給客戶提供服務(wù),最常說的反向代理模式就是典型的分發(fā)器Load Balance。這類負(fù)載均衡處理可以基于應(yīng)用級(jí)轉(zhuǎn)發(fā),也可以基于IP級(jí)別轉(zhuǎn)發(fā),當(dāng)然基于應(yīng)用轉(zhuǎn)發(fā)效率和損耗比較大,同時(shí)分發(fā)器本身也會(huì)成為瓶頸。

    LVS Linux Virtual Server

             LVS是在Linux操作系統(tǒng)基礎(chǔ)上建立虛擬服務(wù)器,實(shí)現(xiàn)服務(wù)節(jié)點(diǎn)之間的負(fù)載均衡。LVS主要是處理OSI模型中的4層消息包,根據(jù)一定的規(guī)則將請(qǐng)求直接轉(zhuǎn)發(fā)到后端的服務(wù)處理節(jié)點(diǎn),有較高轉(zhuǎn)發(fā)效率。

             Virtual ServerLoad Balancer和一組服務(wù)器的邏輯組合統(tǒng)稱,使用服務(wù)者只需要與Virtual Server進(jìn)行交互就可以獲得高效的服務(wù)。真實(shí)服務(wù)器和Load Balancer通過高速LAN進(jìn)行交互。Load Balancer能夠?qū)⒄?qǐng)求分發(fā)到不同的服務(wù)端,在一個(gè)虛擬IP下并行處理多個(gè)請(qǐng)求。

    Virtual Server三種模式介紹

    Virtual Server有三種基于IP級(jí)別的負(fù)載均衡實(shí)現(xiàn)方式:IP address translationNAT)、Direct routingIP Tunneling

             NAT(Network address translation)由于IPV4的某些缺陷和安全原因,某些網(wǎng)段例如(10.0.0.0/255.0.0.0, 172.16.0.0/255.240.0.0 and 192.168.0.0/255.255.0.0)不能被用于互聯(lián)網(wǎng),因此常常被用作內(nèi)部局域網(wǎng),通過網(wǎng)絡(luò)地址翻譯的方式可以讓這些網(wǎng)段的服務(wù)器訪問互聯(lián)網(wǎng)或者被互聯(lián)網(wǎng)訪問。網(wǎng)絡(luò)地址翻譯主要作用就是將一組ip地址映射到其他的一組ip地址,當(dāng)映射比例為1:1的時(shí)候通常稱作靜態(tài)映射,而當(dāng)映射地址為M:N(M>N)的時(shí)候(M為被映射地址數(shù)量,通常是內(nèi)部ip),則成為動(dòng)態(tài)映射。而對(duì)于Virtual ServerNAT模式來說,就是利用了NAT的特性,將內(nèi)部的一組服務(wù)器通過映射到一個(gè)虛擬的IP,然后以一個(gè)外網(wǎng)虛擬服務(wù)節(jié)點(diǎn)的身份對(duì)外提供服務(wù)。

             上圖是一個(gè)實(shí)際的NAT范例,對(duì)外的服務(wù)IP202.103.106.5,內(nèi)部建立了虛擬IP172.16.0.1,然后將內(nèi)部其他兩臺(tái)實(shí)際服務(wù)的服務(wù)器172.16.0.2172.16.0.3映射到172.16.0.1這個(gè)虛擬IP。客戶端向202.103.106.5發(fā)起請(qǐng)求服務(wù),Load Balancer查看請(qǐng)求數(shù)據(jù)包,如果是請(qǐng)求目標(biāo)地址是注冊(cè)的虛擬IP及監(jiān)聽端口的時(shí)候,那么通過NAT按照一定算法選擇某一臺(tái)實(shí)體服務(wù)器,再重寫報(bào)文目標(biāo)地址,轉(zhuǎn)發(fā)請(qǐng)求到實(shí)際的目標(biāo)服務(wù)器,當(dāng)目標(biāo)服務(wù)器處理完畢以后,將處理結(jié)果返回給Load Balancer,由Load Balancer修改源地址,返回給客戶端。

             IP TunnelingIP管道技術(shù)是在IP報(bào)文上再次封裝IP報(bào)文協(xié)議的一種技術(shù)。允許將一個(gè)目標(biāo)為AIP數(shù)據(jù)報(bào)文封裝成為目標(biāo)為BIP數(shù)據(jù)報(bào)文,在特定的IP 管道中傳輸。

             上圖就是IP Tunneling模式的運(yùn)作原理。首先客戶端還是通過訪問對(duì)外的一個(gè)服務(wù)IP請(qǐng)求服務(wù),當(dāng)Load Balancer接受到請(qǐng)求以后,檢查VIP注冊(cè)信息,然后根據(jù)算法選擇實(shí)際的一臺(tái)后臺(tái)服務(wù)器,通過IP管道封裝技術(shù)對(duì)IP報(bào)文再次封裝,然后將消息通過IP管道轉(zhuǎn)發(fā)到實(shí)際的服務(wù)器,實(shí)際的服務(wù)器通過解包處理請(qǐng)求,然后根據(jù)包體內(nèi)實(shí)際的服務(wù)請(qǐng)求地址,將處理結(jié)果直接返回給客戶端。

             Direct routing利用Load Balancer和實(shí)際服務(wù)器共享同一VIP,簡(jiǎn)單的通過修改消息報(bào)體目標(biāo)MAC地址,轉(zhuǎn)發(fā)請(qǐng)求,然后再通過實(shí)際服務(wù)器配置VIP為本地回環(huán),直接處理消息報(bào)文,而不再轉(zhuǎn)發(fā),當(dāng)處理完以后,直接將處理結(jié)果返回給客戶端。

     

             上圖就是Direct Routing的運(yùn)作流程,當(dāng)外部請(qǐng)求到Load Balancer時(shí),通過查找VIP注冊(cè)信息,直接選擇一臺(tái)后端服務(wù)器作為新的目標(biāo)地址,修改消息報(bào)文中的目標(biāo)地址Mac地址,轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器,目標(biāo)服務(wù)器由于配置VIP在本地網(wǎng)卡回路中,因此直接處理消息,將處理完的結(jié)果直接返回給客戶端。

    Virtual Server三種模式的比較

             下表是官方整理出的關(guān)于Virtual Server三種不同模式的區(qū)別:

    NAT

    TUNNEL

    DR

    服務(wù)器要求

    無要求

    需要支持IP管道

    arp組件(當(dāng)前也有補(bǔ)丁)

    網(wǎng)絡(luò)要求

    Private

    LAN/WAN

    LAN

    可支持后端服務(wù)器節(jié)點(diǎn)數(shù)

    較少(10-20

    較多

    較多

    服務(wù)網(wǎng)關(guān)

    Load Balancer

    本身

    本身

    NAT:根據(jù)其實(shí)現(xiàn)原理,可以知道這種模式對(duì)于操作系統(tǒng),網(wǎng)絡(luò)都沒有太多的要求和約束,但是由于消息需要打解包,同時(shí)消息的響應(yīng)都必須經(jīng)過Load Balancer,因此Load Balancer自身成為了瓶頸,這樣一個(gè)Load Balancer能夠支持的后端服務(wù)節(jié)點(diǎn)數(shù)量就有限了。當(dāng)然可以采用混合模式來解決這個(gè)問題,也就是通過TUNNEL或者DR模式作為前端模式串聯(lián)起多個(gè)NAT模式Balancer

    TUNNEL:這種模式要求操作系統(tǒng)支持IP Tunnel,通過對(duì)IP報(bào)文再次封裝轉(zhuǎn)發(fā),達(dá)到負(fù)載均衡的目的。設(shè)計(jì)這種模式的初衷是考慮,對(duì)于互聯(lián)網(wǎng)很多服務(wù)來說,服務(wù)請(qǐng)求數(shù)據(jù)量和返回?cái)?shù)據(jù)量是不對(duì)稱的,返回的數(shù)據(jù)往往要遠(yuǎn)遠(yuǎn)大于請(qǐng)求的數(shù)據(jù)量,因此如果請(qǐng)求和返回都走Load Balancer會(huì)大量占用帶寬,影響處理能力。IP Tunnel設(shè)計(jì)中請(qǐng)求是通過Load Balancer,但是返回是直接返回到客戶端的,因此節(jié)省了返回的帶寬,提高了請(qǐng)求處理的能力。

    DR:這種模式要求Load Balancer和后端服務(wù)器處于同一個(gè)局域網(wǎng)段。DR模式處理消耗最小,消息轉(zhuǎn)發(fā)和回復(fù)基本沒有損耗,因此效率應(yīng)該是最高的,但是約束是相對(duì)來說最多的。

    posted @ 2009-08-04 22:24 岑文初 閱讀(3387) | 評(píng)論 (2)編輯 收藏

        小A,30,所在公司在去年的經(jīng)濟(jì)危機(jī)中沒有倒下,但是在今年卻倒下了。小A覺得能夠把一個(gè)公司混倒閉了,也算是人生的一點(diǎn)經(jīng)歷。

        公司是沒了,但是工作還要繼續(xù),生活還要繼續(xù),現(xiàn)在將要面對(duì)一個(gè)新的環(huán)境,環(huán)境很陌生,但也比較熟悉,工作職責(zé)很清晰,但也充滿了挑戰(zhàn)。人過30,有了孩子,真的成熟了很多,知道了什么叫做責(zé)任感,知道了未來真的需要好好規(guī)劃,需要一個(gè)機(jī)會(huì),需要一個(gè)平臺(tái)來找到自己,實(shí)現(xiàn)自己的價(jià)值,不讓這黃金時(shí)代就這么過去。

       小A將要面對(duì)的挑戰(zhàn)在心里面已經(jīng)做好了準(zhǔn)備,也有了自己的一套短期的規(guī)劃及工作安排,要成長(zhǎng)有時(shí)候就要有壓力。在小A即將離開原來團(tuán)隊(duì)的時(shí)候,和手下的一個(gè)同學(xué)發(fā)了火,因?yàn)樵谶@陣子調(diào)整過程中,同學(xué)的心態(tài)一直變的很差,但是小A已經(jīng)竭盡全力去分析他的未來,雖然聽進(jìn)去,但是過幾天依然又開始放棄自己,這種態(tài)度讓小A原本很看好他發(fā)展的心情變得很沉重,最后就在那個(gè)探討會(huì)上說了他一些比較重的話,雖然說完以后自己也有些后悔,可能我對(duì)他和對(duì)我自己一樣,要求太高了吧,就像博士說的,如果對(duì)一個(gè)人沒有想法了,就恭維幾句即可,大家你好我好大家好,只有當(dāng)對(duì)這個(gè)人還存在一定的期望的時(shí)候才會(huì)表現(xiàn)出這種比較急切的感覺。

       新的開始,新的挑戰(zhàn),新的環(huán)境,新的機(jī)遇,新的難題,新的稱呼

       好的心態(tài),好的溝通,好的未來

       一切都需要小A用自己的能力去證明,走自己的路,讓自己走的更好。

    posted @ 2009-08-03 09:58 岑文初 閱讀(878) | 評(píng)論 (0)編輯 收藏

        轉(zhuǎn)眼到了7月份了,今年的blog更新的很慢很慢。寫點(diǎn)東西記錄自己的生活和工作狀態(tài)。
       生活:
       兒子提早10天在六月八號(hào)來到我們這個(gè)小家庭,每個(gè)好友在祝福我的同時(shí)告訴我,辛苦的日子剛剛開始。不過和大家的感覺一樣,辛苦但快樂著,在別人忙著在互聯(lián)網(wǎng)上種花種草,養(yǎng)豬養(yǎng)雞的時(shí)候,我開始扛起培養(yǎng)祖國(guó)新一代的責(zé)任。睡覺基本上很難保證連續(xù)性,早晨的運(yùn)動(dòng)也移到了晚上給兒子洗好澡以后。以前覺得就算到30歲還是覺得自己比較年輕,但是在那個(gè)23:25分兒子出來的一瞬間,自己覺得自己真的老了,需要成熟一點(diǎn)了,對(duì)兒子,對(duì)老婆。

        工作:
        其實(shí)今年年初的時(shí)候就有些彷徨,自己一手培養(yǎng)出來的SIP和原來的目標(biāo)漸行漸遠(yuǎn),7月份我在產(chǎn)品會(huì)議上提出了SIP6(第一階段最終版),功能,性能,可擴(kuò)展性都能夠滿足到明年中旬。雖然日訪問量就快突破1億,年底可能會(huì)到幾個(gè)億,但是這些數(shù)字對(duì)我來說只能證明這個(gè)架構(gòu)還可以,但是SIP原有的目標(biāo)已經(jīng)被拋棄,成為了一個(gè)內(nèi)部的服務(wù)集成平臺(tái)。
       下個(gè)階段會(huì)在做一些中心來滿足團(tuán)隊(duì)的需要,但在我看來其實(shí)這些東西對(duì)我對(duì)團(tuán)隊(duì)的價(jià)值有限,創(chuàng)新有限,但這就是工作。
        公司內(nèi)部有些變化,當(dāng)然是好是壞不得而知,不過作為我們這些level已經(jīng)處于地面的人來說也沒啥影響。

       文章:
       最近的文章素材其實(shí)不少,但是受到內(nèi)部技術(shù)專利申請(qǐng),外部投稿的影響,能夠?qū)懗鰜碇苯淤N的越來越少,有時(shí)候也是這樣,分享固然好,但是有些時(shí)候有些東西只能夠小范圍分享。

       睡覺,睡覺,中午的休息是很寶貴的,一覺醒來還繼續(xù)自己的路。(走自己的路,讓自己無路可走。沒寫錯(cuò),呵呵,覺得這樣挺搞笑的)
    posted @ 2009-07-09 12:38 岑文初 閱讀(749) | 評(píng)論 (0)編輯 收藏

     

             這篇blog的問題不能算是解決,僅僅只是一種分析和猜測(cè),后續(xù)的一些行動(dòng)可能會(huì)證明一些猜想,也可能什么都解決不了。如果有和我相同情況的同學(xué),也知道是什么問題造成的,請(qǐng)不吝賜教。

    問題:

    上周周末,沒有和同事們出去Outing,在家管孩子,去生產(chǎn)環(huán)境觀察了一下集群機(jī)器的當(dāng)前運(yùn)行狀態(tài),發(fā)現(xiàn)應(yīng)用在這些多核機(jī)器上壓力極端不均勻。

             Top一下大致狀態(tài)如下:



             峰值的時(shí)候,單CPU的使用率都到了80%,這種情況對(duì)于多核服務(wù)器來說是很不正常的使用。對(duì)于Java的開發(fā)者來說,多線程編程是無法控制線程如何在CPU上分配的,因?yàn)?/span>Java本身不實(shí)現(xiàn)線程機(jī)制,說是跨平臺(tái)的語言,但是性能及特性會(huì)根據(jù)操作系統(tǒng)的實(shí)現(xiàn)有很大的差異,因此Java調(diào)優(yōu)有時(shí)候需要對(duì)系統(tǒng)配置甚至內(nèi)核作調(diào)優(yōu)。

    分析:

             首先在測(cè)試環(huán)境下作了多次同樣的壓力測(cè)試,嘗試了與線上一樣的操作系統(tǒng)版本,相似的配置,但測(cè)試結(jié)果卻是負(fù)載分配很均勻。

       
         

             此時(shí)重新啟動(dòng)了一臺(tái)問題機(jī)器,發(fā)現(xiàn)負(fù)載降下來了,同時(shí)也很均衡,也就是說在當(dāng)前的壓力下不應(yīng)該有這樣高的cpu消耗,同時(shí)也排除了硬件或者操作系統(tǒng)的一些配置問題。

             CPU滿負(fù)荷的情況下,很多時(shí)候會(huì)認(rèn)為應(yīng)該是循環(huán)造成的,對(duì)于單個(gè)CPU的消耗更是。通過Top H查看具體到底哪一個(gè)線程會(huì)長(zhǎng)時(shí)間消耗CPU

             可以看到PID13659的線程是“罪魁禍?zhǔn)?#8221;,但13659究竟在干什么,是應(yīng)用的線程還是系統(tǒng)的線程,是否是陷入了死循環(huán),不得而知。接著就按照Java的土辦法,Kill -3 pid,然后看看輸出日志。

             根據(jù)線程號(hào)來查找dump出來的日志中nid,發(fā)現(xiàn)這個(gè)線程是VM Thread,也就是虛擬機(jī)線程。(這里作一下轉(zhuǎn)換,將13659轉(zhuǎn)換成為16進(jìn)制就是0x355b



             pstack看了一下這個(gè)線程的工作,結(jié)果如下:

    Thread 2074 (Thread 1846541216 (LWP 13659)):

    #0 0x0659fa65 in ObjectSynchronizer::deflate_idle_monitors ()

    #1 0x065606e5 in SafepointSynchronize::begin ()

    #2 0x06613e83 in VMThread::loop ()

    #3 0x06613a6f in VMThread::run ()

    #4 0x06506709 in java_start ()

    #5 0x00aae3cc in start_thread () from /lib/tls/libpthread.so.0

    #6 0x00a1896e in clone () from /lib/tls/libc.so.6

             搜索了一下ObjectSynchronizer::deflate_idle_monitors,發(fā)現(xiàn)了sunbug庫(kù)中有bug關(guān)于jdk1.6中由于這個(gè)方法導(dǎo)致運(yùn)行期問題的說法:http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=803cb2d95886bffffffff9a626d3b9b28573?bug_id=6781744

             然后就直接去openjdk官方網(wǎng)站去查找這個(gè)類的代碼,大致了解一下他的作用,具體的代碼鏈接如下:http://xref.jsecurity.net/openjdk-6/langtools/db/d8b/synchronizer_8cpp-source.html
    主要工作應(yīng)該是對(duì)資源對(duì)象的回收,在加上pstack的結(jié)果,應(yīng)該大致知道是對(duì)線程資源的管理。但具體代碼就沒有進(jìn)一步分析了。

    接著就分析一下自己的應(yīng)用:

             壓力測(cè)試(高強(qiáng)度、長(zhǎng)時(shí)間)都做過,沒有發(fā)現(xiàn)什么異常。

             本身應(yīng)用是否會(huì)存在的缺陷導(dǎo)致問題呢。有人說VM Thread兼顧著GC的工作,因此內(nèi)存泄露,對(duì)象長(zhǎng)期積壓過多也可能影響,但其實(shí)在dump的結(jié)果可以看到,GC有單獨(dú)的工作線程,同時(shí)我也觀察到GC這些線程的工作時(shí)間長(zhǎng)度,因此由于GC繁忙導(dǎo)致CPU上去,基本上來說可以排除。

             其次在SIP項(xiàng)目中使用了JDK的線程池(ExecutorService)LinkedBlockingQueue。后者以前的文章里面提到在1.5版本里使用poll方法會(huì)有內(nèi)存泄露,到1.6雖然沒有內(nèi)存泄露,但是臨時(shí)鎖對(duì)象增長(zhǎng)的很快,會(huì)導(dǎo)致GC的頻度增加。

    行動(dòng):

             上面零零散散的一些分析,最終讓我決定有如下的行動(dòng):

    1.       升級(jí)某一臺(tái)服務(wù)器的JDK,當(dāng)前是1.6.0_10-b33,打算升級(jí)到1.614版本。比較觀察多臺(tái)機(jī)器的表現(xiàn),看是否升級(jí)了JDK可以解決問題。

    2.       去除LinkedBlockingQueue作為消息隊(duì)列,直接由生產(chǎn)者將生產(chǎn)結(jié)果按照算法分配給消費(fèi)者線程,避免競(jìng)爭(zhēng),鎖的消耗,同時(shí)也防止LinkedBlockingQueue帶來的資源消耗。

    3.       測(cè)試環(huán)境繼續(xù)作長(zhǎng)時(shí)間的壓力測(cè)試,同時(shí)可以結(jié)合Jprofile之類的工具來分析長(zhǎng)時(shí)間后可能出現(xiàn)的問題。

    后話:

             這年頭真的啥都要學(xué)一點(diǎn),求人不如求己。

    SA,DBA,測(cè)試都需要能夠去學(xué)習(xí)一些,起碼在初期排查問題上自己能夠做點(diǎn)啥,要不然別人也忙,自己又無從下手。就好比這次壓力測(cè)試好不容易排上隊(duì),但是還是滿足不了及時(shí)上線的需求,因此自己去LoadRunner壓,好歹給出一個(gè)零時(shí)的報(bào)告先大家看著。應(yīng)用的異常有時(shí)候是應(yīng)用本身設(shè)計(jì)問題,也可能是開發(fā)語言的問題,也可能是操作系統(tǒng)的問題,因此要去定位這種比較復(fù)雜的問題,真的需要有耐心去好好的學(xué)習(xí)各種知識(shí),現(xiàn)在看來知識(shí)還是匱乏啊,要不然就可以分析出openjdk中可能存在的問題。

    posted @ 2009-07-09 11:59 岑文初 閱讀(4421) | 評(píng)論 (3)編輯 收藏

     

             昨天在看Cache Client代碼的時(shí)候,發(fā)現(xiàn)在從資源池中獲取SocketIO部分代碼在高并發(fā)情況下效率不高,因此考慮通過一些變通的方式來提高效率,下面說的內(nèi)容僅僅是當(dāng)前自己琢磨出來可以部分提高效率的方法,希望看了這篇文章的同學(xué)能夠有更好的方式或者算法來提高效率。

    情景:

           Cache Client SocketIO資源池是一個(gè)兩級(jí)的Map,具體定義為:ConcurrentMap<String, ConcurrentMap<SockIO, Integer>>。第一級(jí)MapHost作為Key,第二級(jí)MapSockIO本身作為Key,三種SockIO狀態(tài)(可用,占用,廢棄)作為value。之所以采用一個(gè)Pool來存儲(chǔ)三種狀態(tài)主要是考慮到在高并發(fā)下,多個(gè)池之間保持原子性的復(fù)雜。

    每一次獲取可用的SocketIO的操作需要經(jīng)歷:1.遍歷Host所在的Map2.逐個(gè)比較狀態(tài)。3.原子方法獲取可用SocketIO。(并發(fā)問題所要求的,具體代碼可以下載:http://memcache-client-forjava.googlecode.com/files/alisoft-xplatform-asf-cache-2.5.1-src.jar )。

    在修改過去的版本里面,首先遍歷的過程是一個(gè)固定順序的過程(keyset),這樣會(huì)導(dǎo)致在高并發(fā)的情況下,越來越多的資源申請(qǐng)命中率會(huì)下降,因?yàn)閴毫偸锹湓?/span>keyset靠前的那些SockIO上(重復(fù)比較)。需要考慮通過什么手段可以提高在高并發(fā)下的申請(qǐng)命中率。

    思考:

    1. 資源申請(qǐng)的越早,被釋放的可能性越高,因此是否可以考慮采用更新SockIO最后申請(qǐng)時(shí)間來作為后續(xù)申請(qǐng)的初步依據(jù)。(本身復(fù)雜度帶來的耗時(shí)可能會(huì)超過命中率降低帶來的損耗)

    2. 采用隨機(jī)數(shù)的方式來確定keyset的起始游標(biāo),也就不是每次都從keyset第一位開始(可以把keyset看作一個(gè)首尾相接的數(shù)組)。

    3. 在每次資源回收的時(shí)候紀(jì)錄下該資源為可用(當(dāng)前為每一個(gè)Host就記錄一個(gè)可能可用的資源,簡(jiǎn)單化操作),作為申請(qǐng)的首選嘗試。(嘗試不成功在去遍歷)。

    當(dāng)前實(shí)現(xiàn)了2,3組合,發(fā)現(xiàn)效果明顯,在500個(gè)并發(fā)下,每個(gè)線程200次操作(一系列動(dòng)作),壓力測(cè)試結(jié)果如下:

    Cache test consume(cache測(cè)試總共耗時(shí))average boundle consume(每個(gè)線程總耗時(shí)),average per request(每個(gè)線程每次操作總耗時(shí))

    沒有作任何改動(dòng)以前的測(cè)試結(jié)果:

    cache test consume: 11507741, average boundle consume: 57538, average per request :115

    采用了2策略以后的測(cè)試結(jié)果:

    cache test consume: 10270512, average boundle consume: 51352, average per request :102

    采用了23策略以后的測(cè)試結(jié)果:

    cache test consume: 9140660, average boundle consume: 45703, average per request :91

    posted @ 2009-05-07 17:15 岑文初 閱讀(1959) | 評(píng)論 (0)編輯 收藏

     

           服務(wù)集成平臺(tái)5.6的性能測(cè)試進(jìn)入尾聲,這期的優(yōu)化也算告一段落。這次主要的優(yōu)化工作還是在三個(gè)方面:應(yīng)用服務(wù)器(Apache,JBoss)配置,業(yè)務(wù)流程,Cache Client包(http://code.google.com/p/memcache-client-forjava/ )。這里把過去和這次優(yōu)化對(duì)于Cache的使用作一個(gè)經(jīng)驗(yàn)分享,希望大家能夠用好Cache,提速你的應(yīng)用。

           這里還是通過一些點(diǎn)滴的啟示來介紹優(yōu)化的一些心得,很多時(shí)候還是要根據(jù)具體情況來判斷如何去具體實(shí)施,因此這里所說的僅僅是在一些場(chǎng)景下適用,并非放之四海皆準(zhǔn)的教條。同時(shí)也希望看此文的各位同學(xué),如果有更好的思路可以給我反饋,技術(shù)在交流中才會(huì)有發(fā)展。

    積少成多,集腋成裘

           性能提不上去,多半是在一些容易成為瓶頸的“暗點(diǎn)”(IO,帶寬,連接數(shù),資源競(jìng)爭(zhēng)等等)。Memcached Cache現(xiàn)在已經(jīng)被大家廣泛使用,但是千萬不要認(rèn)為對(duì)Cache的操作是低損耗的,要知道這類集中式Cache對(duì)Socket連接數(shù)(會(huì)牽涉到linux操作系統(tǒng)文件句柄可用數(shù)),帶寬,網(wǎng)絡(luò)IO都是有要求的,有要求就意味著會(huì)有損失,因此積少成多,集腋成裘。服務(wù)集成平臺(tái)是一個(gè)高速的服務(wù)路由器,其大部分的業(yè)務(wù)數(shù)據(jù),訪問控制策略,安全策略以及對(duì)應(yīng)的一些控制閥值被緩存在Cache服務(wù)端,因此對(duì)于Cache的依賴性很強(qiáng)。每一次對(duì)于客戶端的性能提升,總會(huì)給服務(wù)集成平臺(tái)性能帶來不小的影響,但是每一次優(yōu)化速度后,客戶端可以優(yōu)化的空間越來越小,這時(shí)候需要一些策略來配合,提升應(yīng)用整體性能。當(dāng)前主要采用了以下幾點(diǎn)策略:

    1.  從數(shù)據(jù)獲取角度來做優(yōu)化,采用本地?cái)?shù)據(jù)緩存。(因?yàn)榇蠹业膽?yīng)用需要能夠線形擴(kuò)展,支持集群,所以才不使用應(yīng)用服務(wù)器本地緩存,但是在某些緩存數(shù)據(jù)時(shí)間性不敏感或者修改幾率較小的情況下,可以采用本地緩存結(jié)合集中式緩存,減少對(duì)遠(yuǎn)端服務(wù)器訪問次數(shù),提升應(yīng)用性能)。

    Cache ClientIMemcachedCache 接口中的public Object get(String key,int localTTL)方法就是本地?cái)?shù)據(jù)緩存結(jié)合遠(yuǎn)程Cache獲取數(shù)據(jù)的接口。具體流程參看下圖:

     

     

    2.  從數(shù)據(jù)更新角度,采用異步數(shù)據(jù)更新。(即不等待數(shù)據(jù)更新結(jié)果,直接進(jìn)行其他業(yè)務(wù)流程)。這類操作使用場(chǎng)景比較局限,首先數(shù)據(jù)不會(huì)用作判斷(特別是高并發(fā)系統(tǒng)中的閥值),其次不需要返回結(jié)果作為后續(xù)流程處理輸入(例如計(jì)數(shù)器),時(shí)時(shí)性要求比較低。(這類操作其實(shí)是采用了集群數(shù)據(jù)傳播的一種策略,原先對(duì)于集群中所有節(jié)點(diǎn)都想即時(shí)傳播到,但是這樣對(duì)于性能損失很大,因此采用key對(duì)應(yīng)的主Node采用即時(shí)設(shè)置數(shù)據(jù),其他的通過后臺(tái)任務(wù)數(shù)據(jù)傳播來實(shí)現(xiàn),由于key對(duì)應(yīng)的主Node是數(shù)據(jù)第一操作和讀取節(jié)點(diǎn),因此這類數(shù)據(jù)傳播操作時(shí)時(shí)性要求較低,適合這樣處理)。具體接口參見Cache Client 使用文檔。

    3.  一次獲取,多次使用。這點(diǎn)和系統(tǒng)設(shè)計(jì)有關(guān),當(dāng)前服務(wù)集成平臺(tái)的安全流程是鏈狀的,一次請(qǐng)求會(huì)經(jīng)歷很多安全攔截器,而在每一個(gè)安全攔截器中會(huì)根據(jù)情況獲取具體的業(yè)務(wù)數(shù)據(jù)或者流程控制策略等緩存數(shù)據(jù),每一個(gè)安全攔截器都是彼此獨(dú)立的,在很早以前是每一個(gè)安全攔截器各自在需要數(shù)據(jù)的時(shí)候去遠(yuǎn)程獲取,但是壓力測(cè)試下來發(fā)現(xiàn)請(qǐng)求次數(shù)相當(dāng)多,而且好些重復(fù)獲取,因此將這些業(yè)務(wù)數(shù)據(jù)作為上下文在鏈?zhǔn)綑z查中傳遞,按需獲取和設(shè)置,最大程度上復(fù)用了數(shù)據(jù)。(其實(shí)也是一種減少數(shù)據(jù)獲取的方式)。

    4.  規(guī)劃好你的Cache區(qū)。有些同學(xué)在使用Cache的時(shí)候問我是否有什么需要注意的,我覺得在使用Cache之前,針對(duì)需要緩存的數(shù)據(jù)需要做好規(guī)劃。那些數(shù)據(jù)需要放在一個(gè)Cache虛擬節(jié)點(diǎn)上,那些數(shù)據(jù)必須分開放。一方面是根據(jù)自己業(yè)務(wù)系統(tǒng)的數(shù)據(jù)耦合程度(未來系統(tǒng)是否需要合并或者拆分),另一方面根據(jù)數(shù)據(jù)量及讀寫頻繁度來合理分配(畢竟網(wǎng)絡(luò)IO還是稀缺資源)。當(dāng)然有時(shí)候業(yè)務(wù)系統(tǒng)設(shè)計(jì)者自己也不知道未來的發(fā)展,那么最簡(jiǎn)單的方式給Key加上前綴,當(dāng)前可以合并,未來也可以拆分。同時(shí)數(shù)據(jù)粒度也需要考慮,粒度設(shè)計(jì)太小,那么交互頻繁度就會(huì)很高,如果粒度太大,那么網(wǎng)絡(luò)流量就會(huì)很大,同時(shí)將來業(yè)務(wù)模塊拆分就會(huì)有問題。

     

     

    巧用Memcached Cache特有接口

           Memcached Cache提供了計(jì)數(shù)器一整套接口和addreplace兩個(gè)接口。這些特有接口可以很好的滿足一些應(yīng)用的高并發(fā)性處理需求。例如對(duì)于資源訪問次數(shù)控制,采用Cache的計(jì)數(shù)器接口就可以實(shí)現(xiàn)在集群中的數(shù)量控制,原本通過Cachegetput是無法解決并發(fā)問題的(就算是本地緩存一樣),這就是一組原子操作的接口。而AddReplace可以滿足無需通過get方法獲取內(nèi)容,就可以對(duì)于key是否存在的不同情況作出相應(yīng)處理,也是一種原子性操作。這些原子操作接口對(duì)于高并發(fā)系統(tǒng)在集群中的設(shè)計(jì)會(huì)很有幫助。

     

    Cache Client Cluster

           Memcached Cache是集中式Cache,它僅僅是支持將數(shù)據(jù)能夠分片分區(qū)的存儲(chǔ)到一臺(tái)或者多臺(tái)的Cache Server實(shí)例中,但是這些數(shù)據(jù)并沒有作冗余,因此任何一個(gè)服務(wù)實(shí)例不可用,都會(huì)導(dǎo)致部分緩存數(shù)據(jù)丟失。當(dāng)然很多人采取持久化等方式來保證數(shù)據(jù)的完整性,但是這種方式對(duì)于效率以及恢復(fù)的復(fù)雜性都會(huì)有影響。

           簡(jiǎn)單的來想,為什么不把數(shù)據(jù)在多保存一份或者多份呢,當(dāng)其中一份不可用的情況下,就用另外一份補(bǔ)上。這就是最原始的Cache Client Cluster的構(gòu)想。在這里具體的設(shè)計(jì)細(xì)節(jié)就不多說了,主要說一下幾個(gè)要點(diǎn),也讓使用Cache Client Cluster的同學(xué)有大致的一個(gè)了解。

           先來看看Cache Cluster的結(jié)構(gòu)圖:




           這張圖上需要注意四個(gè)角色:Application(使用Cache的應(yīng)用),Cache ClusterCache配置的虛擬集群),Cache NodeCache的虛擬節(jié)點(diǎn),在同一個(gè)Cluster中的Cache Node數(shù)據(jù)保持完全一致),Cache InstanceCache虛擬節(jié)點(diǎn)中實(shí)際包含的Memcached Cache服務(wù)端實(shí)例)。

           應(yīng)用僅僅操作Cache Node,不了解具體數(shù)據(jù)存儲(chǔ)或數(shù)據(jù)獲取是操作哪一個(gè)Cache 服務(wù)端實(shí)例。(這點(diǎn)也就是Memcached Cache可擴(kuò)展性的基礎(chǔ)設(shè)計(jì))。Cache Cluster又將多個(gè)Cache Node組成了虛擬的集群,通過數(shù)據(jù)冗余,保證了服務(wù)可用性和數(shù)據(jù)完整性。

     

           當(dāng)前 Cache Client Cluster主要有兩種配置模式:active standby。(這里是借鑒了硬件的名詞,其實(shí)并不完全一樣,因?yàn)檫€是考慮到了效率問題)

           Cache Client Cluster主要的功能點(diǎn):

    1.  容錯(cuò)。當(dāng)被分配到讀取或者操作數(shù)據(jù)的Cache虛擬節(jié)點(diǎn)不可用的情況下,集群其他節(jié)點(diǎn)支持代替錯(cuò)誤節(jié)點(diǎn)服務(wù)于客戶端應(yīng)用。

    2.  數(shù)據(jù)冗余。當(dāng)操作集群中某一個(gè)Cache虛擬節(jié)點(diǎn)時(shí),數(shù)據(jù)會(huì)異步傳播到其他集群節(jié)點(diǎn)。

    3.  軟負(fù)載。客戶端通過對(duì)操作的key作算法(當(dāng)前采用簡(jiǎn)單的key hash再取余的方式)選擇集群中的節(jié)點(diǎn),達(dá)到集群中節(jié)點(diǎn)簡(jiǎn)單的負(fù)載分擔(dān)。同時(shí)也由于這種模式,可以使得key都有默認(rèn)的第一操作節(jié)點(diǎn),此節(jié)點(diǎn)的操作保持時(shí)時(shí)更新,而其他節(jié)點(diǎn)可以通過客戶端異步更新來實(shí)現(xiàn)效率提升。

    4.  數(shù)據(jù)恢復(fù)。當(dāng)集群中某一節(jié)點(diǎn)失效后恢復(fù)時(shí),其數(shù)據(jù)可能已經(jīng)完全丟失,此時(shí)通過配置成為Active模式可以將其他節(jié)點(diǎn)上冗余的數(shù)據(jù)Lazy復(fù)制到該節(jié)點(diǎn)(獲取一個(gè)復(fù)制一個(gè),同時(shí)只支持一個(gè)冗余節(jié)點(diǎn)的數(shù)據(jù)獲取(不采取遍歷,防止低效))。

     

    Active模式擁有1,2,3,4的特性。Standby模式擁用1,2,3特性。(其實(shí)本來只考慮讓Standby擁有1特性)。未來不排除還會(huì)有更多需要的特性加入。Activekey不存在的情況下會(huì)有些低效,因?yàn)闀?huì)判斷一個(gè)冗余節(jié)點(diǎn)是否存在內(nèi)容,然后決定是否修復(fù)當(dāng)前節(jié)點(diǎn)。(考慮采用短期失敗標(biāo)示之類的,不過效率不一定高,同時(shí)增加了復(fù)雜度)

     

     

    運(yùn)行期動(dòng)態(tài)擴(kuò)容部署

           Memcached cache客戶端算法中比較出名的是Consistent Hashing算法,其目的也就是為了在節(jié)點(diǎn)增加或者減少以后,通過算法盡量減小數(shù)據(jù)重新分布的代價(jià)。采用虛擬節(jié)點(diǎn),環(huán)狀和二叉樹等方式可以部分降低節(jié)點(diǎn)增加和減少對(duì)于數(shù)據(jù)分布的影響,但是始終還是有部分?jǐn)?shù)據(jù)會(huì)失效,這點(diǎn)還是由于Memcached Cache是集中式Cache所決定的。

           但如果有了Cache Cluster的話,數(shù)據(jù)有了冗余,就可以通過逐步修改集群中虛擬節(jié)點(diǎn)配置,達(dá)到對(duì)于單個(gè)虛擬節(jié)點(diǎn)的配置動(dòng)態(tài)擴(kuò)容。

           支持動(dòng)態(tài)部署前提:

    配置文件動(dòng)態(tài)加載。(配置文件可以在Classpath中,也可以是Http資源的方式)通過Cache Client Cache Manager可以停止Cache 服務(wù),重新加載配置文件,即時(shí)生效。

    當(dāng)前動(dòng)態(tài)部署的兩種方式:

    1.              修改集群配置中某一套虛擬節(jié)點(diǎn)的服務(wù)實(shí)例配置(socketPool配置),增加或者減少后端數(shù)據(jù)存儲(chǔ)實(shí)例。然后動(dòng)態(tài)加載新的配置文件(可以通過指定遠(yuǎn)端的http配置作為新的配置文件),通過集群的lazy的修復(fù)方式,逐漸的將數(shù)據(jù)從冗余節(jié)點(diǎn)復(fù)制到新的節(jié)點(diǎn)上來,最終實(shí)現(xiàn)數(shù)據(jù)遷移。

    2.              修改集群配置中某一套虛擬節(jié)點(diǎn)的服務(wù)實(shí)例配置(socketPool配置),增加或者減少后端數(shù)據(jù)存儲(chǔ)實(shí)例。然后動(dòng)態(tài)加載新的配置文件(可以通過指定遠(yuǎn)端的http配置作為新的配置文件),在調(diào)用Cache Manager主動(dòng)將數(shù)據(jù)由某一虛擬節(jié)點(diǎn)復(fù)制到指定的集群中,實(shí)現(xiàn)數(shù)據(jù)批量遷移,然后根據(jù)需要看是否需要修改其他幾套虛擬節(jié)點(diǎn)配置。

     

    存在的問題:

    1.       當(dāng)前沒有做到不停止服務(wù)來動(dòng)態(tài)部署。(后續(xù)考慮實(shí)現(xiàn),當(dāng)前將編譯配置和重新啟動(dòng)服務(wù)器的工作節(jié)省了)

    2.       不論是lazy復(fù)制還是批量數(shù)據(jù)遷移,都是會(huì)將原本有失效時(shí)間的數(shù)據(jù)變成了無失效時(shí)間的數(shù)據(jù)。(這個(gè)問題暫時(shí)還沒有一種可行的高效的方式解決)

     

     

    后話

           性能優(yōu)化這點(diǎn)事還是那句老話,需要了再去做也不遲。同時(shí)如果你開發(fā)的是一個(gè)每天服務(wù)訪問量都是上億,甚至更高的系統(tǒng),那么有時(shí)候斤斤計(jì)較會(huì)收獲不少。(當(dāng)然是不影響系統(tǒng)本身業(yè)務(wù)流程的基礎(chǔ))。

           Cache客戶端自從作為開源放在Google上也收到了不少朋友的支持和反饋,同時(shí)自己業(yè)務(wù)系統(tǒng)以及其他部門同學(xué)的使用促使我不斷的去優(yōu)化和滿足必要的一些功能擴(kuò)展(但是對(duì)于Cache來說,還是那句話,簡(jiǎn)單就是美,高效是使用Cache的最原始的需求)。

           當(dāng)前Cache Client版本已經(jīng)到了2.5版本,在Google上有詳細(xì)的Demo(單元測(cè)試,壓力測(cè)試,集群測(cè)試)和說明使用文檔。是否速度會(huì)慢于其他Memcached客戶端,這不好說的很絕對(duì),反正大家自己拉下去比較一下看看就知道了,當(dāng)然為了集群和其他的一些必要的附加功能還是做了一些性能犧牲。

     

    項(xiàng)目地址在:http://code.google.com/p/memcache-client-forjava/

    在首頁(yè)的右側(cè)有demo,doc,binary,src的鏈接,直接可以下載使用和察看。希望對(duì)需要的同學(xué)有幫助。

    posted @ 2009-04-28 23:19 岑文初 閱讀(3374) | 評(píng)論 (6)編輯 收藏

    僅列出標(biāo)題
    共12頁(yè): First 上一頁(yè) 3 4 5 6 7 8 9 10 11 下一頁(yè) Last 
    主站蜘蛛池模板: 日韩视频免费一区二区三区| 亚洲视频国产视频| 久久久久久精品免费看SSS | 搡女人免费免费视频观看| 亚洲国产区男人本色| 久久久久亚洲AV无码网站| 亚洲精品无码久久久久| 免费A级毛片无码A∨男男| 好吊妞998视频免费观看在线| 久久中文字幕免费视频| 成av免费大片黄在线观看| 激情婷婷成人亚洲综合| 亚洲午夜无码久久| 99热这里只有精品6免费| 青青久久精品国产免费看| 亚洲另类自拍丝袜第五页| 亚洲中文字幕无码中文字在线| 在线a毛片免费视频观看| 我们的2018在线观看免费高清| 91精品免费观看| 国产成人AV片无码免费| 一个人看的在线免费视频| 人成午夜免费大片在线观看| 亚洲乱码av中文一区二区| 色老板亚洲视频免在线观| 亚洲精品视频专区| 亚洲影视一区二区| 亚洲av高清在线观看一区二区| 成人人免费夜夜视频观看| AV无码免费永久在线观看| 免费无码一区二区三区| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 亚洲国产女人aaa毛片在线| 亚洲处破女AV日韩精品| 亚洲精品午夜国产VA久久成人| 亚洲一区二区三区香蕉| 亚洲日韩小电影在线观看| 国产亚洲综合久久系列| 亚洲国产精品无码久久久秋霞2 | jizz免费观看| 一级成人生活片免费看|