MongoDB在vivo評論中臺的應用案例
本文來自獲得《2021MongoDB技術實踐與應用案例徵集活動》入圍案例獎作品
1.業務背景
2.為什麼選擇MongoDB
3.MongoDB在評論中臺的應用
3.1 MongoDB叢集知識
叢集架構
-
hash分片:通過hash演算法進行雜湊,資料分佈的更加平均和分散。支援單列和多列hash。 -
範圍分片:按照指定片鍵的值分佈,連續的key往往分佈在連續的區間,更加適用範圍查詢場景。單資料雜湊性由分片鍵本身保證。
3.2 評論中臺的實踐
片鍵的選擇
-
jumbo chunk問題 -
唯一鍵問題
-
You cannot specify a unique constraint on a hashed index -
For a to-be-sharded collection, you cannot shard the collection if the collection has other unique indexes -
For an already-sharded collection, you cannot create unique indexes on other fields
遷移和擴容
db.settings.update({ _id: "balancer" },{ $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },{ upsert: true })
sh.addShard("<replica_set>/<hostname><:port>")
-
單個叢集,不能滿足部分業務資料物理隔離的需要 -
叢集調優(如split遷移時間)很難業務特性差異化設定 -
水平擴容帶來的單個業務方資料過於分散問題
-
擴充套件後的評論MongoDB叢集 增加了 【邏輯叢集】和【物理叢集】的概念。一個業務方屬於一個邏輯叢集,一個物理叢集包含多個邏輯叢集。 -
增加了路由層設計,由應用負責擴充套件spring的MongoTemplate和連線池管理,實現了業務到MongoDB叢集之間的切換選擇服務。 -
不同的MongoDB分片叢集,實現了物理隔離和差異調優的可能。
3.3 自研MongoDB事件採集處理平臺及應用
事件資料服務
-
評論發表事件 > 評論數統計點贊、 -
取消點贊事件 > 點贊數統計 -
僅自身可見事件 > 使用者僅自身可見數統計
-
直接採集的事件,其事件內容依然無法滿足業務需求,無法滿足對比變更前後的資料來自定義事件,因此需要對相應的事件資料進行合併,具體的實現在後文進行介紹。 -
變更事件需要按照業務方自定義的條件進行過濾,只需要將滿足條件的事件分發給下游資料服務。
MongoDB採集架構和流程
功能介紹
-
支援在任務接入後進行一次全量採集,全量採集結束後會根據使用者配置的延遲時間開啟增量採集。 -
支援針對單一任務的啟動、停止、修改等操作。操作完成後會實時進行相應的變更。 -
增量採集斷點續傳功能。在任意時刻停止任務後進行恢復採集,任務將由上一次完成的採集點位後一個點位開始繼續進行採集。在oplog大小保證資料完整的條件下,不會有資料漏採的情況發生。 -
全量、增量採集均支援按照使用者自定義的kafka分割槽傳送規則傳送至相應的分割槽。 -
全量、增量採集均支援任務狀態和資料量監控。 -
全量、增量採集均支援根據副本集、sharding變化自動開啟採集。
方案架構
-
MongoDBParser首先將對資料進行解析和過濾。對於MongoDB全量資料採集,MongoDBParser將直接對全表執行find()操作,對於MongoDB 增量資料採集,MongoDBParser將讀取local庫下的oplog.rs表,根據遞增的ts值依次獲取新增的oplog事件,由於ts值的唯一性,已經傳送完成的 ts值將作為歷史點位資訊儲存在Bees-DBSync本地並上傳到Bees-Manager的資料庫中,成為斷點續傳功能的必須條件。 -
StreamData,具體由MongoDBStreamData實現,負責存放Bees-DBSync從業務MongDB解析後的資料。 -
PackageThread,負責對MongoDBStreamData格式的資料進行任務資訊的填充,並將資料打包成統一的PkgData資料格式,用以保證MongoDB、MySQL等傳送格式的一致性。 -
PkgData,是Bees-DBSync內部處理後統一的資料格式。 -
KafkaSink模組,負責對目的端資訊進行處理,根據使用者配置的不同分割槽傳送規則,將PkgData格式的資料傳送到不同的Kafka分割槽。
資料完整性保障
-
Pull:最後一次拉取oplog的點位 -
Sink:最後一次傳送Kafka的點位 -
Ack:最後一次成功Sink到Kafka的點位
採集流程
MongoDB變更事件處理平臺
業務事件平臺的整體架構圖
MongoDB 事件資料合併流程
4.寫在最後
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69961190/viewspace-2856238/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB 在評論中臺的實踐MongoDB
- vivo 評論中臺的流量及資料隔離實踐
- 行業案例| MongoDB在騰訊零售優碼中的應用行業MongoDB
- Redis 在 vivo 推送平臺的應用與優化實踐Redis優化
- Redis 在 vivo 推送平臺的應用與最佳化實踐Redis
- [應用案例]給網站加了個評論功能,帶點贊網站
- SQL解析在美團點評中的應用SQL
- OPF理論在回合RPG中的分析和應用
- [論文閱讀] RNN 在阿里DIEN中的應用RNN阿里
- 5G在工業中應用的討論
- mongoDB在網際網路金融的應用MongoDB
- SQL解析在美團點評中是如何應用的?SQL
- Elasticsearch 在業界的大量應用案例Elasticsearch
- 變點理論CUSUM在擇時交易中的應用
- 行業案例 | MongoDB 在 QQ 小世界 Feed 雲系統中的應用及業務架構優化實踐行業MongoDB架構優化
- Dubbo 泛化呼叫在vivo統一配置系統的應用
- 百度評論中臺的設計與探索
- 私有云部署在網際網路公司中的應用案例解析
- React 小案例 使用者評論React
- 教你如何用 MongoDB 實現評論榜功能MongoDB
- 工作流引擎在vivo營銷自動化中的應用實踐 | 引擎篇03
- TRIZ理論在數字化轉型中的應用體現
- TRIZ理論在電極材料應用中的可行性分析
- 六西格瑪培訓在流程最佳化中的應用案例
- TRIZ理論在洗碗機設計中應用探討
- 使用MongoDB 應用MongoDB
- vivo前端智慧化實踐:機器學習在自動網頁佈局中的應用前端機器學習網頁
- [應用案例]OT應用案例之dasdig
- redis在nodejs中的應用RedisNodeJS
- redis在python中的應用RedisPython
- Refs 在React中的應用React
- HMM在NLP中的應用HMM
- MQTT 在 Elixir 中的應用MQQT
- 理論+案例,帶你掌握Angular依賴注入模式的應用Angular依賴注入模式
- 機器學習在實時性欺詐檢測中的應用案例機器學習
- 行業案例| 千億級高併發MongoDB叢集在某頭部金融機構中的應用及效能優化實踐(上)行業MongoDB優化
- BurpSuite在非Web應用測試中的應用UIWeb
- TRIZ理論在提高AGV導航系統可靠性中的應用