OPPO萬億級文檔數(shù)據(jù)庫MongoDB集群性能優(yōu)化實踐-楊亞洲_第1頁
OPPO萬億級文檔數(shù)據(jù)庫MongoDB集群性能優(yōu)化實踐-楊亞洲_第2頁
OPPO萬億級文檔數(shù)據(jù)庫MongoDB集群性能優(yōu)化實踐-楊亞洲_第3頁
OPPO萬億級文檔數(shù)據(jù)庫MongoDB集群性能優(yōu)化實踐-楊亞洲_第4頁
OPPO萬億級文檔數(shù)據(jù)庫MongoDB集群性能優(yōu)化實踐-楊亞洲_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

OPPO萬億級文檔數(shù)據(jù)庫MongoDB集群性能 Omongodb800%業(yè)務接入過程中經常咨詢的幾個問題:誤解一.丟數(shù)據(jù)誤解二.不安全,網上一堆說mongodb被黑客攻擊,截圖一堆新聞誤解三.DBA吐槽mongodb太難維護內對mongodb誤解(丟數(shù)據(jù)、不安全、難維護)?1.mongodb本身很優(yōu)秀,但是很多DBA和相應開發(fā)把控不住2.國內系統(tǒng)性的mongodb資料相對欠缺mongodb機房多活方案-實現(xiàn)成本、性能、一致性"三豐收"機房B戶端mongodb集群godb機房B戶端mongodb集群godb機房A戶端oppooppo互聯(lián)網mongodb:楊亞洲mongodb集群2.數(shù)據(jù)一致性問題3.人力原因B機房ClientC機房ClientA機房mongosB機房mongosA機房mongod(主)B機房mongodB機房ClientC機房ClientA機房mongosB機房mongosA機房mongod(主)B機房mongod(從)A機房mongod(主)mongod(從)B機房mongod(從)mongod(從)shard-1A機房Clientoppo互聯(lián)網mongodb:楊亞洲戶端代理層C機房mongosC機房mongos 存儲層B機房ClientB機房mongosA機房mongosoppo互聯(lián)網mongodb:楊亞洲A機房B機房ClientB機房mongosA機房mongosoppo互聯(lián)網mongodb:楊亞洲A機房mongod(主)mongodA機房mongod(主)mongodB機房mongod(從)B機房mongod(從)A機房mongod(從)A機房mongod(從)B機房mongod(從)B機房mongod(從)shard-nshard-1A機房Client戶端代理層存儲層方案三:異地三機房多活方案(1mongod+1mongod+1mongod方式)-解決跨機房寫戶端C機房ClientC機房mongosA機房mongos代理層戶端C機房ClientC機房mongosA機房mongos代理層存儲層A機房ClientB機房ClientB機房mongosoppo互聯(lián)網mongodb:楊亞洲A機房mongod(主)A機房mongod(主)mongod(從)shard-1B機房mongod(從)mongod(從)B機房mongod(主)A機房mongod(從)mongod(主)A機房mongod(從)B機房mongod(從)2.A機房數(shù)據(jù)轉發(fā)到分片shard-1,B機房數(shù)據(jù)轉發(fā)到分片shard-2,C機房數(shù)據(jù)轉發(fā)到分片mongodb線程模型瓶頸及其優(yōu)化方法mongodb默認線程模型(一個鏈接一個線程)oppo互聯(lián)網mongodb:楊亞洲worker線程12nr新連接fd-n新連接client客戶端建..1.listener線程負責接受所有的客戶端鏈接2.listener線程每接收到一個新的客戶端鏈接就創(chuàng)建一個線程,該線程只負責處理該鏈接請求處理。型缺陷:2.當鏈接關閉的時候,線程銷毀,頻繁的線程創(chuàng)建和消耗進一步增加系統(tǒng)負載mongodb默認線程模型(動態(tài)線程模型:單隊列方式)狀態(tài)機調模塊oppo互聯(lián)網mongodb:楊亞洲worker動態(tài)線程池12n全局隊列任務n任務1競爭競爭client請求client請求..1.該模型把一次請求轉換為多個任務:mongodb數(shù)據(jù)讀操作(網絡IO)、db層數(shù)據(jù)訪問(磁盤IO)。2.任務入隊到全局隊列,線程池中的線程從隊列中獲取任務執(zhí)行。4.當任務太多,系統(tǒng)壓力大的時候,線程池中線程數(shù)動態(tài)增加;當任務減少,系統(tǒng)壓力減少的時候,線程池中線程數(shù)動態(tài)減少;缺陷:mongodb動態(tài)adaptive線程模型,適用于請求處理比較耗時的場景,如數(shù)據(jù)庫服務mongodb優(yōu)化后線程模型(動態(tài)線程模型-多隊列方式)hash散列任務n...任務1...client請求任務n...任務1oppo互聯(lián)網mongodb:楊亞洲..任務n任務1hash散列任務n...任務1...client請求任務n...任務1oppo互聯(lián)網mongodb:楊亞洲..任務n任務112線程n-1n務入隊的時候按照session鏈接hash散列到各自的隊列,工作線程獲取獲取任務的時候,同理通過同樣的1.OPPO自研mongodb內核多隊列adaptive線程模型優(yōu)化,特定場景性能有很好的提升,適用于請求處理比較耗時的場景,如數(shù)據(jù)庫服務。configmongodmongod(mongod(mongos競爭獲取分布式鎖mongos1mongosconfigmongodmongod(mongod(mongos競爭獲取分布式鎖mongos1mongos2...oppo互聯(lián)網mongodb:楊亞洲mongos_n源分片列源分片列表mongod(ardmongod(mongod(mongod(ardmongod(mongod(mongod(mongodmongodshard_n...新增分mongod(mongod新增分mongod(mongod(mongod(mongod(新增分mongod(mongod...擴容新增分片列表mongodmongod(新增分mongod(mongod1.多個mongos代理競爭分布式鎖,獲取鎖成功的代理選擇源分片列表中的一個分片進行moveChunk操作。注意:同一時刻只會遷移一個分片的數(shù)據(jù)。2.缺陷:由于整個集群同一個時刻只能遷移一個分片數(shù)據(jù),所以遷移速度很慢。并行遷移-集群擴容速率N倍提升優(yōu)化實踐(優(yōu)化后)mongos1mongos2mongos_n...mongod(ardmongod(mongod(shardmongos1mongos2mongos_n...mongod(ardmongod(mongod(shard_nmongodmongod(...mongod(ardmongod(mongod源分片列表mongod(configmoconfigmongodmongod(mongod(oppo互聯(lián)網mongodb:楊亞洲擴容新增分片列表mongod擴容新增分片列表mongod(新增分mongod(mongod(mongod(mongod(mongod(mongod(mongodmongod新增分新增分...1.在特定代理增加并行遷移配置,該代理可以同時觸發(fā)遷移源分片列表中多個分片的chunk到目標不同分片。2.為了避免沖突和提升遷移速度,同一時刻源分片列表中任一分片只能同時遷移一個chunk。同理,目標分片列表中的分片同一時刻只能接受一個chunk。mongodb性能數(shù)倍提升優(yōu)化實踐mongodb提升優(yōu)化實踐案例1.千億級數(shù)據(jù)量mongodb集群性能數(shù)倍提升優(yōu)化實踐-背景2.數(shù)據(jù)量千億級3.前期寫多讀少,后期讀多寫少4.高峰期讀寫流量百萬級5.時延敏感7.數(shù)據(jù)增長快,不定期擴容8.同城多活集群億級數(shù)據(jù)量mongodb集群性能數(shù)倍提升優(yōu)化實踐-優(yōu)化過程rnwmajorityOK4.enableMajorityReadConcern關閉,有性能損耗。mongodb群性能數(shù)倍提升優(yōu)化實踐-優(yōu)化過程優(yōu)化策略2:存儲引擎cache淘汰策略優(yōu)化wiredtiger存儲引擎cache淘汰策略相關的幾個配置如下:wiredtiger淘汰相關配置值工作原理eviction_target當用掉的內存超過總內存的百分比到eviction_target,后臺evict線程開始淘汰eviction_trigger當用掉的內存超過總內存的eviction_trigger,用戶線程也開始淘汰eviction_dirty_target當cache中臟數(shù)據(jù)比例超過eviction_dirty_target,后臺evict線程開始淘汰eviction_dirty_trigger當cache中臟數(shù)據(jù)比例超過eviction_dirty_trigger,用戶線程也開始淘汰evict.threads_min4后臺evict線程最小線程數(shù)evict.threads_max4后臺evict線程最小線程數(shù)wiredtiger存儲引擎cache淘汰策略優(yōu)化后配置:eviction_target:75%,eviction_trigger:97%,eviction_dirty_target:%3,eviction_dirty_trigger:25%,evict.threads_min:4,evict.threads_max:16總體思想:evict線程盡早淘汰臟頁page到磁盤,增加evict淘汰線程數(shù)加快臟數(shù)據(jù)淘汰,避免戶請求線程進行臟數(shù)據(jù)淘汰。億級數(shù)據(jù)量mongodb集群性能數(shù)倍提升優(yōu)化實踐-優(yōu)化過程優(yōu)化策略3:存儲引擎checkpoint優(yōu)化存儲引擎checkpoint檢測點,把當前存儲引擎臟數(shù)據(jù)全部記錄到磁盤。觸發(fā)條件如下:1.固定周期做一次checkpoint快照,默認60s2.增量journal日志達到2G少部分實例存在如下現(xiàn)象:一會兒磁盤IO幾乎空閑0%,一會兒磁盤IO短暫性100%。進行如下優(yōu)化后可以緩解該問題:checkpoint=(wait=30,log_size=1GB)kpointcheckpointIO戶端代理層oppo互聯(lián)網mongodb:楊亞洲存儲層億級數(shù)據(jù)量mongodb集群性能數(shù)倍提升優(yōu)化實踐-優(yōu)化過程戶端代理層oppo互聯(lián)網mongodb:楊亞洲存儲層ClientClientClientClientB機房mongosCB機房mongosC機房mongosA機房mongosA機房mongos優(yōu)化前架構圖AA機房mongodB機房mongodA機房mongodB機房mongodC機房mongodC機房mongodshard-1..1.代理緩存所有客戶端的鏈接信息到內存中,并定期更新到config庫的system.sessions表中。2.大流量大數(shù)據(jù)量集群客戶端鏈接眾多,大量更新sessions表,最終主分片性能下降引起整個集群性能瞬間數(shù)倍下戶端代理層oppo互聯(lián)網mongodb:楊亞洲存儲層..A機房mongodB機房mongodshard-1C機房mongodB機房mongodA機房戶端代理層oppo互聯(lián)網mongodb:楊亞洲存儲層..A機房mongodB機房mongodshard-1C機房mongodB機房mongodA機房mongodC機房mongodClientClientClientClientB機房mongosCB機房mongosC機房mongosA機房mongosA機房mongosons優(yōu)化后架構圖1.config庫的system.sessions表啟用分片功能。2.mongos定期更新優(yōu)化為散列到不同時間點進行更新。億級數(shù)據(jù)量mongodb集群性能數(shù)倍提升優(yōu)化實踐-優(yōu)化過程優(yōu)化策略4:sharding集群system.session優(yōu)化1.之前代理集中式更新單個分片,優(yōu)化為散列到不同時間點更新多個分片。2.該優(yōu)化后system.sessions表更新引起的瞬間性能數(shù)倍降低和大量慢日志問題得到了解決。億級數(shù)據(jù)量mongodb集群性能數(shù)倍提升優(yōu)化實踐-優(yōu)化過程化策略5:tcmalloc內存優(yōu)化db.serverStatus().tcmalloc監(jiān)控發(fā)現(xiàn)部分mongod實例pageheap、內存碎片等消耗過高。通過借助gperftools三方庫中tcmalloc內存管理模塊,實時動態(tài)調整tcmalloc內存ReleaseRate,盡早釋放內存,避免存儲引擎獲取cache過程阻塞變慢。mongodb升優(yōu)化實踐1.集群存儲離線數(shù)據(jù)2.集群總數(shù)據(jù)量萬億級3.前期主要為數(shù)據(jù)寫入,要求萬億級數(shù)據(jù)幾周內盡快全部寫入集群4.后期主要是讀流量,單次查詢數(shù)據(jù)條數(shù)比較多,要求快速返回5.每隔一定時間周期(周為單位)會有持續(xù)性大量寫入mongodb提升優(yōu)化實踐使用優(yōu)化等基礎性優(yōu)化策略同樣適用于該集群,具體詳見《分享主題六:百萬級高并發(fā)讀寫/千億級數(shù)據(jù)量mongodb集群性能數(shù)倍提升優(yōu)化實踐》mongodb升優(yōu)化實踐優(yōu)化策略2:存儲模型優(yōu)化前狀況{"_id":ObjectId("5fh2ebd18856960dbac31abc"),"characteristic":"xxxx","key1":"***","keyn":"***",}1.以上為單條數(shù)據(jù)的數(shù)據(jù)模型,該集群總數(shù)據(jù)量萬億級。2.數(shù)十萬條數(shù)據(jù)擁有同樣的characteristic特性,總特性數(shù)總計數(shù)百萬個。3.一次性查詢數(shù)十個characteristic很慢。cIO,查詢成為瓶頸。mongodb提升優(yōu)化實踐優(yōu)化策略2:第一輪數(shù)據(jù)存儲模型優(yōu)化:{"_id":ObjectId("5f29ebd18856960dbac31abc"),"characteristic":"xxxx""group":[{"key1":"***"},#該characteristic下第一條數(shù)據(jù){"key1":"***"}#該characteristic下第n條數(shù)據(jù)]}該數(shù)據(jù)模型把相同characteristic特性的數(shù)十萬數(shù)據(jù)合并到為一條數(shù)據(jù),減少磁盤IO操作,整個讀性能會有近百倍提升。瓶頸點:該輪優(yōu)化解決了讀瓶頸,卻引入了新的寫瓶頸。1.通過$addToSet方式向group數(shù)組中去重追加數(shù)據(jù),去重遍歷過程越來越慢,數(shù)據(jù)長度越來越長,寫性能成為新的瓶頸。mongodb升優(yōu)化實踐優(yōu)化策略2:第二輪數(shù)據(jù)存儲模型優(yōu)化:{"_id":ObjectId("5f29ebd18856960dbac31abc"),"characteristic":"xxxx","heshNum":num,"group":[{"key1":"***",},#該characteristic下第一條數(shù)據(jù){"key1":"***",}#該characteristic下第n條數(shù)據(jù)]}如上,把同一個characteristic特征的數(shù)十萬數(shù)據(jù)散列為500份,這樣合并后group

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論