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