微服務(wù)下的數(shù)據(jù)架構(gòu)

微服務(wù)定義 微服務(wù)的優(yōu)勢及架構(gòu)特點 微服務(wù)架構(gòu)下的數(shù)據(jù)設(shè)計 選擇一個合適的數(shù)據(jù)庫










DevOps 持續(xù)集成
Decentralized 去中心數(shù)據(jù)治理
這么多微服務(wù)之間,我是否可以用一個數(shù)據(jù)庫,還是多個數(shù)據(jù)庫來支持多個微服務(wù)? 如果是多個數(shù)據(jù)庫,我是否為每一個微服務(wù)挑選一個最合適的數(shù)據(jù)庫,還是選擇同一種類型的數(shù)據(jù)庫? 我如何在微服務(wù)架構(gòu)下擴(kuò)展我的數(shù)據(jù)庫? 當(dāng)一個我依賴的服務(wù)需要修改數(shù)據(jù)庫 Schema 的時候,是否會影響到我? 當(dāng)微服務(wù)應(yīng)用不斷衍變的時候,我的數(shù)據(jù)庫是否可以快速的響應(yīng)應(yīng)用需求變化?


單點故障:一個數(shù)據(jù)庫倒下,整批服務(wù)全部停止。何來的服務(wù)獨立性? 數(shù)據(jù)在同一個地方,會給貪圖方便的開發(fā)或者 DBA 工程師編寫很多數(shù)據(jù)間高度依賴的程序或者工具; 無法針對某一個服務(wù)進(jìn)行精準(zhǔn)優(yōu)化或擴(kuò)展,如上文所講的 Snapchat 的例子。

混合持久化?- Polyglot Persistence
多模數(shù)據(jù)庫 - Multi-model Database

依然是一庫一服務(wù)(為一個服務(wù)部署一個單獨的數(shù)據(jù)庫); 但是使用的是同一種類型,支持多種場景的數(shù)據(jù)庫,如 NoSQL 中間為功能最全面的 MongoDB; 雖然是多實例,但是只需維護(hù)一種類型的數(shù)據(jù)庫,管理上和人員配備上都較為簡單。


應(yīng)用數(shù)據(jù)分區(qū) 數(shù)據(jù)庫分區(qū)




多模數(shù)據(jù)庫 (Multi-model) 原生 JSON 數(shù)據(jù)結(jié)構(gòu) - API 動態(tài)模式、無模式 (Dynamic schema / Schemaless) 數(shù)據(jù)變化流 (Change Stream) 橫向擴(kuò)展能力 (Sharding)

$graphLookup 來實現(xiàn)類似于圖數(shù)據(jù)庫的查詢 $facet 來實現(xiàn)分面搜索。 內(nèi)存引擎功能,用于支持類似于 Redis 的高速緩存 全文檢索,用于實現(xiàn)搜索類型場景

動態(tài)模式

數(shù)據(jù)更改流

彈性擴(kuò)展:可以擴(kuò)容也可以縮容; 無縫擴(kuò)展:無須停機(jī),就可在線擴(kuò)容; 自動均衡:無須應(yīng)用參與即可實現(xiàn)數(shù)據(jù)的自動均衡,完全透明。

一個基于 MongoDB 的微服務(wù)參考架構(gòu)圖

作者:唐建法
來源:Mongoing中文社區(qū)

評論
圖片
表情
