MongoDB 杭州用户会全记录(千寻位置、妈妈帮、阿里云专家等精彩分享)
MongoDB杭州用戶交流會(huì)于2017年3月12日下午在阿里巴巴西溪園區(qū)舉行,吸引了來(lái)自全國(guó)各地的近300名用戶參與,千尋位置、媽媽幫、阿里云等公司的5位技術(shù)專(zhuān)家分享了MongoDB 的運(yùn)維管理及使用經(jīng)驗(yàn),干貨滿滿。
用戶會(huì)進(jìn)行過(guò)程中我已經(jīng)在中文社區(qū)微信總?cè)骸⒍豪镒隽藢?shí)時(shí)的圖文直播,這里再做一個(gè)重點(diǎn)內(nèi)容匯總,錯(cuò)過(guò)現(xiàn)場(chǎng)的同學(xué)可以學(xué)習(xí)一下,完整的PPT、以及視頻云棲社區(qū)的同學(xué)正在整理中,敬請(qǐng)期待。
首先,來(lái)自千尋位置的肖應(yīng)軍同學(xué)分享了其統(tǒng)一監(jiān)控平臺(tái)使用 MongoDB 的實(shí)踐經(jīng)驗(yàn)。
千尋的統(tǒng)一監(jiān)控平臺(tái)包含數(shù)據(jù)采集、分發(fā)、存儲(chǔ)、報(bào)表、監(jiān)控等多個(gè)模塊,其中「存儲(chǔ)」和「報(bào)表」的模塊大量使用了mongoDB,分別解決數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)分析的問(wèn)題。
在數(shù)據(jù)存儲(chǔ)方面,監(jiān)控?cái)?shù)據(jù)擁有固有的特性,比如監(jiān)控的指標(biāo)不固定,可能臨時(shí)增加;數(shù)據(jù)寫(xiě)入的頻率比較固定,不會(huì)有大的波峰/谷流量出現(xiàn);讀取的并發(fā)量比較低,但一次返回的數(shù)據(jù)量比較大,同時(shí)隨著數(shù)據(jù)不斷的累計(jì),存儲(chǔ)量會(huì)越來(lái)越大。而mongoDB能很好的解決上述需求
- mongoDB 無(wú) schema 的特性,使得數(shù)據(jù)結(jié)構(gòu)擴(kuò)展起來(lái)非常方便
- mongoDB 高性能以及數(shù)據(jù)壓縮的特性完全能慢滿足數(shù)據(jù)存儲(chǔ)的需求
- mongoDB 的TTL索引的特性能自動(dòng)的刪除過(guò)期的數(shù)據(jù),確保存儲(chǔ)容量不會(huì)無(wú)限膨脹
千尋的報(bào)表模塊經(jīng)歷了2個(gè)階段的發(fā)展,第一階段分析需求比較簡(jiǎn)單,直接使用 mongoDB 的aggregation、mapReduce做數(shù)據(jù)分析來(lái)完成;而隨著業(yè)務(wù)方越來(lái)越多,報(bào)表的維度越來(lái)越細(xì),開(kāi)始使用spark(通過(guò)mongoDB spark connector)、阿里云EMR等產(chǎn)品配合mongoDB做數(shù)據(jù)分析,效率更高,并且能滿足復(fù)雜查詢分析的需求。
最后,千尋的同學(xué)分析了使用 mongoDB 過(guò)程中積累的經(jīng)驗(yàn)
- 生產(chǎn)環(huán)境推薦「1主2次」的配置,保證服務(wù)高可用、數(shù)據(jù)高可靠 (注:要保證高可用,除了后端要多節(jié)點(diǎn),還要正確的使用mongoDB driver,以正確的方式連接復(fù)制集)
- 慢查詢導(dǎo)致長(zhǎng)時(shí)間鎖庫(kù)(注:3.x版本wiredtiger引入行級(jí)鎖后,這個(gè)問(wèn)題應(yīng)該已經(jīng)不存在)
- 寫(xiě)入壓力大可能導(dǎo)致整個(gè)庫(kù)慢 (注:尤其是備庫(kù)的讀會(huì)受影響,參考MongoDB Secondary 延時(shí)高(同步鎖)問(wèn)題分析,但數(shù)據(jù)庫(kù)壓力太大說(shuō)明資源已經(jīng)不足了,應(yīng)該擴(kuò)容了)
- 建索引時(shí),盡量指定{background: true}選項(xiàng),后臺(tái)建索引,避免鎖庫(kù)影響業(yè)務(wù)。
- mongoshell能直接執(zhí)行js腳本,能極大的方便集群管理
- 使用TTL索引時(shí),索引的字段必須為時(shí)間戳字段(注:官方文檔有詳細(xì)介紹)
- 寫(xiě)入時(shí)指定需要的writeConcern級(jí)別,推薦{w: 1} (注:3.x的版本里{w: 1}是默認(rèn)的writeConcern級(jí)別,是可靠性與性能的折中選擇)
- 自建mongoDB 全部遷移 到 mongoDB云數(shù)據(jù)庫(kù)服務(wù),極大的降低了運(yùn)維管理成本。(注:作為 mongoDB 云數(shù)據(jù)庫(kù)的開(kāi)發(fā)者,能得到客戶的肯定,感到灰常開(kāi)心),下面是個(gè)廣告鏈接,不感興趣的請(qǐng)直接跳過(guò)
接下來(lái)阿里云的技術(shù)專(zhuān)家明儼深度解析了mongoDB sharding 備份相關(guān)的技術(shù)。
mongoDB sharding 解決了寫(xiě)入能力、存儲(chǔ)容量擴(kuò)展的問(wèn)題,引入了 mongos 用于請(qǐng)求路由,引入 config server 存儲(chǔ)sharding 集群的元數(shù)據(jù),整個(gè)架構(gòu)相比復(fù)制集更加復(fù)雜。
sharding 的備份因?yàn)椤竿獠啃薷摹挂约啊竷?nèi)部數(shù)據(jù)遷移」的影響,使得針對(duì) sharding 集群的備份很難對(duì)應(yīng)都一個(gè)確定的時(shí)間點(diǎn)。
傳統(tǒng)的解決方案是整個(gè)集群停止寫(xiě)操作(注:停寫(xiě)的方式包括業(yè)務(wù)停寫(xiě),或?qū)econdary調(diào)用fsyncLock,或?qū)econdary節(jié)點(diǎn)移除),然后對(duì)所有shard、config server的數(shù)據(jù)進(jìn)行備份,這樣的確能回復(fù)到一個(gè)確定的時(shí)間點(diǎn),但代價(jià)很大。
阿里云 MongoDB 數(shù)據(jù)庫(kù)針對(duì)sharding備份的解決方案是
- 每個(gè) shard 通過(guò) 「定期全量備份 + 持續(xù)抓取oplog」,具備恢復(fù)到任意時(shí)間點(diǎn)的能力(時(shí)間點(diǎn)精確到秒級(jí)別)
- 通過(guò)分析config server的遷移操作記錄,恢復(fù)時(shí)避開(kāi)「可能影響數(shù)據(jù)不一致的時(shí)間區(qū)間」(通常很短)。
媽媽幫的技術(shù)專(zhuān)家胡興邦介紹了5年來(lái)使用 mongoDB 的經(jīng)驗(yàn),媽媽幫從2012年就開(kāi)始全線使用 mongoDB,從2.2(看版本就知道是資深用戶)的版本一路升級(jí)到3.2(目前都已升級(jí)到3.2的最新版本)。
媽媽幫使用mongoDB一路發(fā)展過(guò)來(lái),使用的架構(gòu)也不斷演進(jìn),主要經(jīng)歷了4個(gè)階段
媽媽幫最初選擇 mongoDB 主要基于其靈活的文檔模型,以及天生可擴(kuò)展的架構(gòu),在業(yè)務(wù)發(fā)展的早期能保證業(yè)務(wù)快速迭代開(kāi)發(fā),在業(yè)務(wù)快速發(fā)展之后,還能橫向擴(kuò)展。
在遇到事務(wù)方面的需求時(shí)(注:mongoDB目前無(wú)法支持多文檔事務(wù),官方有計(jì)劃支持),媽媽幫使用了最簡(jiǎn)單的方式來(lái)應(yīng)對(duì),即「后臺(tái)定時(shí)修正不一致的數(shù)據(jù)」,其他的備選方案,例如使用消息隊(duì)列、二階段提交方式從方案上更加成熟,但實(shí)現(xiàn)復(fù)雜度更高。
在sharding方面,媽媽幫也積累了不少經(jīng)驗(yàn),建議用戶在使用sharding時(shí),一定要注意shardKey的選擇,并給出了一些建議。
- 能滿足業(yè)務(wù)場(chǎng)景查詢需求,盡量保證大部分query條件都由shard key,這樣請(qǐng)求只用分發(fā)到后端單個(gè)shard就能滿足,性能更高
- 盡量避免單個(gè)shard出現(xiàn)熱點(diǎn) (注:需要正確理解hash分片 和 range分片 2種方式的優(yōu)劣,做出最適合自己業(yè)務(wù)的選擇)
- 避免shard key的取值過(guò)少,導(dǎo)致單個(gè)chunk很大(jumbo chunk)而無(wú)法自動(dòng)遷移
- 多閱讀官方文檔,sharding-shard-key
阿里云資深研發(fā)工程師果實(shí)介紹阿里云 MongoDB 云數(shù)據(jù)庫(kù)高可用的主題,介紹mongoDB云數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)自動(dòng)的故障檢測(cè)及故障轉(zhuǎn)移。
阿里云數(shù)據(jù)庫(kù) MongoDB 版 是由3個(gè)節(jié)點(diǎn)組成的高可用復(fù)制集(目前也已支持sharding形態(tài)),3個(gè)分別為Primary、Secondary 和 Hidden,其中Priamry、Secondary節(jié)點(diǎn)提供給用戶讀寫(xiě),Hidden節(jié)點(diǎn)對(duì)用戶不可見(jiàn),主要用于實(shí)例備份以及保證實(shí)例高可用。
Hidden節(jié)點(diǎn)平時(shí)只同步Primary上寫(xiě)入的數(shù)據(jù),并不對(duì)外提供服務(wù),實(shí)例的全量及增量備份會(huì)在Hidden上進(jìn)行,做到不影響用戶的業(yè)務(wù)。
同時(shí),后端管控服務(wù)會(huì)不斷的模擬用戶訪問(wèn)行為來(lái)探測(cè)實(shí)例可用性,當(dāng)發(fā)現(xiàn)實(shí)例有節(jié)點(diǎn)故障時(shí)
如果出現(xiàn)2臺(tái)及以上節(jié)點(diǎn)故障,根據(jù) MongoDB 多數(shù)派的選舉原則,是無(wú)法選出Primary的,這時(shí)實(shí)例會(huì)進(jìn)入只讀狀態(tài),需要人工介入恢復(fù),但這種場(chǎng)景極少出現(xiàn)。(注:這里也可以reconfig一下,讓復(fù)制集變成單節(jié)點(diǎn)運(yùn)行繼續(xù)服務(wù)讀寫(xiě),但考慮到用戶數(shù)據(jù)的可靠性,目前并沒(méi)有使用這個(gè)方案)
除了故障時(shí)的處理,對(duì)于計(jì)劃中的機(jī)器維修、下線,則需要對(duì)機(jī)器上所有的實(shí)例,先將該節(jié)點(diǎn)切換為Hidden角色,然后針對(duì)所有的Hidden節(jié)點(diǎn)按上述1的流程處理,用新的節(jié)點(diǎn)替換,當(dāng)節(jié)點(diǎn)上沒(méi)有任何實(shí)例數(shù)據(jù)時(shí),就可以安全下線了。
最后出場(chǎng)的是徐雷老師,徐雷老師是《MongoDB實(shí)戰(zhàn)》第2版的譯者,徐雷老師的分享風(fēng)趣幽默,不僅講到MongoDB,還分享了很多架構(gòu)設(shè)計(jì)方面的經(jīng)驗(yàn),由于當(dāng)時(shí)有事掉線了,沒(méi)有獲取到精髓,等PPT出來(lái)大家可以好好學(xué)習(xí)一下。
在分享里徐老師也提到 MongoDB 目前在國(guó)內(nèi)外各大企業(yè)里都有著廣泛的應(yīng)用,充分說(shuō)明 MongoDB 是一門(mén)值得深入投資的技術(shù)。
最后,預(yù)告一下,MongoDB 中文社區(qū)今年還會(huì)繼續(xù)在全國(guó)各大城市舉行 MongoDB 用戶的技術(shù)交流會(huì),有強(qiáng)大的社區(qū)做后盾,用戶們可以更放心的使用 MongoDB;而且 MongoDB 本身官方文檔已經(jīng)非常全面了,絕大多數(shù)的問(wèn)題都能從官方文檔找到答案,建議大家多看官方文檔,用好 MongoDB,為你的業(yè)務(wù)創(chuàng)造最大價(jià)值。
云數(shù)據(jù)庫(kù) MongoDB 版 基于飛天分布式系統(tǒng)和高性能存儲(chǔ),提供三節(jié)點(diǎn)副本集的高可用架構(gòu),容災(zāi)切換,故障遷移完全透明化。并提供專(zhuān)業(yè)的數(shù)據(jù)庫(kù)在線擴(kuò)容、備份回滾、性能優(yōu)化等解決方案。 了解更多 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的MongoDB 杭州用户会全记录(千寻位置、妈妈帮、阿里云专家等精彩分享)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 理解cookie和session
- 下一篇: J2EE的13个规范总结