掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
最近參與公司項(xiàng)目研發(fā),在其中發(fā)現(xiàn)對于數(shù)據(jù)的管理存在一些小問題,根據(jù)以往經(jīng)驗(yàn),在這里記錄下微服務(wù)數(shù)據(jù)設(shè)計(jì)模式。

樂都網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
微服務(wù)架構(gòu)中的服務(wù)是松耦合的,可以獨(dú)立開發(fā)、部署和擴(kuò)展。每個(gè)微服務(wù)都需要不同類型的數(shù)據(jù)和存儲方式,也因?yàn)檫@樣每個(gè)微服務(wù)都有自己的數(shù)據(jù)庫。
每個(gè)微服務(wù)都有自己的數(shù)據(jù)庫,可以自由選擇如何管理數(shù)據(jù)。
是否需要為每個(gè)服務(wù)使用不同的數(shù)據(jù)庫服務(wù)器?這不是一個(gè)硬性要求。讓我們看看我們能做些什么。
需要連接多個(gè)數(shù)據(jù)庫的查詢?—以下數(shù)據(jù)模式可以克服這一挑戰(zhàn)。
跨多個(gè)數(shù)據(jù)庫事務(wù)?—為了解決這個(gè)問題,我們可以使用Saga 模式。
通過事件溯源,業(yè)務(wù)實(shí)體的狀態(tài)由一系列狀態(tài)變化的事件跟蹤。每當(dāng)業(yè)務(wù)實(shí)體的狀態(tài)發(fā)生變化時(shí),都會(huì)將新事件添加到事件列表中。由于保存事件是一個(gè)單一的操作,它本質(zhì)上是原子的。通過重放事件,應(yīng)用程序重建實(shí)體的當(dāng)前狀態(tài)。
應(yīng)用程序?qū)⑹录4嬖谑录鎯χ?,事件存儲是事件?shù)據(jù)庫??梢允褂闷?API 從存儲中添加和檢索事件。事件存儲也充當(dāng)消息代理。服務(wù)可以通過其 API 訂閱事件。當(dāng)服務(wù)在事件存儲中保存一個(gè)事件時(shí),它會(huì)發(fā)送給所有感興趣的訂閱者。當(dāng)實(shí)體有大量事件時(shí),應(yīng)用程序可以定期保存實(shí)體當(dāng)前狀態(tài)的快照以優(yōu)化加載。應(yīng)用程序查找最近的快照以及自該快照以來發(fā)生的事件以重建當(dāng)前狀態(tài)。這減少了要重播的事件的數(shù)量。
您可以使用 API 組合模式實(shí)現(xiàn)從多個(gè)服務(wù)中檢索數(shù)據(jù)的查詢操作。在這個(gè)模式中,通過調(diào)用擁有數(shù)據(jù)的服務(wù)然后組合結(jié)果來實(shí)現(xiàn)查詢操作。
在微服務(wù)架構(gòu)中查詢數(shù)據(jù)的一種便捷方式。
有時(shí),查詢會(huì)導(dǎo)致大型數(shù)據(jù)集的低效內(nèi)存連接。
RDBMS 通常用作記錄事務(wù)系統(tǒng)和文本搜索數(shù)據(jù)庫,例如用于文本搜索查詢的 Elasticsearch 或 Solr。一些應(yīng)用程序通過同時(shí)寫入兩者來保持?jǐn)?shù)據(jù)庫同步。其他人定期將數(shù)據(jù)從 RDBMS 復(fù)制到文本搜索引擎?;诖思軜?gòu)構(gòu)建的應(yīng)用程序利用了多個(gè)數(shù)據(jù)庫的優(yōu)勢、RDBMS 的事務(wù)屬性以及文本數(shù)據(jù)庫的查詢能力。CQRS 概括了這種架構(gòu)。
微服務(wù)架構(gòu)在實(shí)現(xiàn)查詢時(shí)面臨三個(gè)常見挑戰(zhàn)。
這三個(gè)問題都可以通過使用 CQRS 模式來解決。
CQRS 的主要目標(biāo)是分離或分離關(guān)注點(diǎn)。因此,持久數(shù)據(jù)模型分為兩部分:命令端和查詢端。
創(chuàng)建、更新和刪除操作由命令端模塊和數(shù)據(jù)模型實(shí)現(xiàn)。查詢由查詢端模塊和數(shù)據(jù)模型實(shí)現(xiàn)。通過訂閱命令行發(fā)布的事件,查詢端保持其數(shù)據(jù)模型與命令端同步
使用 sagas,您可以在不使用分布式事務(wù)的情況下保持微服務(wù)架構(gòu)中數(shù)據(jù)的一致性。您為跨多個(gè)服務(wù)更新數(shù)據(jù)的每個(gè)命令定義一個(gè) saga。saga 是一系列本地事務(wù)。本地事務(wù)使用ACID事務(wù)框架更新單個(gè)服務(wù)中的數(shù)據(jù)。
Sagas 利用補(bǔ)償事務(wù)來回滾更改。假設(shè)saga的第n個(gè)交易失敗。必須撤消前 (n-1) 個(gè)事務(wù)。結(jié)果,總共 (n-1) 個(gè)補(bǔ)償事務(wù)將被啟動(dòng)以以相反的順序回滾更改。
為了實(shí)現(xiàn)一個(gè) saga,它需要邏輯來協(xié)調(diào)其步驟。一旦系統(tǒng)命令啟動(dòng)了一個(gè) saga,協(xié)調(diào)邏輯必須選擇并指示第一個(gè) saga 執(zhí)行本地事務(wù)。一旦該事務(wù)完成,編排協(xié)調(diào)就會(huì)選擇并調(diào)用下一個(gè) saga 參與者。這個(gè)過程一直持續(xù)到傳奇完成。如果本地事務(wù)失敗,saga 必須以相反的順序執(zhí)行補(bǔ)償事務(wù)。
編排?:在saga的參與者之間分配決策和排序。他們主要通過交換事件進(jìn)行通信。
編排?—一個(gè) saga 的協(xié)調(diào)邏輯應(yīng)該集中在一個(gè) saga 編排器類中。在 saga 期間,編排器向參與者發(fā)送命令消息,告訴他們應(yīng)該執(zhí)行哪些操作。

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流