成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數(shù)據(jù)庫緩存重建不容忽視

數(shù)據(jù)庫 其他數(shù)據(jù)庫 數(shù)據(jù)庫運(yùn)維
本文對傳統(tǒng)的分布式Cache系統(tǒng)進(jìn)行了分析,指出了其在緩存重建中會對數(shù)據(jù)庫產(chǎn)生巨大壓力的問題。并分析了MongoDB的mmap方案是如何規(guī)避這一問題的。

本文對傳統(tǒng)的分布式Cache系統(tǒng)進(jìn)行了分析,指出了其在緩存重建中會對數(shù)據(jù)庫產(chǎn)生巨大壓力的問題。并分析了MongoDB的mmap方案是如何規(guī)避這一問題的。

如下圖的架構(gòu),在數(shù)據(jù)庫前端加上分布式的Cache(比如我們常用的Memcached),讓客戶端在訪問時先查找Cache,Cache不命中再讀數(shù)據(jù)庫并將結(jié)構(gòu)緩存在Cache中。這是目前比較常用的一種分擔(dān)讀壓力的方法。

[[44630]]

但是這個方法存在一個問題,如果前端的Cache掛掉,或者比較極端的整個機(jī)房斷電了,那么在機(jī)器重啟后,原來Cache機(jī)器在內(nèi)存中的緩存會全部清空,在客戶端訪問過程中,會百分之百的不命中,這樣數(shù)據(jù)庫會在瞬間接受巨大的讀壓力。

試想如果一個64GB的緩存失效了,在其重建時,假設(shè)與數(shù)據(jù)庫連接的千兆網(wǎng)卡,假設(shè)其以極限速度100M每秒從數(shù)據(jù)庫取數(shù)據(jù)過來重建緩存,那么也需要 10分鐘才能建完。更何況這是理想情況,對于客戶端觸發(fā)式的隨機(jī)緩存重建,可能會花掉更長的時間。這還是在數(shù)據(jù)庫能提供100M每秒的數(shù)據(jù)讀請求的前提下。

我們經(jīng)常看到一些網(wǎng)站掛掉后又恢復(fù),恢復(fù)后又掛掉,如此反復(fù)幾次才能真正恢復(fù),原因就在于其第一次Cache倒了,數(shù)據(jù)庫無法承受相應(yīng)的讀壓力,在緩存重建了一小部分后被壓死。相當(dāng)于數(shù)據(jù)庫每重啟一次,可以恢復(fù)部分緩存,直到緩存的非命中率到達(dá)數(shù)據(jù)庫可承受的壓力時,才能夠真正恢復(fù)服務(wù)。

這個問題可以用一些可以提供持久化功能的緩存來實(shí)現(xiàn),比如Redis,在未開啟aof的情況下,其定期dump出來的rdb文件出能自動恢復(fù)出絕大部分?jǐn)?shù)據(jù),當(dāng)然,在有的時候這可能導(dǎo)致緩存和數(shù)據(jù)庫數(shù)據(jù)不一致的情況,需要根據(jù)應(yīng)用場景選擇性的使用。

上面是對分布式Cache的問題,而對于很多數(shù)據(jù)庫存儲,實(shí)際上也幾乎都是將熱數(shù)據(jù)盡量放在內(nèi)存中的。但很多數(shù)據(jù)庫在實(shí)現(xiàn)上是自己在內(nèi)存中實(shí)現(xiàn)了 Cache機(jī)制,這樣在數(shù)據(jù)庫重啟(非操作系統(tǒng)重啟)時,這些Cache可能也就隨之被清空了,對于數(shù)據(jù)庫來說,也需要重建緩存,而數(shù)據(jù)庫這時所有的操作可能都落在磁盤IO上,帶來了同樣的問題。

而MongoDB與上面的方式不太一樣,MongoDB采用mmap來將數(shù)據(jù)文件映射到內(nèi)存中,所以當(dāng)MongoDB重啟時,這些映射的內(nèi)存并不會清掉,因?yàn)樗鼈兪怯刹僮飨到y(tǒng)維護(hù)的(所以當(dāng)操作系統(tǒng)重啟時,MongoDB才會有相同問題)。相對于其它一些自己維護(hù)Cache的數(shù)據(jù)庫,MongoDB在重啟后并不需要進(jìn)行緩存重建與預(yù)熱。

另外,新浪微博的timyang也曾經(jīng)提出過一種緩存重建加鎖的方式,也能部分解決此問題。簡單來說就是緩存重建時,當(dāng)多個客戶端對同一個緩存數(shù)據(jù)發(fā)起請求時,會在客戶端采用加鎖等待的方式,對同一個Cache的重建需要獲取到相應(yīng)的鎖才行,只有一個客戶端能拿到鎖,并且只有拿到鎖的客戶端才能訪問數(shù)據(jù)庫重建緩存,其它的客戶端都需要等待這個拿到鎖的客戶端重建好緩存后直接讀緩存,其結(jié)果是對同一個緩存數(shù)據(jù),只進(jìn)行一次數(shù)據(jù)庫重建訪問。但是如果訪問分散比較嚴(yán)重,還是會瞬間對數(shù)據(jù)庫造成非常大的壓力。

下面是幾點(diǎn)比較實(shí)用的知識:

  • 無論使用哪個存儲,都最好先搞清楚其緩存重建的過程,如果一次重啟就可能導(dǎo)致數(shù)據(jù)庫崩潰,還是小心為好,最好把重啟時間選在訪問量比較小的時候。
  • 重啟MongoDB不會導(dǎo)致MongoDB的緩存失效(除非重啟服務(wù)器)
  • 當(dāng)你重新mount磁盤時,文件系統(tǒng)的緩存會失效,這和重啟機(jī)器時一樣,MongoDB也無法避免
  • 一個使用MongoDB的小技巧,當(dāng)MongoDB服務(wù)器剛啟動時,你可以將其所有文件copy到/dev/null中,這會觸發(fā)操作系統(tǒng)對這些文件的讀操作,從而在內(nèi)存允許的條件下,會將盡可能多的MongoDB數(shù)據(jù)文件映射到物理內(nèi)存中。當(dāng)然,如果在MongoDB運(yùn)行過程中,你能夠判斷哪些文件保存的數(shù)據(jù)是熱數(shù)據(jù),也可以將這些文件copy到/dev/null 來為其爭取更多的物理內(nèi)存。

原文出處:http://blog.nosqlfan.com/html/3097.html

【編輯推薦】

  1. MongoDB之父:MongoDB勝過BigTable
  2. 主流NoSQL數(shù)據(jù)庫全方位評測之MongoDB
  3. 教你如何利用MySQL學(xué)習(xí)MongoDB
  4. 在Windows環(huán)境下MongoDB搭建和簡單操作
  5. Mongodb源碼分析之Mongos分析
責(zé)任編輯:艾婧 來源: nosqlfan
相關(guān)推薦

2015-10-14 11:29:17

數(shù)據(jù)中心細(xì)節(jié)

2013-01-04 14:35:27

Windows Ser

2018-04-08 16:00:34

私有云虛擬化網(wǎng)絡(luò)架構(gòu)

2013-01-04 14:55:10

Windows Ser微軟云平臺

2022-04-17 14:59:43

云成本FinOps云成本優(yōu)化

2016-07-21 10:25:54

2011-08-15 13:13:26

2013-08-26 10:23:47

2010-06-21 17:46:53

2013-03-22 10:31:59

2016-10-28 16:38:27

IT

2015-12-16 10:06:19

2023-07-19 07:51:10

文檔對象模型DOM

2013-11-19 16:55:35

2021-07-07 09:45:20

大數(shù)據(jù)數(shù)據(jù)安全數(shù)據(jù)技術(shù)

2009-09-10 08:43:34

虛擬化部署安全問題

2011-05-13 14:12:00

2017-02-15 09:04:10

大數(shù)據(jù)技術(shù)Hadoop

2016-02-24 15:02:07

數(shù)據(jù)安全/數(shù)據(jù)泄漏

2013-07-09 16:39:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美成人a∨高清免费观看 老司机午夜性大片 | 国产欧美精品 | 国产精品久久久久久久粉嫩 | 中文字幕一区二区三区日韩精品 | 亚洲视频在线播放 | 欧美日韩在线国产 | 久久久久久综合 | www.久| 日韩欧美三区 | 欧美狠狠操 | 亚洲视频免费播放 | 亚洲福利一区 | 久久久久国| 日本电影免费完整观看 | 成人精品鲁一区一区二区 | 成人免费淫片aa视频免费 | 久久亚洲视频网 | 亚洲精品一区二区三区在线观看 | 国产二区三区 | 在线欧美一区 | 91日b| 欧州一区二区 | 18av在线播放| 国产一区二区自拍 | 三级在线视频 | 日韩在线播放一区 | 久久综合av | 麻豆久久久9性大片 | 亚洲国产一区二区三区在线观看 | 日韩在线观看中文字幕 | 日韩欧美一级精品久久 | 久久av一区 | 精品日韩一区二区 | 乳色吐息在线观看 | 男人天堂色| 国产精品久久九九 | 日日操av | 一级做受毛片免费大片 | 欧美日韩一区二区三区四区 | 亚洲三区在线播放 | 国产精品成人一区二区三区吃奶 |