莊周夢(mèng)蝶

          生活、程序、未來(lái)
             :: 首頁(yè) ::  ::  :: 聚合  :: 管理

              Xmemcached在元旦左右準(zhǔn)備發(fā)1.3這個(gè)版本,這個(gè)版本新增加的一個(gè)關(guān)鍵特性就是所謂的failure模式。關(guān)于這個(gè),可以看下memcached官方文檔的解釋
          《Failure,or Failover》

              展開(kāi)來(lái)說(shuō),在某個(gè)memcached節(jié)點(diǎn)掛掉或者由于其他故障連接斷開(kāi)的時(shí)候,大部分客戶(hù)端的默認(rèn)策略都是failover的,也就是會(huì)查找下一個(gè)可用的memcached節(jié)點(diǎn)繼續(xù)使用,掛掉或者連接不上的節(jié)點(diǎn)的數(shù)據(jù)會(huì)轉(zhuǎn)移到其他節(jié)點(diǎn)上,路由的策略可以是Round Robin,也可以是一致性哈希。這樣的模式在節(jié)點(diǎn)意外故障掛掉的情況下運(yùn)行的很好,但是memached節(jié)點(diǎn)也完全可能因?yàn)橐粋€(gè)意外的事故而短暫掛掉,比如你不小心弄掉了網(wǎng)線(xiàn)又馬上接上去,比如機(jī)房交換機(jī)突然停電又立即恢復(fù)了,假設(shè)在故障前,用戶(hù)A正要更新數(shù)據(jù)到節(jié)點(diǎn)A,節(jié)點(diǎn)A意外斷開(kāi),那么這些數(shù)據(jù)就更新到下一個(gè)有效節(jié)點(diǎn)B,但是節(jié)點(diǎn)A又馬上恢復(fù),這時(shí)候用戶(hù)又從節(jié)點(diǎn)A去讀數(shù)據(jù),讀到卻是更新前的老數(shù)據(jù)了(新數(shù)據(jù)更新到B節(jié)點(diǎn)去了),這種情況對(duì)用戶(hù)來(lái)說(shuō)就非常困惑,你告訴我更新成功,但是看到卻還是更新前的數(shù)據(jù)。

             怎么解決呢?一個(gè)簡(jiǎn)單的方案就是所謂failure模式,當(dāng)某個(gè)節(jié)點(diǎn)掛掉的時(shí)候,不會(huì)從節(jié)點(diǎn)列表移除,請(qǐng)求也不會(huì)轉(zhuǎn)移到下一個(gè)有效節(jié)點(diǎn),而是直接將請(qǐng)求置為失敗,就剛才的場(chǎng)景來(lái)說(shuō),在用戶(hù)更新數(shù)據(jù)到節(jié)點(diǎn)A的時(shí)候,節(jié)點(diǎn)A意外斷開(kāi),那么用戶(hù)的這次更新請(qǐng)求不會(huì)轉(zhuǎn)移到節(jié)點(diǎn)B,而是直接告訴用戶(hù)更新失敗,用戶(hù)再次查詢(xún)數(shù)據(jù)則繞過(guò)節(jié)點(diǎn)A直接查詢(xún)后端存儲(chǔ)。這種模式很適合這種節(jié)點(diǎn)短暫不可用的狀況,請(qǐng)求會(huì)穿透緩存到后端,但是避免了新舊數(shù)據(jù)的問(wèn)題。
              Xmemcached 1.3將支持failure模式,只要你設(shè)置下failureMode為true即可,簡(jiǎn)單示例:

                     XMemcachedClientBuilder builder =……
                         
          //設(shè)置使用failure模式
                     builder.setFailureMode(true);
                在此模式下,某個(gè)節(jié)點(diǎn)掛掉的情況下,往這個(gè)節(jié)點(diǎn)的請(qǐng)求都將直接拋出MemcachedException的異常。

                不僅如此,xmemcached 1.3還將引入standby node的概念,你可以設(shè)置某個(gè)memached節(jié)點(diǎn)的備份節(jié)點(diǎn),當(dāng)這個(gè)節(jié)點(diǎn)掛掉的時(shí)候會(huì)將請(qǐng)求轉(zhuǎn)發(fā)給這個(gè)備份節(jié)點(diǎn),不會(huì)簡(jiǎn)單地拋出異常,也不會(huì)轉(zhuǎn)發(fā)給其他節(jié)點(diǎn)。要使用standby node,必須首先設(shè)置使用failure mode,一個(gè)例子:

          XMemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil
                          .getAddressMap(
          "192.168.1.99:11211,192.168.1.100:11211 192.168.1.101:11211,192.168.1.102:11211"));
          builder.setFailureMode(
          true);

               可以看到,新的服務(wù)器字符串格式變化為host:port,host:port host:port,host:port的格式,以空格隔開(kāi)的是兩個(gè)節(jié)點(diǎn)組成的一個(gè)分組,以逗號(hào)隔開(kāi)的是主節(jié)點(diǎn)和備份節(jié)點(diǎn),以上面的例子來(lái)說(shuō),我們?cè)O(shè)置客戶(hù)端使用的節(jié)點(diǎn)是192.168.1.99和192.168.1.101,其中99對(duì)應(yīng)的備份節(jié)點(diǎn)是100,而101的備份節(jié)點(diǎn)是102。并且我們需要設(shè)置使用failure mode為true。
             
               Failure mode加上standby節(jié)點(diǎn)可以比較好的解決新舊數(shù)據(jù)的問(wèn)題,并且也可以防止請(qǐng)求穿透緩存到DB,但是主備兩個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)同步,xmemcached不準(zhǔn)備幫你做,我的建議是可以使用repcached這個(gè)patch做復(fù)制。
              有的朋友可能希望,在使用備份節(jié)點(diǎn)之前先f(wàn)lush掉備份節(jié)點(diǎn)的數(shù)據(jù),防止使用到老的數(shù)據(jù),請(qǐng)求還是可以穿透緩存去DB查找,并存儲(chǔ)到備份節(jié)點(diǎn),我仔細(xì)考慮了這個(gè)方案,衡量之下還是不準(zhǔn)備做自動(dòng)flush,主要是并發(fā)上很難處理,并且flush數(shù)據(jù)這個(gè)事情可以手工來(lái)搞,根據(jù)我的經(jīng)驗(yàn),做的太透明太自動(dòng)不一定是好事。你可以在主節(jié)點(diǎn)恢復(fù)之后,手工flush下備份節(jié)點(diǎn)的數(shù)據(jù)。


              目前,xmemcached 1.3已經(jīng)整裝待發(fā),對(duì)這些特性有興趣的朋友可以先從svn下載源碼嘗鮮,有任何改進(jìn)的建議請(qǐng)發(fā)郵件給我。我的郵件地址在博客的右上角。





            

          評(píng)論

          # re: Xmemcached 1.3預(yù)覽:failure模式和standby節(jié)點(diǎn)  回復(fù)  更多評(píng)論   

          2010-12-28 13:13 by 朔望魔刃
          Xmemcached是什么?

          # re: Xmemcached 1.3預(yù)覽:failure模式和standby節(jié)點(diǎn)  回復(fù)  更多評(píng)論   

          2010-12-28 13:31 by 南國(guó)咖啡
          dennis被你氣死了@朔望魔刃

          # re: Xmemcached 1.3預(yù)覽:failure模式和standby節(jié)點(diǎn)  回復(fù)  更多評(píng)論   

          2010-12-28 13:33 by spray gun
          這個(gè)功能實(shí)現(xiàn)起來(lái)還真容易,謝謝博主分享。

          # re: Xmemcached 1.3預(yù)覽:failure模式和standby節(jié)點(diǎn)  回復(fù)  更多評(píng)論   

          2010-12-29 14:40 by 上情下愛(ài)
          博主你好,
          最近想利用memcached 來(lái)管理 HTTP Session,實(shí)現(xiàn) SNA 架構(gòu),想請(qǐng)教博主給點(diǎn)兒建議,分享下經(jīng)驗(yàn)?呵呵,如果可以的話(huà)

          # re: Xmemcached 1.3預(yù)覽:failure模式和standby節(jié)點(diǎn)  回復(fù)  更多評(píng)論   

          2012-03-07 17:10 by 游客
          我根據(jù)這個(gè)設(shè)置,貌似不管用,備份節(jié)點(diǎn)有和沒(méi)有是 一樣的
          主站蜘蛛池模板: 皮山县| 蒙自县| 长顺县| 庐江县| 文昌市| 太湖县| 贡觉县| 静乐县| 祁连县| 阿巴嘎旗| 义马市| 石泉县| 彩票| 柘荣县| 阳朔县| 满城县| 象山县| 黄梅县| 麻江县| 南宁市| 洪江市| 正阳县| 无棣县| 永定县| 清水河县| 溧阳市| 富平县| 建始县| 依安县| 山西省| 泸水县| 修水县| 新疆| 临朐县| 外汇| 德惠市| 仪陇县| 尖扎县| 黔西| 山东| 曲阳县|