Spring Cloud注冊中心

1、 什么是注冊中心

注冊中心可以說是微服務架構中的”通訊錄“,它記錄了服務和服務地址的映射關系。在分布式架構中,服務會注冊到這里,當服務需要調(diào)用其它服務時,就到這里找到服務的地址,進行調(diào)用。
服務提供者provider: 啟動的時候向注冊中心上報自己的網(wǎng)絡信息。
服務消費者consumer: 啟動的時候向注冊中心上報自己的網(wǎng)絡信息,拉取provider的相關網(wǎng)絡信息。

2 、為什么需要注冊中心

微服務應用和機器越來越多,調(diào)用方需要知道接口的網(wǎng)絡地址,如果靠配置文件的方式去控制網(wǎng)絡地址,對于動態(tài)新增機器,維護帶來很大問題。

  • 主流的注冊中心:zookeeper、Eureka、consul、etcd 等

3、分布式應用知識CAP定理

CAP定理:指的是在一個分布式系統(tǒng)中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區(qū)容錯性),三者不可同時獲得。

  • 一致性(C):在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時刻是否同樣的值。(所有節(jié)點在同一時間的數(shù)據(jù)完全一致,越多節(jié)點,數(shù)據(jù)同步越耗時)。
  • 可用性(A):負載過大后,集群整體是否還能響應客戶端的讀寫請求。(服務一直可用,而且是正常響應時間)。
  • 分區(qū)容錯性(P):分區(qū)容忍性,就是高可用性,一個節(jié)點崩了,并不影響其它的節(jié)點(100個節(jié)點,掛了幾個,不影響服務,越多機器越好)。

4、分布式系統(tǒng)CAP注冊中心選擇

CAP三者不可同時獲得的原因:

  1. C A 滿足的情況下,P不能滿足的原因:
    數(shù)據(jù)同步(C)需要時間,也要正常的時間內(nèi)響應(A),那么機器數(shù)量就要少,所以P就不滿足。
  2. CP 滿足的情況下,A不能滿足的原因:
    數(shù)據(jù)同步(C)需要時間, 機器數(shù)量也多(P),但是同步數(shù)據(jù)需要時間,所以不能再正常時間內(nèi)響應,所以A就不滿足。
  3. AP 滿足的情況下,C不能滿足的原因:
    機器數(shù)量也多(P),正常的時間內(nèi)響應(A),那么數(shù)據(jù)就不能及時同步到其他節(jié)點,所以C不滿足。
注冊中心選擇:
  • Zookeeper:CP設計,保證了一致性,集群搭建的時候,某個節(jié)點失效,則會進行選舉行的leader,或者半數(shù)以上節(jié)點不可用,則無法提供服務,因此可用性沒法滿足
  • Eureka:AP原則,無主從節(jié)點,一個節(jié)點掛了,自動切換其他節(jié)點可以使用,去中心化
    結論:沒有最好的選擇,最好是根據(jù)業(yè)務場景來進行架構設計

    注冊中心對比圖:
    注冊中心對比圖

5、注冊中心搭建(使用IDEA)

File --> New -->Project

  • 拉取項目
  • 打開項目在啟動類添加注解@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
  • 增加配置application.yml
    (配置文件默認是application.properties格式,如需修改為yml直接重命名即可)
server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
  #聲明自己是個服務端
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  • 啟動項目 訪問注冊中心頁面
    http:// localhost:8761

6、創(chuàng)建服務提供者向注冊中心上報

  • 如上所示創(chuàng)建注冊中心一樣創(chuàng)建項目,不同的是選擇依賴如下:
  • 開發(fā)接口
  • 增加配置application.yml
server:
  port: 8771

#服務的名稱
spring:
  application:
    name: product-service

#指定注冊中心地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  • 啟動服務
    此時訪問注冊中心地址:http:// localhost:8761 就可以看到如下注冊的服務了

7、Eureka服務注冊中心配置控制臺問題

  1. eureka管理后臺出現(xiàn)一串紅色字體:是警告,說明有服務上線率低

    由于自我保護模式默認是開啟狀態(tài)
    關閉檢查方法:eureka服務端配置文件加入

server:
  enable-self-preservation: false

注意:不建議關閉,因為關閉會導致如若因為網(wǎng)絡問題沒上報至注冊中心的服務也會被認為掛掉而清除掉了此服務。

  1. 為什么只加一個注冊中心地址,就可以注冊,而且很多資料顯示啟動類加注解@EnableEurekaClient
    查閱官網(wǎng),給出解釋如下:
    官方文檔:http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#spring-cloud-eureka-server
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容