網(wǎng)站讀取錯誤時怎樣做愛站之家
Neo4j 集群和負(fù)載均衡
Neo4j是當(dāng)前最流行的開源圖DB。剛好讀到了Neo4j的集群和負(fù)載均衡策略,記錄一下。
1 集群
Neo4j 集群使用主從復(fù)制實(shí)現(xiàn)高可用性和水平讀擴(kuò)展。
1.1 復(fù)制
集群的寫入都通過主節(jié)點(diǎn)協(xié)調(diào)完成的,數(shù)據(jù)先寫入主機(jī),再同步到一個或多個備機(jī)。這意味著并沒有做圖切分,集群中的每個實(shí)例都將包含數(shù)據(jù)的完整副本。準(zhǔn)確來說,集群中的每個實(shí)例最終會將包含數(shù)據(jù)的完整副本,原因是,剛剛寫入的數(shù)據(jù),可能還沒有同步到備機(jī)。
Neo4j 也允許通過從節(jié)點(diǎn)進(jìn)行寫入操作,不過此時,被寫入的從節(jié)點(diǎn)會先將數(shù)據(jù)同步到主節(jié)點(diǎn),再將數(shù)據(jù)返回客戶端。由于額外的網(wǎng)絡(luò)負(fù)載和協(xié)調(diào)協(xié)議,通過從節(jié)點(diǎn)寫入會比直接寫入主節(jié)點(diǎn)慢一個數(shù)量級。
1.2 寫入緩沖區(qū)
在高寫人負(fù)載的情況中,可以使用隊列來進(jìn)行緩沖區(qū)寫入和負(fù)載調(diào)節(jié)。使用該策略將集群的寫入緩沖在隊列中,隨后會有工作節(jié)點(diǎn)對隊列進(jìn)行輪詢并對數(shù)據(jù)庫執(zhí)行批量寫入。這不僅控制了寫入流量,而且降低了競爭,并使我們能夠在維護(hù)時段暫停寫入操作而不拒絕客戶端的請求。
2 負(fù)載均衡
2.1 讀寫分離流量
鑒于推薦的寫入方式是將絕大部分寫入操作直接在主節(jié)點(diǎn)上進(jìn)行,我們應(yīng)該將讀請求和寫請求完全分離開,并通過負(fù)載均衡器將寫流量定向到主節(jié)點(diǎn),而讀流量平衡地分散到整個集群。
2.2 高速緩存分片
高速緩存分片技術(shù)是指將每個請求路由到 HA(高可用性)集群中的特定實(shí)例上,這個實(shí)例可能已經(jīng)將需要使用的圖的部分放置在自己的主存儲器中了。
如果應(yīng)用程序的大多數(shù)查詢都是局部圖查詢,即從圖的一個或多個特定點(diǎn)開始,然后遍歷周圍的子圖,那么這種一致地從一組節(jié)點(diǎn)開始查詢,隨后路由到同一數(shù)據(jù)庫實(shí)例繼續(xù)查詢的機(jī)制將增加每個查詢在熱高速緩存( warm cache )中命中可能性。 例如,在一個地理數(shù)據(jù)系統(tǒng)中,我們可以將特定地區(qū)的請求路由到特定的剛剛響應(yīng)過該地區(qū)的數(shù)據(jù)庫實(shí)例上。這種策略都增加了所需節(jié)點(diǎn)和聯(lián)系被緩存在主存儲器中的可能性,在那里它們可以被快速地訪問和處理。
感興趣的同學(xué)可以看一下一致性哈希。
3 附
以上內(nèi)容均參考自《圖數(shù)據(jù)庫》。
圖數(shù)據(jù)庫(第二版).pdf https://www.aliyundrive.com/s/zxfL2btKEj5