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