APP開發(fā)集群架構(gòu)如何升級(jí)數(shù)據(jù)庫備份配置?
我們在APP項(xiàng)目開發(fā)中如何使用MongoDB處理LBS查詢,為了保證高可用,開始階段就推薦使用MongoDB的副本集架構(gòu)。副本集架簡單來說類似于MySQL的主從架構(gòu),一個(gè)主節(jié)點(diǎn)負(fù)責(zé)寫,多個(gè)從節(jié)點(diǎn)負(fù)責(zé)讀,通過MongoDB的內(nèi)部機(jī)制,數(shù)據(jù)從主節(jié)點(diǎn)復(fù)制到從節(jié)點(diǎn)。但副本集中的主節(jié)點(diǎn)不是固定于某臺(tái)服務(wù)器,而是通過集群中的服務(wù)器選舉得到。深圳APP開發(fā)公司現(xiàn)就這些實(shí)際應(yīng)用方法進(jìn)行如下整理歸納,首先我們看看副本集的架構(gòu)如圖9 -35所示。
APP開發(fā)集群架構(gòu)備份數(shù)據(jù)庫升級(jí)示意圖9-35 MongoDB副本集架構(gòu)
隨著業(yè)務(wù)的發(fā)展,MongoDB副本集慢慢會(huì)出現(xiàn)下面的問題。
·內(nèi)存不夠。
·讀寫壓力過大。
·主、從復(fù)制延時(shí)過長
不同類型的App對(duì)LBS系統(tǒng)的讀寫壓力完全不同。例如,對(duì)于美甲、家政類型的o2o類型 App,其更新和獲取LBS數(shù)據(jù)的頻率很低。但對(duì)于打車類App.因?yàn)槠湫枰l繁地更新地理位置數(shù)據(jù),LBS后臺(tái)需要承擔(dān)的讀寫壓力比般App的讀寫App大,在打車類型快的公開的資料中LBS系統(tǒng)每秒的讀寫次數(shù)比居然達(dá)到4:1。
MongoDB寫壓力增大引發(fā)庫鎖問題。MongoDB3.0之前的版本會(huì)有庫鎖,庫鎖的意思是當(dāng)多個(gè)客戶端并發(fā)訪問個(gè)庫時(shí),如果某個(gè)客戶端正在進(jìn)行寫操作,其他客戶端部必須排隊(duì)等待。到了一定的并發(fā)量后,庫鎖對(duì)性能影響十分巨大。
MongoDB寫壓力增大也會(huì)引發(fā)主從復(fù)制延時(shí)過長的問題,對(duì)于某些類型的App來說是沒法接受的,例如打車App。因?yàn)檐囎又倍继幱诟咚僖苿?dòng),司機(jī)的地理位置數(shù)據(jù)會(huì)在主節(jié)點(diǎn)更新。當(dāng)乘客在從節(jié)點(diǎn)中查詢附近的車子時(shí),如果主、從延時(shí)過大,雖然從庫上查詢的車子位置是在附近,但車子實(shí)際的位置可能已經(jīng)移動(dòng)到l公里外。這就給乘客帶來了不好的體驗(yàn),造成乘客呼叫了車后,車久久不來。
以上問題的解決方案有下面兩個(gè)
·MongoDB3. 0的WiredTiger存儲(chǔ)引擎,該款存儲(chǔ)引擎支持了文檔級(jí)別的鎖,但由于這款存儲(chǔ)引擎不兼容MongoDB以前版本的數(shù)據(jù),因此升級(jí)困難。
·MongoDB的分片架構(gòu)。對(duì)于大多數(shù)LBS后臺(tái)來說,這是最理想的解決方案。
APP開發(fā)集群數(shù)據(jù)庫升級(jí)方法分片架構(gòu)
分片架構(gòu)可以把集群中大量的數(shù)據(jù)讀寫請(qǐng)求分散到多個(gè)片上處理,每個(gè)分片是副本集的架構(gòu)。關(guān)于副本集的詳細(xì)介紹,請(qǐng)各位查看本站分片要注意合理的分片規(guī)則,通過合理的分片規(guī)則把LBS請(qǐng)求合理分散到各個(gè)分片。對(duì)于LBS應(yīng)用,一個(gè)常用的分片規(guī)則是根據(jù)用戶所在的地區(qū)分片,例如打車App,一線城市的打車使用LBS的頻率比二三線城市多,因此可以把所有用戶的地理位置數(shù)據(jù)按照地區(qū)劃分到不同的分片。由于MongoDB現(xiàn)在默認(rèn)的分片策略還不能實(shí)現(xiàn)基于地理位置的分片,因此采用的是應(yīng)用層分片方案。
下面展示了分片方案把所有LBS請(qǐng)求按照3個(gè)地區(qū)的劃分在不同的分片如表所示。

APP開發(fā)定位處理方案示意圖表9-6把所有LBS請(qǐng)求按照3個(gè)地區(qū)分片。
好了,本文APP開發(fā)公司關(guān)于APP制作數(shù)據(jù)庫集群備份處理方法就分享到這里,謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。