問題內容
我最近讀了一篇文章《大規模微服務之間共享數據》
這張圖片是關于異步連接的。
如果我沒記錯的話,這張圖中的訂單頁面服務似乎能夠讀取來自 Kafka 的消息流,并且還可以讀取來自前端應用程序的 REST API 請求。
所以,我想知道是否可以編寫一個可以同時完成這兩個任務的服務:
讀取來自 Kafka 的消息流
讀取 REST API 請求
僅在 1 個服務中,例如在 Go 中。
這是否是一個好主意?
解決方法
是的,您絕對可以編寫一個從 Kafka 消費并公開 REST 端點的 Go 服務。然而,這不是一個理想的設計決策。
基于Kafka的流媒體系統允許生產者和消費者之間進行異步通信。然而,基于REST API的系統在調用者和被調用者之間進行同步通信。
同步和同步模式通信之間的可用性保證是不同的。基于 Kafka 流的系統將具有與 REST API 不同的可用性保證。在流式系統中,我們關注的是消息處理的吞吐量,而在端到端的同步通信中,延遲是主要關注點(你不想讓調用者等待很長時間才能得到結果) .
如果我們將這兩種類型的系統放在一個服務中,就很難了解該服務的可用性。此外,服務的異步部分或同步部分可能會在另一方的嘈雜鄰居中發揮作用,從而使服務不可用。
因此,一般來說,建議將基于 REST 的 API 和 Kafka 流作為兩個獨立的服務。