一、概述
在分布式環境下,開發者通常會遇到一些分布存儲的場景,例如數據庫的分庫分表(比如用戶id尾號為1的放入數據庫1,id尾號為2的放入數據庫2);又如分布式緩存數據的獲取(比如根據ip地址進行緩存數據的分布存放)。在這種情況下,如何快速的將數據放入指定的位置,又如何快速獲取是個最基本的要求,對於這種實現,有以下兩種常用的方式:
1、配置中心拉取:這種情況下,數據的路由都會通過這一個中心節點取拉起配置,具體的方式如下:
這種模式下的優點和缺點都很明顯,優點就是方便維護,后面彈性擴展都只需要對配置中心數據進行操作即可,能夠做到動態的完成DB的擴容等一些列問題。缺點就是這種情況下配置中心萬一出現問題,后果是災難性的,容易有單點故障,而且等到后續數據量特別巨大的時候,配置中心有可能本身會變成改系統的瓶頸。
2、對於需要操作的數據,通過一個確定的規則產生一個key,然后根據這個key進行一定的規則運算,直接獲取到具體的數據操作地址。本文接下來所闡述的一些算法,就是通過這種方式去實現的。
二、數據分發的方式。
對於最簡單的數據分發方式,當然是通過取余算法來進行分發,這樣能夠保證最終的數據充分的均勻。但是這種情況下,在發生設備增加和減少的情況,會直接導致命中率急劇下降。