微服務-服務註冊與發現

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...