天天看點

微服務注冊最全詳解(圖文全面總結)

微服務注冊是微服務的核心元件,常見的有:ZooKeeper,Consul,Nacos,Eureka...等等,下面我就重點來詳解微服務注冊@mikechen

微服務注冊

服務注冊指的是将自身服務資訊注冊到注冊中心,服務資訊包括:服務所在主機IP、服務的端口号Port、暴露服務協定等資訊。

如下圖所示:

微服務注冊最全詳解(圖文全面總結)

圖檔

Service B 把自己注冊到注冊中心,這就叫 服務注冊。

服務注冊作用

服務注冊就是維護一個登記簿,它管理系統内所有的服務位址。

當新的服務啟動後,它會向登記簿交待自己的位址資訊,服務的依賴方直接向登記簿要服務位址就行了。

同時服務注冊還要負責一件事情,服務狀态的維護,假如一個服務突然down掉,它應該能夠感覺,并把down掉的服務摘掉,然後主動或被動的把這個資訊告知服務消費方。

服務注冊實作

服務注冊有兩種形式:用戶端注冊和代理注冊。

1.用戶端注冊

用戶端注冊是服務自己要負責注冊與登出的工作,當服務啟動後注冊線程向注冊中心注冊,當服務下線時登出自己。

微服務注冊最全詳解(圖文全面總結)

圖檔

這種方式的缺點是注冊登出邏輯與服務的業務邏輯耦合在一起,如果服務使用不同語言開發,那需要适配多套服務注冊邏輯。

2.代理注冊(第三方注冊)

代理注冊也叫第三方注冊,指的是一個單獨的代理服務負責注冊與登出。

當服務提供者啟動後以某種方式通知代理服務,然後代理服務負責向注冊中心發起注冊工作。

微服務注冊最全詳解(圖文全面總結)

圖檔

第三方注冊的優點非常明顯,就是服務跟服務系統資料庫是分離的,不需要為每種程式設計語言和架構完成服務注冊邏輯,替代的,服務執行個體是通過一個集中化管理的服務進行管理的。

這種方式的缺點是多引用了一個代理服務,并且代理服務需要配置管理一個高可用的系統。

微服務注冊架構

當下用于服務注冊的工具非常多ZooKeeper,Consul,Etcd, 還有Netflix家的Eureka等等。

1.ZooKeeper

這裡服務注冊的實作會運用Zookeeper的watch機制來實作。

比如:用戶端注冊監聽他關心的目錄節點,當目錄節點發生變化(資料改變、被删除、子目錄節點增加删除)時,Zookeeper會通知用戶端。

client端會對某個znode建立一個watcher事件,當該znode發生變化時,zk會主動通知watch這個znode的client,然後client根據znode的變化來做出業務上的改變等。

如下圖所示:

微服務注冊最全詳解(圖文全面總結)

圖檔

2.Consul

Consul 是 HashiCorp 公司推出的開源工具,用于實作分布式系統的服務發現與配置。

Consul架構,如下圖所示:

微服務注冊最全詳解(圖文全面總結)

圖檔

圖檔上 datacenter 分成上下兩個部分, 但是這兩個部分又不是完全隔離的,他們之間通過 WAN GOSSIP 進行封包互動。

3.Etcd

Etcd是使用Go語言開發的一個開源的、高可用的分布式key-value存儲系統,可以用于配置共享和服務的注冊和發現。

Etcd架構如下圖所示:

微服務注冊最全詳解(圖文全面總結)

圖檔

從 架構圖中我們可以看到etcd 主要分為四個部分:

  • HTTP Server

用于處理使用者發送的 API 請求,以及其它 Etcd節點的同步與心跳資訊請求。

  • Store

用于處理 Etcd支援的各類功能的事務,包括資料索引、節點狀态變更、監控與回報、事件處理與執行等等。

  • Raft

Raft 是強一緻性算法的具體實作,是 Etcd的核心。

  • WAL

Write Ahead Log,預寫日志系統,是 Etcd的資料存儲方式,Etcd就通過 WAL 進行持久化存儲,這個與MySQL持久化存儲機制類似。

Write-Ahead Logging 是資料庫中一種高效的日志算法,對于非記憶體資料庫而言,磁盤I/O操作是資料庫效率的一大瓶頸。

在相同的資料量下,采用WAL日志的資料庫系統在事務送出時,磁盤寫操作隻有傳統的復原日志的一半左右,大大提高了資料庫磁盤I/O操作的效率,進而提高了資料庫的性能。

4.Eureka

Eureka 作為 Spring Cloud 微服務架構的注冊中心,與之對應的是 Dubbo 架構的ZooKeeper。

Eureka基本架構,如下圖所示:

微服務注冊最全詳解(圖文全面總結)

上圖簡要描述了Eureka的基本架構,由3個角色組成:

1.Service Provider: 暴露服務的服務提供方。

2)Service Consumer:調用遠端服務的服務消費方。

3)EureKa Server: 服務注冊中心和服務發現中心。

不論使用那種工具,服務注冊一定是要確定高可用的,否則重則的是所有的服務都沒法調用,輕則新的服務不能上線,是以一般都會考慮本地有緩存服務位址等方案。

更多資訊,點選全場景直播解決方案-航天雲網解決方案

繼續閱讀