服務(wù)發(fā)現(xiàn)與注冊 Eureka 設(shè)計(jì)理念,硬知識(shí)了解多少?
1. AP 優(yōu)于CP

· eureka是在部署AWS的背景下面設(shè)計(jì)的,其設(shè)計(jì)認(rèn)為,在云端,特別是大規(guī)模部署情況下面,失敗是不可以避免的,可能是因?yàn)閑ureka自身部署失敗或者網(wǎng)絡(luò)分區(qū)等情況導(dǎo)致服務(wù)不可用,這些問題是不可以避免的,要解決這個(gè)問題就需要eureka在網(wǎng)絡(luò)分區(qū)的時(shí)候,還能夠正常提供服務(wù),因此eureka選擇滿足availability這個(gè)特性。
· eureka選擇了A也就必須放棄C,也就是說在eureka中采用最終一致性的方式來保證數(shù)據(jù)的一致性問題,因此實(shí)例的注冊信息在集群的所有節(jié)點(diǎn)之間的數(shù)據(jù)都不是強(qiáng)一性的,需要客戶端能支持負(fù)載均衡算法及失敗重試等機(jī)制。

2. Peer to Peer 架構(gòu)
一般而言在分布式系統(tǒng)的數(shù)據(jù)有多個(gè)副本之間的復(fù)制方式,可以分為主從復(fù)制和對等復(fù)制
主從復(fù)制 Master-Slave模式
一個(gè)主副本和多個(gè)從副本,所有數(shù)據(jù)的寫操作都是提交到主副本,最后由主副本更新到其他的從副本(常采用異步更新),通常寫是整個(gè)系統(tǒng)的瓶頸所在。
對等復(fù)制 即Peer to Peer模式
副本之間不分主從,任何的副本都可以接受寫數(shù)據(jù),然后副本之間進(jìn)行數(shù)據(jù)更新。在對等復(fù)制中,由于每一個(gè)副本都可以進(jìn)行寫操作,各個(gè)副本之間的數(shù)據(jù)同步及沖突處理是一個(gè)比較難解決的問題。
3. Zone 及 Region 設(shè)計(jì)
· 使用region來代表一個(gè)獨(dú)立的地理區(qū)域,比如us-east-1、us-east-2,、us-west-1等。在每一個(gè)region下面還分為多個(gè)AvailabilityZone,一個(gè)region對應(yīng)多個(gè)AvailabilityZone,不同的region之間相互隔離。默認(rèn)情況下面資源只是在單個(gè)region之間的AvailabilityZone之間進(jìn)行復(fù)制,跨region之間不會(huì)進(jìn)行資源的復(fù)制。
· AvailabilityZone看成是region下面的一個(gè)一個(gè)機(jī)房,各個(gè)機(jī)房相對獨(dú)立,主要是為了region的高可用考慮的,一個(gè)region下面的機(jī)房掛了,還有其他的機(jī)房可以使用。
· 一個(gè)AvailabilityZone可以設(shè)置多個(gè)server實(shí)例,他們之間構(gòu)成peer節(jié)點(diǎn),然后采用peer to peer的復(fù)制模式進(jìn)行數(shù)據(jù)復(fù)制。
4. Self Preservation 設(shè)計(jì)
在分布式系統(tǒng)設(shè)計(jì)中,通常需要對應(yīng)用實(shí)例的存活進(jìn)行健康檢驗(yàn),這里比較難處理的就是網(wǎng)絡(luò)偶爾抖動(dòng)或者短暫不可用而造成的誤判。因此eureka設(shè)計(jì)了self preservation機(jī)制。server和client之間有一個(gè)租約,client定期發(fā)送心跳來維護(hù)這個(gè)租約,表示心跳還活著,eureka通過當(dāng)前注冊的實(shí)例數(shù)量,去計(jì)算每分鐘應(yīng)用從應(yīng)用實(shí)例接受到的心跳數(shù)量,如果近一分鐘接受到的租約的次數(shù)小于等于指定的閾值,則關(guān)閉租約失效剔除,禁止定時(shí)任務(wù)剔除失效的實(shí)例,從而保護(hù)注冊信息。
自我保護(hù)模式的設(shè)計(jì)哲學(xué)是:在不確定節(jié)點(diǎn)是否可用的情況下,盡可能保留節(jié)點(diǎn)!