Posted on 2009-06-14 15:25
dennis 閱讀(2026)
評論(0) 編輯 收藏 所屬分類:
java
在JavaMemCached這個memacched客戶端,如果你有多個memcachd節點,你可以設置memcached server的權重,權重高的節點在存儲、獲取等操作就相應占的比重比較大。恰巧我最近也在實現一個類似這樣流控的東西,因此在xmemcached實現了此feature。這個功能暫定在1.2.0的時候發布,但是現在已經可以從svn獲取,只是你需要自己build。
使用方法,與通常調用的唯一區別就是在創建MemcachedClient的時候,
MemcachedClientBuilder builder = new XMemcachedClientBuilder (AddrUtil.getAddresses("localhost:12000 localhost:12001"),new int[]{1,3});
MemcachedClient memcachedClient = builder.build();
XMemcachedClientBuilder新增一個重載構造函數,除了傳入地址列表之外,還可以傳入一個權重數組表示列表中的memcached節點權重,權重數組與地址列表一一對應。這里將localhost:12001的權重設為3,而localhost:12000的權重設置為1。 如果沒有提供權重值,默認都是為1。這個feature已經進行了測試,在隨機化測試下完全符合比例要求。這一feature對于是使用標準哈希,還是一致性哈希都有效。
實現原理是添加weight次相同的session存儲在session查找集合里,但是注意這里仍然是只有一個連接的,只是在集合里存儲了這個連接的多份引用,那么在查找session的過程中,找到權重大(引用多)的連接的幾率相應就比較大。