微服務的註冊發現

前言


       服務註冊發現是分佈式服務中定位服務使用服務的重要機制,也是服務集羣中的重要機制。在我們之前瞭解的微服務架構中,服務的註冊發現同樣有着重要的作用。

服務註冊、服務發現

       註冊發現機制主要是在分佈式集羣中給服務提供的服務定位定位和服務負載均衡機制,自身有兩個有用的步驟。
服務註冊——該步驟存儲的信息至少包括正在運行的服務的主機和端口信息。
服務發現——該步驟允許其他用戶可以發現在服務註冊階段存儲的信息。常規的服務發現機制有兩種一種是客戶端服務發現(client-side discovery)如rocketMQ,客戶端主動詢問NameServer發現可用的broker,一種是服務端服務發現(server-side discovery),如dubbo,nginx服務端將客戶端請求分配到具體的服務上。

常見的服務註冊發現組件

registrator
registrator 通過檢查容器在線或者停止運行狀態自動註冊和發現服務,它目前支持 etcd、consul、zookeeper 和 SkyDNS 2。鏈接傳送。它通常會和下面的工具配合使用,實現自動化服務註冊功能。可以理解爲真正的具有自動註冊發現功能的組件,其他的etcd,consul,zookeeper和sykDNS,只能用來維護和同步服務註冊信息是構建服務發現系統的組件。

zookeeper
        zookeeper是Hadoop和Hbase的重要組件,它非常成熟、穩定,有比較多的大公司在使用一個高性能、分佈式應用程序協調服務,是Google的Chubby一個開源的實現。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等,因爲能夠維護完整一直的服務註冊信息,可用於構建服務發現系統。

etcd
       etcd 是一個採用 HTTP 協議的健/值對存儲系統,它是一個分佈式和功能層次配置系統,可用於構建服務發現系統。其很容易部署、安裝和使用,提供了可靠的數據持久化特性。它是安全的並且文檔也十分齊全。它需要搭配一些第三方工具纔可以提供服務發現功能。

consul
       Consul 是強一致性的數據存儲,使用 gossip 形成動態集羣。它提供分級鍵/值存儲方式,不僅可以存儲數據,而且可以用於註冊器件事各種任務,從發送數據改變通知到運行健康檢查和自定義命令,具體如何取決於它們的輸出。consul web 界面,用戶可以查看所有的服務和節點、監控健康檢查狀態以及通過切換數據中心讀取設置鍵/值對數據。

一種微服務的註冊發現架構

Docker+Consul+Nginx+Registrator實現服務註冊與發現

Docker用於容器的創建,Nginx通過監控Consul templete來發現服務,Registrator用於暴露端口IP和端口給consul,Consul agent 用於監控節點變化,Consul集羣用於維護IP端口註冊表,並給Nginx提供服務的發現機制。

1、Consul agent server作爲高可用通過Consul Template實時監測Node的變化。

2、Node如果變化就觸發渲染模板動作,執行相應命令。

3、如圖 如果Node01 docker創建了一個nginx web容器隨機暴露了一個24123端口,Registrator會監聽到這個事件之後,會將宿主級IP與暴露的端口註冊到本地的Consul agent client。

4、Consul agent Clinet 再將這個請求轉發到 Consul agent service中。

5、Nginx讀取 Consul templete 爲請求分配對於的服務節點。


總結:總的來說,服務的註冊發現也不是什麼新鮮事物,基本上分爲三個部分,服務的暴露,同步到註冊中心,讀取配置中心的信息。我們在挑選服務註冊發佈組件的時候更多的是考慮,服務的健康檢查,災備,斷流,擴容等。我們可以考慮一下像rocketMQ或者tomcat這樣不需要zk之列的同步組件,但是自身提供了註冊中心和服務探活,也是可以完美實現服務註冊發現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章