上一篇講解后端為什么要用rpc進行通信而不是http的文章中,提到了rpc相比較http,除了省流量外,其實就是在http上封裝了服務發(fā)現(xiàn)和自動重試等面向服務的高級特性,那什么是服務發(fā)現(xiàn)呢,服務發(fā)現(xiàn)的實現(xiàn)原理是什么呢?這篇文章會進行解釋
為什么要使用服務發(fā)現(xiàn)?
我們可以想象一下,當我們需要遠程的訪問REST API或者Thrift API時,我們必須得知道服務的網(wǎng)絡地址(IP Address和port)。傳統(tǒng)的應用程序都是運行在固定的物理機器上,IP Address和端口號都是相對固定的??梢酝ㄟ^配置文件方式來實現(xiàn)不定期更新的Ip Address和端口號。但是,在基于云的微服務應用中,這是一個非常難以解決的問題。
在基于云的微服務應用中,服務實例的網(wǎng)絡地址(IP Address和Port)是動態(tài)分配的,并且由于系統(tǒng)的auto-scaling, failures 和 upgrades等因數(shù),一些服務運行的實例數(shù)量也是動態(tài)變化的。因此,客戶端代碼需要使用一個非常精細和準確的服務發(fā)現(xiàn)機制。
有兩種主要的服務發(fā)現(xiàn)方式:客戶端發(fā)現(xiàn)(client-side discovery)和服務器端發(fā)現(xiàn)(server-side discovery)。