我正在尋求一個設計問題的答案,我在這個問題上沒有找到任何文獻的答案。請允許我解釋用例,我的解決方案,並徵求您作爲主題專家的意見。在微服務之間共享數據
用例: 我們有幾個微服務,都返回來自不同業務領域的某種形式的內容。我們使用Spring Cloud Netflix,因此網關服務將流量路由到內容服務。這些服務中的一部分(如果不是全部)需要從請求派生的數據,並且是不可變的。一個簡單的例子是語言環境,但也有其他專有信息。
解決方案: 我目前獲得的共享數據的網關服務,並在NoSQL的數據庫具有獨特的鍵作爲持續JSON。然後,我在將請求路由之前將該密鑰添加爲請求標頭。我有一個內容服務在構建時包含的共享庫,它包含一個Spring bean,它從請求頭中讀取密鑰,使用密鑰讀取存儲的數據並初始化它自己。這使得內容服務可以在不知道底層機制的情況下訪問共享數據(通過簡單地注入前面提到的bean)。 如果內容服務調用另一個內容服務,它負責將唯一密鑰添加爲請求標頭。
辯論: 我與同事們的辯論是,爲此目的使用共享數據存儲是否合適。我認爲服務將域特定的數據泄漏給其他服務是不好的,但是所討論的數據並不是域特定的,所以擁有共享數據庫並傳遞密鑰沒有任何問題。另一種方法是通過所有我認爲是多餘的共享數據。
你的想法是什麼?
編輯:我看到有人投來關閉的問題。除非他們能夠指出我討論微服務之間數據共享的參考,否則這種警務是妨礙有意義討論的障礙。並非每個問題都是布爾型的是/否答案,有些則需要更深入的思考。
我想說一個服務應該擁有和管理數據存儲。數據存儲本身不應該共享。 – duffymo
@duffymo數據認證的結果呢?你認爲每個服務應該解析一個JWT令牌來提取相同的信息,或者它應該被完成一次並存儲以備後用?我爲共享數據創建抽象沒有任何問題,這就是我的問題中的Spring bean正在做的事情。 –
我相信VTC與這張貼在StackOverflow上相關。 [Programmers SE]的設計參數[更適合](http://meta.stackexchange.com/questions/124867/where-should-i-ask-software-architecture-design-questions)(http://程序員.stackexchange.com /)。 – Mitch