springcloud Eureka

這裏是修真院後端小課堂,每篇分享文從html

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】java

八個方面深度解析後端知識/技能,本篇分享的是:程序員

【springcloud Eureka    】算法

 

你們好,我是IT修真院深圳分院第十三期學員,一枚正直純潔善良的JAVA程序員。
今天給你們分享一下,修真院官網JAVA任務四里面的一個擴展:初識springboot和freemarker。spring

1 背景介紹
1.1 springcloud是什麼
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,均可以用Spring Boot的開發風格作到一鍵啓動和部署。 本質是一個基於springboot的一體系微服務框架。
1.2 eureka是什麼?
Eureka是Netflix開發的服務發現框架,自己是一個基於REST的服務,主要用於定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-cloud-netflix中,以實現SpringCloud的服務發現功能。
2 知識剖析
2.1 eureka的特色
一、Eureka包含兩個組件:Eureka Server和Eureka Client。後端

二、Eureka Server提供服務註冊服務,各個節點啓動後,會在Eureka Server中進行註冊,這樣EurekaServer中的服務註冊表中將會存儲全部可用服務節點的信息,服務節點的信息能夠在界面中直觀的看到。緩存

三、Eureka Client是一個java客戶端,用於簡化與Eureka Server的交互,客戶端同時也就別一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。springboot

四、在應用啓動後,將會向Eureka Server發送心跳,默認週期爲30秒,若是Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務註冊表中把這個服務節點移除(默認90秒)。網絡

五、Eureka Server之間經過複製的方式完成數據的同步,Eureka還提供了客戶端緩存機制,即便全部的Eureka Server都掛掉,客戶端依然能夠利用緩存中的信息消費其餘服務的API.app

2.2 eureka和zookeeper對比
一、著名的CAP理論指出,一個分佈式系統不可能同時知足C(一致性)、A(可用性)、和P(分區容錯性)。因爲分區容錯性P在分佈式系統中必需要保證的,所以咱們只能在A和C之間進行權衡。Zookeeper保證的是CP, Eureka則是AP。

二、Zoopkeeper保證CP:
當向註冊中心查詢服務列表時,咱們能夠容忍註冊中心返回的是幾分鐘之前的註冊信息,可是不能接受服務直接down掉不可用。也就是說,服務註冊功能對可用性的要求要高於一致性。可是zk會出現這樣的一種狀況,當master節點因網路故障與其餘節點失去聯繫時,剩餘的節點會從新進行leader選舉。問題在於,選舉leader的時間太長,30~120s,且選舉期間整個zk集羣是都是不可用的,這就致使在選舉期間註冊服務癱瘓,在雲部署的環境下,因網絡問題使得zk集羣失去master節點是較大機率會發生的事,雖然服務可以最終恢復,可是漫長的選舉時間致使的註冊長期不可用是不能容忍的。

三、Eureka保證AP:
Eureka看明白了這一點,所以在設計時就優先保證可用性。Eureka各個節點都是平等的,幾個節點掛掉不影響正常節點的工做,剩餘的節點依然能夠提供註冊和查詢服務。而Eureka的客戶端在向某個Eureka註冊時若是發現鏈接失敗,則會自動切換至其餘的節點,只要有一臺Eureka還在,就能保證註冊服務可用(保證可用性),只不過查到的信息可能不是最新的(不保證一致性)。除此以外,Eureka還有一種自我保護機制,若是在15分鐘內超過85%的節點都沒有正常的心跳,那麼Eureka就認爲客戶端與註冊中心出現了網絡故障,此時會出現如下幾種狀況:

3.1.Eureka再也不從註冊列表中移除由於長時間沒有收到心跳而應該過時的服務

3.2.Eureka仍然可以接受新服務的註冊和查詢請求,可是不會被同步到其它節點上(即保證當前節點依然可用)

3.3.當前網絡穩定時,當前實例新的註冊信息會被同步到其它節點中

3.常見問題
eureka server避免註冊本身

4 解決方案
在application配置文件加入:

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false1234
5.編碼實戰

6.擴展思考

二、除了freemarker還有什麼模板引擎比較流行
除了freemaker還有theamleaf模板引擎,目前springboot官方的模板引擎就是theamleaf,使用theamleaf的好處是theamleaf使用過的就是html文件,不須要想freemarker同樣去修改文件後綴爲ftl。

7.參考文獻
CSDN、百度百科

8 更多討論
一、springcloud 能夠結合zookeeper嗎?
springcloud可使用zookeeper做爲註冊中心,也能夠用consul做爲註冊中心,並不是必定要用eureka。只不過使用eureka的話,能共使用Netflix的oss組件,搭建起來更加方便。
二、eureka中的角色是怎麼劃分?
eureka中的角色劃分分爲server和client。其中server提供註冊服務,client是須要註冊的服務,其中client還分爲生產者和消費者。一個生產者既能夠是生產者也能夠消費者。
三、eureka如何作集羣?
eureka作集羣也很容易,只須要把eureka的server註冊中心的配置文件添加:

server:
  port: 8761
  profiles: peer1
eureka:
  instance:
    hostname: http://peer2:8762/eureka/    server:  port: 8762  profiles: peer2eureka:  instance:

相關文章
相關標籤/搜索