昨天簡介API gateway的時候, 描述了client無法動態得知服務位置的問題,而API gateway只是一個中間層用以解決client跟後端的微服務解耦,不須直接得知微服務位置,所以client到API gate way這一段基本上就是固定已知的,而API gateway到微服務這一段,則需要結合其他的設計來解決無法得知位置的問題,就是service discovery跟service registry。
Sevice discovery當然不是漫無目的去找服務,可以想像成有一個註冊表裡面記載著可用的服務,API gateway會根據client發來的request從註冊表中選出適合的微服務。而這註冊表裡面的註冊的服務是怎麼來的呢? 就交由服務啟動後自己到註冊表註冊,而當服務關閉則自己通知註冊表將註冊資料移除,這就是service registry。 Service registry通常也會具有即時監控服務是否可用的功能,甚至監控服務的流量負載,讓service discovery可以選用負載較小的服務做負載平衡。 題外話,將service registry整合到API Gateway也是一種做法,但由於service registry會有常態性的服務監控連線,整合在API gateway的話可能帶來較重的負荷,API gateway的職責也變得略為多了一點。