關於做者
前滴滴出行技術專家,現任OPPO文檔數據庫mongodb負責人,負責oppo千萬級峯值TPS/十萬億級數據量文檔數據庫mongodb內核研發及運維工做,一直專一於分佈式緩存、高性能服務端、數據庫、中間件等相關研發。後續持續分享《MongoDB內核源碼設計、性能優化、最佳運維實踐》,Github帳號地址:https://github.com/y123456yzhtml
1.背景
mongodb是一款功能完善的分佈式文檔數據庫,在高性能、動態擴縮容、高可用、易部署、易使用、海量數據存儲等方面擁有自然優點。雖然mongodb有不少優點,可是在國內缺存在很多的誤解,影響力有待提高。mysql
1.1 mongodb歷年數據庫得分排名
DB-Engines是一個對數據庫管理系統受歡迎程度進行排名的網站,近年來,MongoDB在DB-Engines 數據庫流行度排行榜穩居榜單前五。在DB-Engines 排名能夠看出,mongodb歷年得分數據呈現持續增加的趨勢,具體以下圖所示:git
近兩年得分以下:github
從歷年得分排名能夠看出,mongodb整體趨勢呈現持續增加態勢,穩固了它在數據庫系統中的使用優點。sql
1.2 mongodb roadmap:不只僅是文檔數據庫
mongodb-4.2版本開始已經支持分佈式事務功能,當前對外文檔版本已經迭代到version-4.2.11,分佈式事務功能也進一步加強。此外,從mongodb-4.4版本產品規劃路線圖能夠看出,mongodb官方將會持續投入開發查詢能力和易用性加強功能,例如union多表聯合查詢、索引隱藏等。mongodb產品路線圖以下:mongodb
從mongodb-4.2版本分佈式事務功能支持以及4.4版本roadmap規劃圖能夠看出,mongodb後續發展會持續朝着NewSQL方向前行,預計會爲用戶提供更全面的數據庫服務功能。數據庫
1.3 談談當前國內對mongodb的誤解?-業務接入過程當中真實感覺
第1章節的mongodb排名和mongodb-4.x版本產品規劃路線圖能夠看出mongodb在全球數據庫服務系統有着重要的地位。當前,mongodb也爲我司互聯網系統提供了重要的數據庫存儲服務,支撐着天天近千萬級QPS峯值讀寫,數萬億級數據量存儲服務。緩存
可是,在真實業務接入過程當中,發現業務首次使用mongodb前,諮詢最頻繁的幾個問題以下(經過和對應業務開發溝通得知,這些誤解全來之網上,或者從其餘同行據說而來):安全
-
問題一:mongodb會不會丟數據呀,網上說mongodb會丟數據?性能優化
答:mongodb有完善的rollback及寫入策略(WriteConcern)機制,除非很是極端的狀況(例如主從同一時刻全掛)纔可能丟數據,其餘狀況不會存在該問題。
我司推廣mongodb過程當中,我接觸的業務中有收到三起反饋mongodb丟數據的狀況,最後經過咱們的流量審計功能,最終都分析出是業務有刪數據邏輯引發。
-
問題二:mongodb不安全,網上說數據庫被黑客攻擊要挾?
答:這是DBA的鍋,由於被攻擊的mongodb數據庫沒有作鑑權認證、沒有設置白名單等功能,黑客拿到IP便可攻擊。而我司線上全部集羣都有鑑權帳號認證及白名單功能,不存在該問題。
-
問題三:不少運維Mysql的DBA反應mongodb很難維護?
答:針對該問題,接觸了公司內部及前東家一些DBA,有些人確實有這感受。難維護緣由大概主要集中在mysql是非分佈式數據庫,主從結構部署,單個集羣節點數有限,確實分析問題相比分佈式數據庫更加快速簡單。mongodb是分佈式數據庫,部分大數據量大流量集羣幾十個分片,每一個分片幾個主從節點,分片與分片之間都是有狀態的邏輯關係,因此相比mysql確實維護難度會大一點。
可是,從我自身維護mongodb集羣經驗(線上數千個實例,最大集羣萬億級數據量),只要掌握了mongod分片集羣實現原理,我的沒感受運維有多大難度。
-
國內誤解根因總結:
- mongodb自己很優秀,可是不少DBA或者相應開發把控不住。
- 國內系統性分析mongodb內核實現原理的資料較少,遇到問題無從下手。
- 網絡社會以訛傳訛,DBA或者開發自身的問題演變爲mongodb問題。
1.4 針對國內對mongodb的誤解我能作些什麼?如何作?
mongodb在我司遇到的問題應該不是個例,預計國內其餘公司也會存在相似狀況,正如我在Qcon演講中說的那樣,只要國內有更多的人加入mongodb實現原理研究和更多案例、踩坑等分享,mongodb國內影響力會愈來愈高,國內對mongodb的誤解也會逐漸消失。
後續持續分享《MongoDB內核源碼設計、性能優化、最佳運維實踐》系列文章,該系列文章已經陸續在infoq、知乎、github分享:
- infoq專欄:《MongoDB內核源碼設計、性能優化、最佳運維實踐》
- github專欄:《mongodb內核源碼中文註釋詳細分析及性能優化時間系列》
- 知乎專欄:《MongoDB內核源碼設計、性能優化、最佳運維實踐》
- itpub專欄:《mongodb內核源碼設計實現、性能優化、最佳運維實踐》
2. 2020年總結
2020年即將過去,今年整體上是收穫的一年,也是歷份工做中最有成就感的一年,爲本身加油。
2.1 收穫的一年:爲本身點贊
2020最大的收穫莫過於人力不足的狀況下,憑一己之力把我司不受待見的mongodb數據庫從內部淘汰邊沿變爲公司主流數據庫。同時,也得到了更多對外分享及外部獎項,主要以下:
- 內部mongodb推廣:從淘汰邊沿變爲公司主流數據庫
- 第一期mongodb中文社區徵文一等獎得到者
中文社區一等獎:百萬級高併發MongoDB集羣性能數十倍提高優化實踐
- 第二期mongodb中文社區徵文一等獎
MongoDB網絡傳輸處理源碼實現及性能調優-體驗內核性能極致設計
- QCON全球軟件開發大會分享
Qcon分享:OPPO萬億級文檔數據庫MongoDB集羣性能優化實踐
- 2020年1月mongodb年終盛會受邀分享
mongodb年終盛會受邀分享:OPPO百萬級高併發MongoDB集羣性能數十倍提高優化實踐
- 2021年1月mongodb年終盛會受邀分享
2021年mongodb年終盛會分享:萬億級文檔數據庫集羣性能優化實踐
- dbaplus受邀分享(2-3場分享,時間待定)
- 百萬級高併發mongodb集羣性能數十倍提高優化實踐
- 萬億級文檔數據庫mongodb集羣性能優化實踐
2.2 踩坑的一年:時刻反思,轉變工做方式
雖然在過去的一年中把我司mongodb從內部淘汰邊沿變爲了公司內部主流數據庫,可是在這個過程當中仍是踩了不少坑,坑了本身,也坑了業務,哈哈,在此得給對應業務陪個不是。
踩坑過程主要集中在以下幾個方面:
- 業務客戶端不合理配置使用
- 監控不到位
- 運維不合理,誤操做
- 內核踩坑
- ......
數百個業務接入過程當中,出現過屢次踩坑,甚至出現同一個核心業務屢次抖動,還出現一次核心業務雪崩故障。以前分享了一篇雪崩故障的典型案例,以下所示:
該案例是數十個踩坑案例中的一個,後續空餘時間整理其他的數十例典型踩坑案例逐步分享到社區。雖然踩坑引發了一些不愉快,可是能夠給其餘同窗一些借鑑,減小其餘同窗踩相似的坑。
踩坑不可怕,在踩坑過程當中學習,學習過程當中減小踩坑
3. 21年規劃:繼續爲mongodb在國內推廣及影響力提高作點事
國內真正擁有自研分佈式系統的國內互聯網公司主要集中在頭部巨頭(例如:阿里、騰訊等),大部分公司任然忍受着Mysql分庫分表的痛點。實際上隨着mongodb-4.x分佈式事務、聯合查詢等功能的支撐,很大一部分場景能夠考慮採用分佈式文檔數據庫mongodb來知足業務需求,作到快速迭代開發。
然而,因爲當前國內系統性的mongodb資料文檔欠缺(主要依賴官方文檔知足要求)、網上以訛傳訛的對mongodb的誤解,形成了mongodb在國內影響力不足。此外,mongodb源碼級實現細節幾乎沒有一本完整的書籍講解。2021年但願能爲文檔數據庫mongodb在國內的推廣作點事,在此給本身立個小目標。
3.1 短時間目標
短時間目標主要是把我司數萬億級數據量mongodb業務接入過程所遇到的核心踩坑過程、性能優化案例、機房多活案例等分享到社區,避免國內其餘mongodb用戶踩一樣的坑,這些核心踩坑點主要以下:
- 300條數據操做引起的血案-記一次線上300條數據變動操做引發某10億級mongodb核心集羣不可用故障。
- 主節點持續性OOM-記一次業務排序操做不合理使用引發的核心mongodb集羣故障。
- 千億級/萬億級集羣最優索引添加方法-記一次數十億級核心集羣后臺索引添加引發的集羣抖動及快速恢復過程。
- 連接數耗光如何快速恢復集羣-記一次百億級核心集羣連接數耗光的快速自救過程。
- mongodb機房多活方案-實現成本、性能、一致性"三豐收"。
- mongodb線程模型瓶頸及其優化方法。
- 並行遷移-集羣擴容速率N倍提高優化實踐。
- 千億級核心元數據mongodb集羣性能數倍提高優化實踐。
- 萬億級數據量mongodb集羣性能數十倍提高優化實踐。
- 成本節省-記某服務千億級數據遷移mongodb,百臺SSD服務器節省優化實踐。
- 如何快速完成數千億數據從SSD高IO服務器遷移到SATA盤低IO服務器?
- 。。。。。。
指望完成時間:2021年4-5月
3.2 中期目標
完成Qcon、知乎、github、itpub中專欄《mongodb內核源碼實現、性能調優、最佳運維實踐系列》中核心文章的分享。
完成github中mongodb內核源碼中文註釋分析:mongodb內核源碼中文註釋分析
指望完成時間:2021年11月
3.3 年度目標
指望經過對mongodb核心內核核心技術內幕的分享整理,完成以下書籍的編寫整理:
- 《分佈式mongodb數據庫內核設計與實現》
- 《分佈式mongodb數據庫最佳運維實踐》
指望完成時間:2021年12月底
3.4 公司內部目標
- 公司自研mongodb內核深度優化,最大化解決高併發大流量、大數據量狀況下的抖動問題。
- 快速掌握mongodb-4.2分佈式事務實現原理,開始大力推廣分佈式事務功能。
- 持續分享內部推廣過程當中的集羣踩坑、性能優化等案例到社區。
- 其餘
指望完成時間:整年
2021即將到來,新起點,先開始,加油!!!