背景
不同服務(wù)之間通常需要相互調(diào)用。在單體應(yīng)用程序當中,服務(wù)間通過語言層級的方法或者過程實現(xiàn)相互調(diào)用。在傳統(tǒng)的分布式系統(tǒng)部署下,服務(wù)在固定并且已知的位置(主機與端口)運行,從而確保各服務(wù)可利用HTTP/REST或者某種RPC機制進行相互調(diào)用。然而,現(xiàn)代化微服務(wù)應(yīng)用程序中通常在虛擬化或者容器化環(huán)境中運行,在這樣的環(huán)境中服務(wù)的實例數(shù)量和位置是動態(tài)變化的。
因此,要想實現(xiàn)客戶端向動態(tài)變化的一組服務(wù)端實例發(fā)送請求,我們必須采用新的機制。
問題
服務(wù)的客戶端——包括API網(wǎng)關(guān)或者其它服務(wù)——如何才能獲取服務(wù)端實例的位置?
需求
方案
在向某一服務(wù)發(fā)送請求時,客戶端會通過查詢 Service Registry,即服務(wù)注冊表,以獲取該服務(wù)實例的位置。該注冊表中包含全部服務(wù)的位置。
以下示意圖展現(xiàn)了這種模式的結(jié)構(gòu)。
而這正是微服務(wù)底盤框架的典型處理方式。
示例
Netflix OSS正是客戶端發(fā)現(xiàn)機制的典型代表:
結(jié)果
客戶端發(fā)現(xiàn)機制擁有以下優(yōu)勢:
客戶端發(fā)現(xiàn)機制亦存在著以下弊端:
相關(guān)模式
原文鏈接?