微服務-服務註冊與發現

来源:https://www.cnblogs.com/xiangkejin/archive/2018/05/07/9005014.html
-Advertisement-
Play Games

1.服務註冊與發現基礎架構 註冊中心: 接受服務提供者的註冊、存儲服務提供者的服務信息 ,比如ip 埠號 服務名這些信息; 並且與微服務保持心跳,如果心跳不能保持則註銷該實例。 所以註冊中心主要提供服務提供者信息的存儲,另外與服務提供者保持心跳以監控服務提供者的存活。 服務提供者: 向註冊中心提供 ...


1.服務註冊與發現基礎架構

註冊中心: 接受服務提供者的註冊、存儲服務提供者的服務信息 ,比如ip 埠號 服務名這些信息; 並且與微服務保持心跳,如果心跳不能保持則註銷該實例。 所以註冊中心主要提供服務提供者信息的存儲,另外與服務提供者保持心跳以監控服務提供者的存活。 服務提供者: 向註冊中心提供服務信息,以及一些健康狀態。 服務消費者: 定期向註冊中心發送查詢請求,以獲取服務提供者的信息,獲取信息之後就向服務提供者發起服務調用。 當服務提供者向註冊中心 ,註冊或者註銷時,它可以接收到來自註冊中心的變更通知。通過變更通知,服務消費者可以實時獲得服務提供者的信息。   2.Eureka的簡介 Eureka分為Eureka server和Eureka client ,Eureka server可以部署在不同的區域當中,他們可以進行兩兩註冊,他們之間保持服務註冊表數據之間的同步,以達到數據的最終一致性。Eureka client嵌入到各個應用當中,服務提供者藉助Eureka client實現註冊、續約、註銷的操作。 續約就是持續發送心跳。 服務消費者通過獲取服務的註冊信息,通過get register,來發起遠程調用。 有三點要註意:   1).Eureka server支持跨機房的高可用,不同區域的Eureka server可以同步註冊,同一區域也可以兩兩註冊來達到高可用。   2).Eureka server數據一致性的級別是最終一致性,它相比強一致性的區別在於,最終一致性會保證未來的某一時刻數據保持一致   3).Eureka client會對註冊表進行緩存,從而減輕了server的壓力,即使服務宕機也可以從緩存中獲取服務信息,這種方式進一步增強了Eureka的高可用   3.服務治理的機制 Eureka Server集群: 有兩個Eureka Server互相進行註冊,每個Eureka Server都有一個服務註冊表,是來自於服務提供者的一些實例信息。 evitTimer每隔一段時間都會掃描服務註冊表,去掃描所有的服務是否持續發送心跳,如果沒有持續發送心跳,就會從服務註冊表中移除服務。 自我保護的模式開關:當服務的存活實例低於預設的85%就會開啟自我保護開關,就會影響剔除任務,evictTimer就會停止服務,導致所有的服務不再進行註銷操作。   服務提供者: 向Eureka Serve提供三個操作:register/renew/cancel register:在開啟服務的時候會將服務的實例信息同步給Eureka Server,EurekaServer.instance的信息,比如續約心跳的間隔時間和過期時間。 renew:定期發一個renew,也就是續約操作 cancel:服務關閉時會發送註銷操作 heartbeat:定時發送續約心跳 instanceReplicate:同步instance信息   服務消費者的服務註冊表包括Eureka Server所有的服務信息 服務註冊表會緩存,當Eureka Server不可用時,會取緩存當中的信息(同樣保證了高可用)   4.搭建一個Eureka服務架構的步驟   1)創建一個Eureka server(服務註冊中心)        2)創建服務提供者      3)創建服務消費者      接下來我們做一個Eureka自我保護歐式的實驗: 啟動註冊中心和和服務提供者,然後ctl+C,關閉服務

 

這時服務提供者會向註冊中心發送一個註銷的請求。

 

instance就會消失。   再次重啟用戶,執行kill -9  進程號  命令,強制關閉服務實例,這時不會觸發shutdown鉤子。 這時發現服務實例還在,說明註冊中心沒有及時發現服務實例已經下線,現在我們等待十秒中。 我們得出以下幾個結論: 1.當我們進程平滑停止時,服務會向註冊中心發送註銷請求,  服務註冊中心收到註銷請求後會將關聯的實例註冊狀態置位down 2.當我們執行kill -9的時候不會觸發註銷操作,這就模擬了斷電和進程突然退出的情況。 之前我們說過,服務註冊到Eureka Server之後,會維護一個心跳連接,告訴Eureka Server自己還活著。 Eureka在運行期間會統計心跳失敗的比例低於我們設定的閾值的時候,它將進入保護模式,而不註銷任何服務實例。 但是,在這段期間內實例若出現問題,那麼客戶端很容易拿到實際已經不存在的服務實例,會出現調用失敗的情況,所以客戶端必須要有容錯機制,比如可以使用請求重試、斷路器等。   5.高可用的註冊中心 Eureka的服務治理設計中,所有的節點既是服務提供方,也是服務消費方,服務註冊中心也不例外。 Eureka Server的高可用實際上就是將自己所為服務向其他註冊中心註冊自己,這樣就可以形成一組相互註冊的服務註冊中心,以實現服務清單的互相同步,達到高可用的目的。 實現的方法就是配置兩個服務實例文件(在實際生產中開啟兩個項目,只是配置文件不同),——application-peer1.properties  application-peer2.properties  
server.port=8777
spring.application.name=eureka-server
eureka.instance.hostname=peer1

#留存的服務實例低於多少比例進入保護模式,保護模式。服務提供者和服務註冊中心保持心跳,如果發現無法提供服務,就註銷該實例。
#當進入保護模式的情況下,註冊中心不會註銷服務,以相容分區故障
eureka.server.renewal-percent-threshold=0.5

#是否開啟保護模式
eureka.server.enable-self-preservation=true

#是否註冊eureka,高可用的清況下使用
eureka.client.register-with-eureka=true
#是否啟用獲取服務註冊信息
eureka.client.fetch-registry=true
#註冊和查詢都需要依賴該地址,多個以逗號分隔
eureka.client.serviceUrl.defaultZone=http://peer2:8666/eureka/
View Code
server.port=8666
spring.application.name=eureka-server
eureka.instance.hostname=peer2

#留存的服務實例低於多少比例進入保護模式,保護模式。服務提供者和服務註冊中心保持心跳,如果發現無法提供服務,就註銷該實例。
#當進入保護模式的情況下,註冊中心不會註銷服務,以相容分區故障
eureka.server.renewal-percent-threshold=0.5

#是否開啟保護模式
eureka.server.enable-self-preservation=true

#是否註冊eureka,高可用的清況下使用
eureka.client.register-with-eureka=true
#是否啟用獲取服務註冊信息
eureka.client.fetch-registry=true
#註冊和查詢都需要依賴該地址,多個以逗號分隔
eureka.client.serviceUrl.defaultZone=http://peer1:8777/eureka/
View Code

 

6.Eureka的核心特性  1)通過相互註冊與複製支持高可用  2)支持用戶認證  3)支持註冊表緩存(容錯機制)  4)保護模式(解決網路分區故障)  5)服務提供方上報健康檢查  6)支持Restful API    
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 下載並安裝 node.js 參照 Less 的用法 2. 新建一個項目 3. 控制台進入該項目目錄,初始化 根目錄中自動生成了package.json 4、全局安裝webpack和webpack-cli 5、在項目中安裝webpack和webpack-cli 6. 安裝babel 7. 編輯 ...
  • 模塊化原則倡導利用集中和分解等手法創建高內聚、低耦合的抽象。 為了理解模塊化的含義及其很重要的原因,來看看一本書的極端情況。假設一本書像講一個長故事一樣闡述其中的內容,中間沒有任何停頓,也沒有章節。試問面對這樣的圖書,讀者將作何反應呢?我估計心中一定有千萬隻草泥馬在崩騰吧。如果這本書根據內容分為不同 ...
  • 一.抽象類 在某些情況下,父類知道其子類應該包含哪些方法,但是無法確定這些子類如何實現這些方法。這種有方法簽名但是沒有具體實現細節的方法就是抽象方法。有抽象方法的類只能被定義成抽象類,抽象方法和抽象類必須使用abstract修飾。抽象類里可以沒有抽象方法。 1.1 抽象類和抽象方法 抽象類和抽象方法 ...
  • 一、詳解TDD 1.1、TDD概念 :Test Drived Develop 測試驅動開發是敏捷開發中的一項核心實踐和技術,也是一種方法論。TDD的原理是在開發功能代碼之前,編寫單元測試用例代碼,測試代碼決定先編寫什麼產品代碼。TDD雖是敏捷方法的核心實踐,但不只是適用於XP,同樣可以適用於其他開發 ...
  • 本書是Eric Evans對他自己寫的《領域驅動設計-軟體核心複雜性應對之道》的一本字典式的參考書,可用於快速查找《領域驅動設計》中的諸多概念及其簡明解釋。 DDD到目前為止知道的人越來越多了,正巧今天在自己的書單中翻出這本塵封已久的電子版,網上查了下也沒有人來翻譯,所以近期就準備把這個本書翻譯一下 ...
  • 項目開發中,大家都會使用日誌框架(LogBack, log4j , java.util.logging 等)。下麵來簡單的瞭解一下日誌框架的大體設計思路。 類圖: ...
  • Spring介紹 Spring的核心是一個輕量級(Lightweight)的容器(Container),它是實現IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架,並提供AOP(Aspect-oriented programming)概念的實現方式;提 ...
  • 技巧提示:mysql讀寫分離搭建好之後,配合nginx的負載均衡,可以高效的mysql的集群性能,同時免去麻煩的query分流。比如,sever1收到的請求就專門鏈接slave1從mysql讀取數據,配合nginx的反向代理實現的分流,就可以優雅的把mysql的query請求分壓到不同的mysql- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...