傳統的專案而言,伺服器端的服務例項的網路位址是相對固定的。而基於雲端、現代化的微服務服務例項的網路位址往往是動態更新的。由於伺服器端的服務例項擴充套件、維護、公升級,導致伺服器端服務例項的ip位址、埠發生變化,從而使得客戶端無法獲取服務例項新的位址進行正常的呼叫。
服務發現為解決此類問題的乙個解決方案,服務發現實時的獲取伺服器端服務例項的最新網路位址生成服務登錄檔,並提供給路由器或客戶端服務例項的可用資訊。服務登錄檔可以理解為乙個包含所有服務資訊的資料庫。
服務發現的兩種模式:客戶端服務發現 、 伺服器端服務發現。
客戶端服務發現指的是客戶端直接去服務登錄檔中查詢服務例項資訊,並對所有可用的服務例項進行負載均衡演算法獲得乙個最終的服務例項位址,去進行請求。
服務例項在服務啟動時向服務登錄檔註冊服務資訊,並定期傳送心跳來更新服務資訊。服務登錄檔會根據傳送來的心跳判斷服務是否正常執行,若多次收不到心跳則會剔除對應的服務例項。當然服務例項也可以像服務登錄檔登出服務資訊。
客戶端服務發現的優點:不需要額外配製路由器、負載均衡器,由客戶端直接查詢登錄檔並進行負載均衡。
缺點:需要客戶端與服務註冊繫結,客戶端要根據服務端的程式語言和框架 來實現服務發現邏輯。
eureka、zookeeper就是客戶端服務發現的方式
服務登錄檔是服務發現的核心部分,可以理解為乙個服務例項資訊的資料庫。服務登錄檔提供一組服務發現的rest api供客戶端查詢服務例項,伺服器端註冊、更新、登出服務例項。
post請求進行服務例項註冊
put請求進行定時傳送更新服務例項資訊(心跳)
delete請求進行服務例項登出
get請求進行服務例項查詢
服務註冊方式可以分為由服務例項自己註冊,稱為自註冊模式,也可以由第三方元件進行註冊,稱為第三方註冊模式。
自註冊模式的優點是服務例項自己進行註冊,無需第三方元件。缺點是服務例項與服務登錄檔耦合。
第三方註冊模式,服務例項則不需要向服務登錄檔註冊;相反,被稱為服務註冊器的另乙個系統模組會處理。服務註冊器會通過查詢部署環境或訂閱事件的方式來跟蹤執行例項的更改。一旦偵測到有新的可用服務例項,會向登錄檔註冊此服務。服務管理器也負責登出終止的服務例項。
優點是服務例項與服務登錄檔解耦,缺點是需要乙個高可用的第三方服務管理器元件。
參考:
為什麼要使用Spring Cloud
spring cloud是乙個整合了眾多開源的框架,利用spring boot的開發便利性實現了服務治理 服務註冊與發現 負載均衡 資料監控,rest api發布方式等,基本囊括了分布式框架所需要的所有功能。是一套易開放 易部署 易維護的分布式開發工具包。由於是基於rest的http協議通訊方式,它...
為什麼要選擇ISP 為什麼要選擇AHD
在影象傳輸中,我們為什麼選擇nextchip?為什麼要選擇isp?為什麼要選擇ahd?為什麼選擇北京冠宇銘通?這個問題我倒著回答各位 一 北京冠宇銘通科技是nextchip目前為止唯一一家正式官方授權 車載產品廠家之一 二 ahd和其他幾種傳輸方式相比,擁有自己的專利,其他幾家有專利的沒有幾個,如果...
為什麼要分詞
這裡不討論這個問題,我要說的為什麼要分詞?分詞是什麼!有人問 分詞有什麼作用啊?某人答 搜尋引擎要用到中文分詞,所以非常重要 這完全是廢話,說了等於沒說。搜尋引擎又為什麼要分詞呢?其實一般意思上指的分詞是比較狹隘的意思,指中文的詞是怎樣劃分的。因為中文沒有空格,所以要理解一篇文 章,你首先當然要切分...