客戶端發(fā)現(xiàn):
使用客戶端發(fā)現(xiàn)模式時(shí),客戶端決定相應(yīng)服務(wù)實(shí)例的網(wǎng)絡(luò)位置,并且對(duì)請(qǐng)求實(shí)現(xiàn)負(fù)載均衡??蛻舳瞬樵兎?wù)注冊(cè)表,后者是一個(gè)可用服務(wù)實(shí)例的數(shù)據(jù)庫(kù);然后使用負(fù)載均衡算法從中選擇一個(gè)實(shí)例,并發(fā)出請(qǐng)求。
客戶端從服務(wù)注冊(cè)服務(wù)中查詢,其中是所有可用服務(wù)實(shí)例的庫(kù)。客戶端使用負(fù)載均衡算法從多個(gè)服務(wù)實(shí)例中選擇出一個(gè),然后發(fā)出請(qǐng)求。
服務(wù)端發(fā)現(xiàn):
客戶端通過負(fù)載均衡器向某個(gè)服務(wù)提出請(qǐng)求,負(fù)載均衡器查詢服務(wù)注冊(cè)表,并將請(qǐng)求轉(zhuǎn)發(fā)到可用的服務(wù)實(shí)例。如同客戶端發(fā)現(xiàn),服務(wù)實(shí)例在服務(wù)注冊(cè)表中注冊(cè)或注銷。
Spring Cloud實(shí)現(xiàn)服務(wù)治理
由于Spring Cloud為服務(wù)治理做了一層抽象接口,所以在Spring Cloud應(yīng)用中可以支持多種不同的服務(wù)治理框架,比如:Netflix Eureka、Consul、Zookeeper。
Spring Cloud Consul項(xiàng)目是針對(duì)Consul的服務(wù)治理實(shí)現(xiàn)。Consul是一個(gè)分布式高可用的系統(tǒng),它包含多個(gè)組件,但是作為一個(gè)整體,在微服務(wù)架構(gòu)中為我們的基礎(chǔ)設(shè)施提供服務(wù)發(fā)現(xiàn)和服務(wù)配置的工具。它包含了下面幾個(gè)特性: 服務(wù)發(fā)現(xiàn)、 健康檢查、 Key/Value存儲(chǔ)、 多數(shù)據(jù)中心。由于Consul自身提供了服務(wù)端,所以我們不需要像之前實(shí)現(xiàn)Eureka的時(shí)候創(chuàng)建服務(wù)注冊(cè)中心,直接通過下載consul的服務(wù)端程序就可以使用。
| Feature | Consul | zookeeper | etcd | euerka |
|---|---|---|---|---|
| 服務(wù)健康檢查 | 服務(wù)狀態(tài),內(nèi)存,硬盤等 | (弱)長(zhǎng)連接,keepalive | 連接心跳 | 可配支持 |
| 多數(shù)據(jù)中心 | 支持 | — | — | — |
| kv存儲(chǔ)服務(wù) | 支持 | 支持 | 支持 | — |
| 一致性 | raft | paxos | raft | — |
| cap | ca | cp | cp | ap |
| 使用接口(多語言能力) | 支持http和dns | 客戶端 | http/grpc | http(sidecar) |
| watch支持 | 全量/支持long polling | 支持 | 支持 long polling | 支持 long polling/大部分增量 |
| 自身監(jiān)控 | metrics | — | metrics | metrics |
| 安全 | acl /https | acl | https支持(弱) | — |
| spring cloud集成 | 已支持 | 已支持 | 已支持 | 已支持 |