單節點伺服器,以快取為例
高併發問題
網際網路公司的分布式高併發系統有什麼特點?
單機快取能扛起高併發嗎?
redis、memcached 的併發能力有多強?
海量資料對快取有什麼影響?(分片集群)
方式一:hash(key) % 集群節點數
搞**活動,臨時增加一台伺服器來提高集群效能,方便擴充套件集群嗎?
增加乙個節點後,有多大比例的資料快取命不中?
對系統會有什麼影響?(快取雪崩)
對程式設計師的影響
方式二:一致性 hash 演算法
集群的節點一定會均衡分布在環上嗎?
方式三:一致性 hash 演算法 + 虛擬節點
hash 演算法選擇
虛擬節點放到環上,具體是要做什麼?
fnv1_32_hash
public class fnv1_32_hash
hash += hash << 13;
hash ^= hash >> 7;
hash += hash << 3;
hash ^= hash >> 17;
hash += hash << 5;
// 如果算出來的值為負數則取其絕對值
if (hash < 0)
return hash;}}
測試 string.hashcode() 和 以上演算法的均衡度public class hashtest
}
簡單實現乙個一致性演算法public class consistencehash
public consistencehash(int virtualnums)
/*** 新增服務節點
*/public void addserver(string node) }}
/*** 移除伺服器
*/public void removeserver(string node)
}realnodes.remove(node);
real2virtualmap.remove(node);
}/**
* 根據 key 查詢物理節點
*/public string getserver(string key)
return sortedmap.get(submap.firstkey());
}public static void main(string args) }}
Memcached 分布式快取
memcached是什麼?memcached 是乙個高效能的分布式記憶體物件快取系統,用於動態web應用以減輕資料庫負載。它通過在記憶體中快取資料和物件來減少讀取資料庫的次數,從而提供動態 資料庫驅動 的速度。memcached基於乙個儲存鍵 值對的hashmap。其守護程序 daemon 是用c寫...
分布式快取 Memcached
分布式快取出於如下考慮,首先是快取本身的水平線性擴充套件問題,其次是快取大併發下的本身的效能問題,再次避免快取的單點故障問題 多副本和副本一致性 分布式快取的核心技術包括首先是記憶體本身的管理問題,包括了記憶體的分配,管理和 機制。其次是分布式管理和分布式演算法,其次是快取鍵值管理和路由。原文 什麼...
Memcached 分布式快取
memcached 是乙個高效能的分布式 記憶體物件快取系統,用於動態web應用以減輕 資料庫負載。它基於乙個 儲存鍵 值對的 hashmap 其守護程序 daemon 是用 c寫的,但是 客戶端可以用任何語言來編寫,並通過memcached協議與守護程序通訊。memcached 通過在記憶體中快取...