不像monolithic architecture可以藉由引入namespace來輕易地調用其他模組的方法或API,微服務之間的溝通會是一個非常重要的實作與設計課題。微服務的技術異質性建立於服務與服務之間的低依賴,只靠服務間的inter-process communication來調用服務,像是HTTP, AMQP, TCP之類獨立於服務的communication protocol。
現在最普遍的方式就是 restful web api,但只靠rest在使用上仍有不足夠的地方,來看一下大概的使用分類。以使用上情境的需求來說,一共有兩種分類:
• 同步與非同步
• 一對一與一對多
同步vs非同步
同步就是最典型的Http、RPC或是即時性的Websocket(SignalR), 非同步的通訊方式通常會是利用RabbitMQ、Kafka、ActiveMQ。使用情境上,以客戶端到API Gateway的話 會採用同步通訊,
而需要互相等待服務處理資料或是微服務之間的通訊的情況則盡量使用非同步通訊,避免阻塞,同時可以增加強健度,避免因為一個query中所需要用到的某個服務效能變慢或是服務停止,拖垮整體服務的效能。
下面是微軟電子書的範例,在實務設計上應該避免很長的http request/response鍊出現(或是太過依賴於同步通訊)