當前位置:編程學習大全網 - 源碼下載 - 微服務架構之服務註冊與發現(壹)

微服務架構之服務註冊與發現(壹)

壹、服務註冊中心的由來

假如沒有服務註冊中心,我們會幹些什麽事情呢?

在傳統行業的項目架構中以下的方案最為常見了:

這種架構開發、部署都是最簡單的,壹般適用於中小企業訪問量並不是太多的情況下,各個系統服務壹臺機器就搞定了。系統之間的調用也是拿到對方的IP+PORT直接連接。

接下來可能因為應用B開始訪問量大了,單臺機器已經不能滿足我們的需求,於是壹些反向代理工具應運而出,其中比較常見的有Apache、Nigix,架構演變為:

相比之前的應用B的單臺機器訪問,這種nginx代理的方式減輕了服務器的壓力,但是可能會出現Nginx掛了,那麽整個服務也不可用,於是又來了這麽壹套架構:

這樣看方案算是完美了吧。然後事情並不是想象的那麽壹帆風順,這還只是應用A調用壹個應用B,如果應用A調用的可能是應用B、C、D、E...,這種完全就不知道他後面到底還想幹嘛,這種架構看似可以,但是絕對會累死運維的(nginx的配置將會非常混亂,直接導致運維不幹了)。

服務註冊中心幹些什麽事情呢?

上面提到的那種靠人力(主要是運維幹的事情)比較繁瑣,還不好維護,有這麽幾點不方便:應用服務的地址變了、雙十壹搞活動服務器新增等等。那麽我們可以有這麽的壹種架構:

服務註冊中心主要是維護各個應用服務的ip+port列表,並保持與各應用服務的通訊,在壹定時間間隔內進行心跳檢測,如果心跳不能到達則對服務IP列表進行剔除,並同時通知給其它應用服務進行更新。同樣要是有新增的服務進來,應用服務會向註冊中心進行註冊,服務註冊中心將通知給其它應用進行更新。每個應用都有需要調用對應應用服務的地址列表,這樣在進行調用時只要處理客戶負載雜均衡即可。

二、微服務註冊中心

1.Zookeeper

ZooKeeper是壹個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby壹個開源的實現,是Hadoop和Hbase的重要組件。它是壹個為分布式應用提供壹致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。

上面的話直接摘抄百度百科的內容,國內很多公司做分布式開發最初的選型大部分都是采用dubbo框架。dubbo框架註冊中心主要使用zookeeper。zookeeper服務端與客戶端的底層通訊為netty。zookeeper采用CAP理論中的CP,壹般集群部署最少需要3臺機器。

2.Euraka

先來看壹下euraka的架構圖:

Register:服務註冊

當Eureka客戶端向Eureka Server註冊時,它提供自身的元數據,比如IP地址、端口,運行狀況指示符URL,主頁等。

Renew:服務續約

Eureka客戶會每隔30秒發送壹次心跳來續約。 通過續約來告知Eureka Server該Eureka客戶仍然存在,沒有出現問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續約,它會將實例從其註冊表中刪除。 建議不要更改續約間隔。

Fetch Registries:獲取註冊列表信息

Eureka客戶端從服務器獲取註冊表信息,並將其緩存在本地。客戶端會使用該信息查找其他服務,從而進行遠程調用。該註冊列表信息定期(每30秒鐘)更新壹次。每次返回註冊列表信息可能與Eureka客戶端的緩存信息不同, Eureka客戶端自動處理。如果由於某種原因導致註冊列表信息不能及時匹配,Eureka客戶端則會重新獲取整個註冊表信息。 Eureka服務器緩存註冊列表信息,整個註冊表以及每個應用程序的信息進行了壓縮,壓縮內容和沒有壓縮的內容完全相同。Eureka客戶端和Eureka 服務器可以使用JSON / XML格式進行通訊。在默認的情況下Eureka客戶端使用壓縮JSON格式來獲取註冊列表的信息。

Cancel:服務下線

Eureka客戶端在程序關閉時向Eureka服務器發送取消請求。 發送請求後,該客戶端實例信息將從服務器的實例註冊表中刪除。該下線請求不會自動完成,它需要調用以下內容:

DiscoveryManager.getInstance().shutdownComponent();

Eviction 服務剔除

在默認的情況下,當Eureka客戶端連續90秒沒有向Eureka服務器發送服務續約,即心跳,Eureka服務器會將該服務實例從服務註冊列表刪除,即服務剔除。

自我保護機制:

既然Eureka Server會定時剔除超時沒有續約的服務,那就有可能出現壹種場景,網絡壹段時間內發生了 異常,所有的服務都沒能夠進行續約,Eureka Server就把所有的服務都剔除了,這樣顯然不太合理。所以,就有了 自我保護機制,當短時間內,統計續約失敗的比例,如果達到壹定閾值,則會觸發自我保護的機制,在該機制下, Eureka Server不會剔除任何的微服務,等到正常後,再退出自我保護機制。自我保護開關(eureka.server.enableself-preservation: false)

3.Consul

consul推薦的架構圖:

Consul不像Euraka的部署那麽簡單,他是go語言開發的,需要運維單獨部署,有提供java的客戶端連接,采用的是CAP的CP。

4.Nacos

Euraka是Spring Cloud Netflix早期版本中推薦使用的,後來euraka1.0版本不再維護,euraka2.0已經閉源,導致很多新項目基於Spring Cloud Netflix 開發的選型變遷為Consul.

Nacos是阿裏開源的服務註冊中心,它可以與spring cloud aliaba集成使用。

Nacos的官方介紹:

Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了壹組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。

Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現代應用架構(例如微服務範式、雲原生範式)的服務基礎設施。

Nacos 地圖

Nacos 生態圖

如 Nacos 全景圖所示,Nacos 無縫支持壹些主流的開源生態,例如

Spring Cloud

Apache Dubbo and Dubbo Mesh TODO

Kubernetes and CNCF TODO

三、服務註冊與發現技術選型

以下是來自網上的壹個分享:

除了上述的幾種以外,筆者更推薦使用Nacos作為服務註冊中心。

推薦理由:

Nacos服務註冊表結構Map<namespace, Map<group::serviceName, Service>>采用多層次Map結構,控制的顆粒度更細,支持金絲雀模式發布,心跳同步機制也更快速,服務更新更及時。

  • 上一篇:linux 機房運維技術都有哪些方面
  • 下一篇:metashop跨境電商靠譜嗎?
  • copyright 2024編程學習大全網