分布式緩存(Redis)及消息隊列(Kafka)
設想一種情況,服務A頻繁的調用服務B的數據,但是服務B的數據更新的並不頻繁。
實際上,這種情況並不少見,大多數情況,用戶的操作更多的是查詢。如果我們緩存讀操作,這樣就可以節省服務間調用及訪問數據庫的成本,從而極大的縮短服務A的請求時間,從而改善性能。
我們發現,如果數據更新,服務B必須及時調用服務A,讓服務A刪除該數據的緩存。或者直接與緩存服務器,刪除該數據的緩存。但是,無論使用哪種方式,都會使服務A和服務B緊密耦合。如果我們使用異步方式,使用消息在服務之間傳遞,可以有效改善這種缺點。
服務B每次更新數據后,就發布一條消息到消息隊列,而服務A從消息隊列獲取消息,並刪除該數據的緩存。服務B不需要知道消息發給誰,服務A也不需要知道消息從哪來。
接下來幾節會使用Spring Cloud Stream搭建一個如圖所示的框架。
事件驅動架構(String Cloud Stream)
String Cloud可以輕松地將消息集成到基於Spring的微服務中,它是通過String Cloud Stream來實現的。String Cloud Stream是一個由注解驅動的框架,它允許開發者在String微服務架構中輕松地構建消息發布者和消費者。
String Cloud Stream中有4個組件涉及發布和接收消息:
發射器(source)
通道(channel)
綁定器(binder)
接收器(sink)