2017-01-03 236 views
4

我正在開發一個帶有微服務架構的網站,並且每個服務都擁有一個數據庫。數據庫存儲微服務所需的數據。如何將數據庫與微服務(和新服務)同步?


PostVideo服務需要的用戶信息,所以無論是服務的訂閱的NEW_USER_EVENT

NEW_USER_EVENT將在有新用戶註冊時觸發。

enter image description here

一旦服務收到NEW_USER_EVENT,他們把傳入的用戶信息,每一個自己的數據庫。所以他們可以在不詢問User服務的情況下做事。

enter image description here

到目前爲止好。但問題來了:

  • 如果我要創建一項新服務該怎麼辦?我如何獲得註冊用戶信息並將其放入新服務中?

也許我可以從現有的服務中獲取信息。但是這些事件是由消息隊列推動的(NSQ)。

如果我要從其中一個微服務中複製數據,我如何確定哪個服務具有最新的用戶信息? (因爲有些服務還沒有收到最新的事件

enter image description here


閱讀更多:

The Hardest Part About Microservices: Your Data

Intro to Microservices, Part 4: Dependencies and Data Sharing

+0

爲什麼「帖子」和「視頻」以及其他服務需要了解用戶創建?如果請求到達與那些服務從未聽說過的用戶有關,則他們不需要驗證用戶是否存在......他們可以簡單地假定用戶必須確實存在,否則他們將不會收到與用戶。 –

+0

@Michael這些服務收到了'username',他們會將它轉換爲'user_id',而不要求'User'服務進行鬆耦合。當新用戶註冊後,服務會在每個數據庫中存儲'username-userId'地圖,以便他們可以在自己的服務中進行轉換。 –

+0

我知道這個問題可以通過使用JWT來解決,但是我仍然有類似的東西,而不僅僅是關於用戶需要轉換的東西。 –

回答

3

如果我要創建一項新服務,該怎麼辦?我如何獲得註冊用戶信息並將其放入新服務中?

你必須重播所有這個新服務從一開始就訂閱的事件(你應該有一個「事件存儲器」來保存你的應用程序中已經發生的所有事件)。而且,當從最近的時間開始並且回溯時重放事件時,您可以放置​​更智能的邏輯。這樣,您將能夠首先恢復最有價值的數據。只要小心處理相互依存的事件。

數據源:消息隊列(NSQ)推送事件,如果要從其中一個微服務中複製數據,如何確保複製源具有最新的用戶信息?

你是不是談論做備份吧?

除了備份之外,在事件驅動系統中,人們通常不會以傳統方式逐行復制數據。相反,他們只是從一開始就從事件存儲中重放事件,並將這些事件提供給新服務(或新實例)的事件處理程序。因此,新服務最終將與系統的其他部分保持一致。

+0

要說清楚,你說的是我相信的事件採購,這不一定與微服務架構相關聯? –

+0

你是對的,Yami指出他正在使用NEW_USER_EVENT在服務之間同步數據,這意味着使用事件源技術。 – IlliakaillI

+0

我可能用錯誤的方式來描述我的最後一個問題,但你的答案仍然有助於我理解一些額外的東西。我在談論:也許我可以從現有的服務獲取註冊的用戶信息,但由於我使用「消息隊列」來同步用戶信息,我無法確定哪個服務具有最新的用戶信息(*因爲某些服務還沒有收到'NEW_USER_EVENT'事件*)。 –

相關問題