我知道服務之間的同步通信是一種反模式,所以我正在爲我的用例尋找一個好的解決方案。微服務之間的同步REST通信的替代
我有這兩個服務:
Location Service
管理用戶位置Score Service
管理用戶評分
現在,我必須建立另一個服務:Users Feed Service
(UFS)。它必須將用戶返回給定位置,按照分數(降序)排序。
同步解決方案
- 給定的位置,UFS獲取從位置服務(REST)
- 對於他們中的每一個附近的用戶,它得到她的得分從分服務(REST)
- 最後,它對內存中的用戶進行排序並返回它們
什麼是替代方案?我一直在思考這樣的事情:
事件隊列解決方案
- UFS在數據庫中,或內存緩存或東西
- 它偵聽到的變化在隊列中來店用戶的位置和分數當得分服務和位置服務發佈時更新其數據
這樣,當客戶端請求用戶的feed時,用戶的feed服務不必執行任何網絡請求(它擁有必要的數據)
這是一個很好的解決方案嗎?我該如何改進它?它會擴展到大量的用戶嗎?
它會比同步解決方案的規模更好。隊列比API更好,處理量更大。但是,您必須克服排隊運輸基礎設施的複雜性。你確定你沒有過早優化嗎? –
也許我是。但我擔心未來的變化。從同步到基於隊列的系統的遷移可能很難。無論如何,我認爲你是對的。也許我試圖解決不存在的可伸縮性問題。謝謝 –