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