盤點 2020-我要為文件資料庫mongodb在國內推廣做點事

y123456yzzyz發表於2021-01-17

1.背景

mongodb 是一款功能完善的分散式文件資料庫,在高效能、動態擴縮容、高可用、易部署、易使用、海量資料儲存等方面擁有天然優勢。雖然 mongodb 有很多優勢,但是在國內缺存在不少的誤解,影響力有待提升。

1.1 mongodb歷年資料庫得分排名

DB-Engines 是一個對資料庫管理系統受歡迎程度進行排名的網站,近年來, MongoDB DB-Engines 資料庫流行度排行榜穩居榜單前五。在 DB-Engines 排名可以看出, mongodb 歷年得分資料呈現持續增長的趨勢,具體如下圖所示:

盤點 2020-我要為文件資料庫mongodb在國內推廣做點事

近兩年得分如下:

從歷年得分排名可以看出,mongodb 總體趨勢呈現持續增長態勢,穩固了它在資料庫系統中的使用優勢。

1.2 mongodb roadmap:不僅僅是文件資料庫

mongodb-4.2 版本開始已經支援分散式事務功能,當前對外文件版本已經迭代到 version-4.2.11 ,分散式事務功能也進一步增強。此外,從 mongodb-4.4 版本產品規劃路線圖可以看出, mongodb 官方將會持續投入開發 查詢能力和易用性增強 功能,例如union 多表聯合查詢、索引隱藏等。 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 分片叢集實現原理,個人沒感覺運維有多大難度。

 

國內誤解根因總結:

1.  mongodb 本身很優秀,但是很多 DBA 或者相應開發把控不住。

2.  國內系統性分析mongodb 核心實現原理的資料較少,遇到問題無從下手。

3.  網路社會以訛傳訛,DBA 或者開發自身的問題演變為 mongodb 問題。

 

1.4 針對國內對mongodb的誤解我能做些什麼?如何做?

mongodb 在我司遇到的問題應該不是個例,預計國內其他公司也會存在類似情況,正如我在 Qcon 演講中說的那樣,只要國內有更多的人加入 mongodb 實現原理研究和更多案例、踩坑等分享, mongodb 國內影響力會越來越高,國內對 mongodb 的誤解也會逐漸消失。

後續持續分享《MongoDB 核心原始碼設計、效能優化、最佳運維實踐》系列文章,該系列文章已經陸續在 infoq 、知乎、 github 分享:

infoq 專欄:《 MongoDB 核心原始碼設計、效能優化、最佳運維實踐》

itpub 專欄 : 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 受邀分享

百萬級高併發mongodb 叢集效能數十倍提升優化實踐

萬億級文件資料庫mongodb 叢集效能優化實踐

萬億級資料庫MongoDB 叢集效能優化實踐

盤點 2020-我要為文件資料庫mongodb在國內推廣做點事

2.2 踩坑的一年:時刻反思,轉變工作方式

雖然在過去的一年中把我司mongodb 從內部淘汰邊沿變為了公司內部主流資料庫,但是在這個過程中還是踩了很多坑,坑了自己,也坑了業務,哈哈,在此得給對應業務陪個不是。

踩坑過程主要集中在如下幾個方面:

1.  業務客戶端不合理配置使用

2.  監控不到位

3.  運維不合理,誤操作

4.  核心踩坑

5.  ......

數百個業務接入過程中,出現過多次踩坑,甚至出現同一個核心業務多次抖動,還出現一次核心業務雪崩故障。之前分享了一篇雪崩故障的典型案例,如下所示:

     記一次mongodb 核心叢集雪崩故障

該案例是數十個踩坑案例中的一個,後續空餘時間整理其餘的數十例典型踩坑案例逐步分享到社群。

雖然踩坑引起了一些不愉快,但是可以給其他同學一些借鑑,減少其他同學踩類似的坑。

 

       踩坑不可怕,在踩坑過程中學習,學習過程中減少踩坑

3. 21年規劃:繼續為mongodb在國內推廣及影響力提升做點事

國內真正擁有自研分散式系統的國內網際網路公司主要集中在頭部巨頭( 例如:阿里、騰訊等 ) ,大部分公司任然忍受著 Mysql 分庫分表的痛點。實際上隨著 mongodb-4.x 分散式事務、聯合查詢等功能的支撐,很大一部分場景可以考慮採用分散式文件資料庫 mongodb 來滿足業務需求,做到快速迭代開發。

然而,由於當前國內系統性的mongodb 資料文件欠缺(主要依賴官方文件滿足要求)、網上以訛傳訛的對 mongodb 的誤解,造成了 mongodb 在國內影響力不足。此外, mongodb 原始碼級實現細節幾乎沒有一本完整的書籍講解。 2021 年希望能為文件資料庫 mongodb 在國內的推廣做點事,在此給自己立個小目標。

3.1 短期目標

短期目標主要是把我司數萬億級資料量mongodb 業務接入過程所遇到的核心踩坑過程、效能優化案例、機房多活案例等分享到社群,避免國內其他 mongodb 使用者踩同樣的坑,這些核心踩坑點主要如下:

1.  300 條資料操作引發的血案 - 記一次線上 300 條資料變更操作引起某 10 億級 mongodb 核心叢集不可用故障。

2.  主節點持續性OOM- 記一次業務排序操作不合理使用引起的核心 mongodb 叢集故障。

3.  千億級/ 萬億級叢集最優索引新增方法 - 記一次數十億級核心叢集后臺索引新增引起的叢集抖動及快速恢復過程。

4.  連結數耗光如何快速恢復叢集- 記一次百億級核心叢集連結數耗光的快速自救過程。

5.  mongodb 機房多活方案 - 實現成本、效能、一致性 " 三豐收 "

6.  mongodb 執行緒模型瓶頸及其優化方法。

7.  並行遷移- 叢集擴容速率 N 倍提升優化實踐。

8.  千億級核心後設資料mongodb 叢集效能數倍提升優化實踐。

9.  萬億級資料量mongodb 叢集效能數十倍提升優化實踐。

10.  成本節省- 記某服務千億級資料遷移 mongodb ,百臺 SSD 伺服器節省優化實踐。

11.  如何快速完成數千億資料從SSD IO 伺服器遷移到 SATA 盤低 IO 伺服器?

12.  。。。。。。

 

期望完成時間: 2021 4-5

3.2 中期目標

完成Qcon 、知乎、 github itpub 中專欄《 mongodb 核心原始碼實現、效能調優、最佳運維實踐系列 》中核心文章的分享。

沒有什麼比原始碼更有說明力,完成github mongodb 核心原始碼中文註釋分析:

mongodb 核心原始碼中文註釋分析

 

     期望完成時間: 2021 11

3.3 年度目標

      期望通過對mongodb 核心核心核心技術內幕的分享整理,完成如下書籍的編寫整理:

1.  《分散式mongodb 資料庫核心設計與實現》

2.  《分散式mongodb 資料庫最佳運維實踐》

 

    期望完成時間: 2021 12 月底

3.4 公司內部目標

1.   公司自研 mongodb 核心深度優化,最大化解決高併發大流量、大資料量情況下擴容過程的抖動問題。

2.   快速掌握 mongodb-4.2 分散式事務實現原理,開始大力推廣分散式事務功能。

3.   持續分享內部推廣過程中的叢集踩坑、效能優化等案例到社群。

4.   其他

 

     期望完成時間: 全年

 

 

沒有什麼比原始碼更有說明力,21 年完成模組化分析 mongodb 原始碼

 

新的一年,加油


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984922/viewspace-2750617/,如需轉載,請註明出處,否則將追究法律責任。

相關文章