簡體   English   中英

如何訪問我的微服務不擁有的數據?

[英]How do I access data that my microservice does not own?

A 有一個微服務需要一些它不擁有的數據。 它需要另一個服務擁有的只讀數據緩存。 我正在尋找如何實現這一點的指導。

我不希望我的微服務調用另一個微服務。 我在連接中使用了太多數據,無法成功。 此外,我不希望我的服務依賴於另一個服務(可能依賴於另一個......)。

目前,我正在將事件發布到隊列。 然后我的服務訂閱並維護數據的副本。 我遇到了與源系統保持同步的問題。 另外,我們的 DBA 抱怨數據重復。 我沒有看到很多關於這個主題的信息。

有這種模式嗎? 叫什么名字?

首先,有幾種方法可以共享數據,您提到了其中兩種。

  1. 一個服務在需要時調用另一個服務來獲取數據。 這很好,因為您可以獲得最新數據,而且消費服務不需要額外的管理。 問題是,如果您調用它的次數過多,那么其他服務性能可能會受到影響。

  2. 另一種解決方案是使用 Pub/Sub 機制在消費服務中維護該數據的本地副本。

    • 根據您的要求和架構,您可以將其保存在使用服務的實際數據庫或某種類型的緩存(持久緩存)中
    • 這里的缺點是一致性。 使用分布式架構時,您不會獲得強一致性,但您必須依賴最終一致性。
  3. 另一種解決方案是,根據您的要求,您可以分離出需要加入某些單獨服務的表。 這取決於您的用例。

  4. 如果您仍然想要一致性,那么在第一次服務調用更新數據然后發布時。 而是創建一些中介組件,它將以同步方式調用兩個服務。 當您現在嘗試在分布式系統上實現事務時,事情變得復雜了。

還有一點,當產品圍繞微服務架構構建時,它不僅僅是技術上的遷移,作為一個組織和一個團隊,你的團隊需要了解在 Monolith 中有效的東西,而在微服務中是不一樣的。 DBA 需要了解這部分,並且在微服務中跨模式的數據復制(其他方面,如代碼)更喜歡可重用性。

最后但同樣重要的是,如果總是需要調用另一個服務來獲取數據,那么檢查服務邊界也是值得的。 有時服務可能需要合並為保持在一起所需的業務功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM