java編程——微服務架構之註冊中心

在微服務架構中,註冊中心是核心的基礎服務之一。在微服務架構流行之前,註冊中心就已經開始出現在分佈式架構的系統中。Dubbo是一個在國內比較流行的分佈式框架,被大量的中小型互聯網公司所採用,Dubbo是一個非常實用的框架,提供了比較完善的服務治理功能,而服務治理的實現主要依靠的就是註冊中心。

1 什麼是註冊中心

註冊中心可以說是微服務架構中的”通訊錄“,它記錄了服務和服務地址的映射關係。在分佈式架構中,服務會註冊到這裡,當服務需要調用其它服務時,就到這裡找到服務的地址,進行調用。

java編程——微服務架構之註冊中心

舉個現實生活中的例子,比如說,我們手機中的通訊錄的兩個使用場景:

  1. 當我想給張三打電話時,那我需要在通訊錄中按照名字找到張三,然後就可以找到他的手機號撥打電話。
  2. 李四辦了手機號,那麼他把手機號告訴我,我把李四的號碼存進通訊錄,後續,我就可以從通訊錄找到他。

上述兩個場景就是我們在微服務架構中常常提到的:

  1. 服務發現
  2. 服務註冊

2 為什麼需要註冊中心

瞭解了什麼是註冊中心,那麼我們繼續談談,為什麼需要註冊中心。

在分佈式系統中,我們不僅僅是需要在註冊中心找到服務和服務地址的映射關係這麼簡單,我們還需要考慮更多更復雜的問題:

  1. 服務註冊後,如何被及時發現
  2. 服務宕機後,如何及時下線
  3. 服務如何有效的水平擴展
  4. 服務發現時,如何進行路由
  5. 服務異常時,如何進行降級
  6. 註冊中心如何實現自身的高可用

這裡問題的解決都依賴於註冊中心。簡單看,註冊中心的功能有點類似於DNS服務器或者負載均衡器,而實際上,註冊中心作為微服務的基礎組件,可能要更加複雜,也需要更多的靈活性和時效性。

3 常見的註冊中心

結合開發中常用的微服務架構體系,再看註冊中心。以下主要以Java體系中常用的微服務框架為例進行說明。

3.1 Dubbo中的註冊中心

Dubbo支持多種註冊中心的實現,常用的是:

  • Redis
  • Zookeeper

此處,可以看到,以上的實現主要是為了集中存儲服務的信息。而這些組件本身就可以做到高性能和高可用。

java編程——微服務架構之註冊中心

Dubbo官方架構圖

在Dubbo架構圖中,可以看到註冊中心(Registry)位於頂端,所有的服務治理相關的操作都圍繞它進行。服務提供者(Provider)註冊到註冊中心,服務消費者(Comsumer)到註冊中心訂閱,同時,註冊中心中的變更也會通知服務消費者。

3.2 SpringCloud中的註冊中心

目前,SpringCloud可以說是最流行的微服務架構,SpingCloud整個體系功能完備,與Spring框架完美契合,開箱即用,極大降低了落地微服務架構的開發成本。在SpringCloud中,也是支持多種註冊中心的:

  • Spring Cloud Netflix Eureka
  • Spring Cloud Zookeeper
  • Spring Cloud Consul

以上三種,最常用的主要是Eureka,官方是這樣定義的:

Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.

與Dubbo對於服務註冊的抽象有所不同,Eureka使用的是C/S架構:

  1. Eureka Server,註冊中心
  2. Eureka Client,服務消費者和服務提供者

而且,Eureka支持多節點的部署,從而保證高可用。生產環境中,常用的方式是部署兩臺節點,做成一個P2P的集群。

java編程——微服務架構之註冊中心


分享到:


相關文章: