微服務治理與可觀測性

服務注冊與發現

核心功能
  • 服務實例動態變化:實例可能因擴縮容、故障或遷移導致IP變動。
  • 服務依賴解耦:調用方無需硬編碼服務地址,降低耦合度。
  • 負載均衡:自動選擇健康實例,提升系統可用性。
核心組件
  • 服務注冊中心(Registry)

    • 作用:存儲服務實例的元數據(如IP、端口、健康狀態、標簽),提供心跳檢測和實例狀態維護功能。
    • 代表工具:Eureka、Consul、Nacos、ZooKeeper。
  • 服務提供者(Provider) :啟動時向注冊中心注冊自身信息;定期發送心跳以維持注冊狀態。

  • 服務消費者(Consumer) :從注冊中心獲取可用服務實例列表;通過負載均衡策略(如輪詢、權重)選擇實例發起調用。

工作流程
  • 注冊階段:服務提供者啟動時,向注冊中心發送注冊請求(包含元數據);注冊中心存儲實例信息,并標記為“健康”狀態。
  • 心跳維護:提供者周期性(如30秒)發送心跳包,刷新存活狀態;若注冊中心未收到心跳,標記實例為“不健康”或刪除。
  • 發現階段:消費者向注冊中心查詢目標服務的實例列表;注冊中心返回當前健康的實例列表。
  • 調用與負載均衡:消費者根據策略(如隨機、輪詢)選擇實例發起請求。

流量控制策略

常見限流算法
算法原理適用場景優缺點
固定窗口計數器每單位時間(如1秒)允許固定數量的請求,超出則拒絕。簡單場景(如API Key限流)實現簡單,但窗口切換時可能突發流量溢出。
滑動窗口計數器將時間窗口細分為多個小窗口,統計最近N個小窗口的總請求量。需要平滑限流的場景更精準,但計算復雜度較高。
漏桶算法請求以恒定速率處理(類似水從漏桶流出),超出桶容量則丟棄或排隊。流量整形(如消息隊列消費)輸出流量恒定,但無法應對突發流量。
令牌桶算法以固定速率向桶中添加令牌,請求需獲取令牌才能執行,否則拒絕或等待。允許突發流量(如秒殺場景)靈活支持突發,但需維護令牌狀態。
  • 單機限流Guava RateLimiter:基于令牌桶算法,支持預熱模式。

  • 分布式限流

    • Redis + Lua腳本:利用Redis的原子操作統計全局請求量。
    • Sentinel:阿里開源的流量控制組件,支持集群限流和動態規則配置。
    • Nginx限流模塊:通過limit_req_zonelimit_conn_zone實現網關層限流。
熔斷(Circuit Breaking)
  • 熔斷器:當服務調用失敗率達到閾值時,后續請求直接拒絕,避免資源耗盡。

  • 熔斷器三態轉換

    • Closed(閉合) :正常處理請求,統計失敗率。
    • Open(斷開) :拒絕所有請求,直接返回錯誤或降級結果。
    • Half-Open(半開) :嘗試放行部分請求,若成功則恢復Closed狀態。
  • 熔斷參數配置

    • 失敗率閾值:如10秒內失敗率超過50%觸發熔斷。
    • 熔斷時長:Open狀態持續時間(如5秒后進入Half-Open)。
    • 最小請求數:統計窗口內至少需要一定請求量才觸發熔斷(避免低流量誤判)。
  • 實現工具:Hystrix、Sentinel。
降級(Fallback)
  • 手動降級:運維人員通過配置中心手動觸發(如大促期間關閉積分兌換)。

  • 自動降級:基于熔斷規則或系統負載自動觸發(如CPU超過80%時關閉推薦服務)。

  • 降級策略

    • 返回默認值:如商品詳情頁降級時返回緩存中的靜態信息。
    • 簡化流程:跳過非必要步驟(如下單時不校驗庫存,僅記錄日志異步核對)。
    • 功能屏蔽:直接關閉某功能入口(如隱藏“秒殺”按鈕)。
負載均衡(Load Balancing)
  • 流量分配:將請求合理分發到多個服務實例,避免單點過載。

  • 健康檢查:自動剔除不健康實例,保證請求成功率。

  • 負載均衡算法

    算法原理適用場景
    輪詢(Round Robin)依次將請求分發到每個實例。實例性能均勻的場景
    加權輪詢根據實例權重分配請求(如CPU核數多的實例權重高)。異構硬件環境
    隨機(Random)隨機選擇一個實例。快速簡單,無狀態場景
    最小連接數將請求分發給當前連接數最少的實例。長連接服務(如WebSocket)
    一致性哈希相同請求參數(如用戶ID)始終路由到同一實例。緩存服務、會話保持需求

配置中心

核心功能
  • 集中化存儲:所有配置(數據庫連接、功能開關、超時參數等)存儲在統一平臺,避免配置散落在代碼或配置文件中。
  • 動態更新:修改配置后無需重啟服務,實時或近實時生效(如調整日志級別、限流閾值)。
  • 環境隔離:支持多環境(dev/test/prod)配置隔離,同一服務在不同環境加載不同配置。
  • 版本控制與回滾:記錄配置變更歷史,支持一鍵回滾到任意版本。
  • 權限與審計:配置修改需權限控制,記錄操作日志(如誰在何時修改了哪些配置)。
  • 加密與安全:敏感配置(密碼、密鑰)加密存儲,傳輸過程使用TLS加密。
核心組件
  • 配置存儲

    • 數據庫:MySQL、PostgreSQL等,存儲配置鍵值對。
    • 分布式KV存儲:Etcd、Consul,支持高可用和快速讀取。
    • 文件系統:Git倉庫(如Spring Cloud Config支持Git后端)。
  • 配置管理平臺:提供Web界面或API,供運維人員查看、修改和發布配置。

  • 客戶端SDK:集成到服務中,負責從配置中心拉取配置并監聽變更(如Nacos Client、Spring Cloud Config Client)。

  • 配置推送機制

    • 長輪詢(Long Polling) :客戶端定期檢查配置變更(如Nacos)。
    • WebSocket/SSE:服務端主動推送變更(實時性更高)。
工作流程
  • 服務啟動:服務通過客戶端SDK從配置中心拉取當前環境的配置。
  • 配置修改:管理員通過Web界面修改配置并發布。
  • 配置推送:配置中心通知所有訂閱該配置的服務實例。
  • 配置生效:服務動態加載新配置(如熱更新線程池大小)。

可觀測性

日志(Logs)
  • 定義:系統運行時生成的文本記錄,包含時間戳、事件描述和上下文信息。

  • 結構化:使用JSON格式,便于解析(如{"level":"ERROR","time":"2023-10-05","message":"connection failed"})。

  • 分級:DEBUG、INFO、WARN、ERROR等級別,按需采集。

  • 上下文:附加請求ID、用戶ID、設備信息等,支持關聯分析。

  • 工具鏈

    • 采集:Fluentd、Filebeat。
    • 存儲與搜索:Elasticsearch、Loki。
    • 可視化:Kibana、Grafana。
指標(Metrics)
  • 定義:系統運行狀態的數值化度量(如QPS、延遲、錯誤率)。

  • 核心類型

    • 計數器(Counter) :累加值(如總請求數)。
    • 儀表盤(Gauge) :瞬時值(如當前內存使用量)。
    • 直方圖(Histogram) :統計分布(如請求延遲的P50/P90/P99)。
    • 摘要(Summary) :類似直方圖,但客戶端計算分位數。
  • 工具鏈

    • 采集與存儲:Prometheus、InfluxDB。
    • 可視化與告警:Grafana、Alertmanager。
追蹤(Traces)
  • 定義:記錄請求在分布式系統中的完整調用鏈路,展示跨服務、跨組件的執行路徑和耗時。

  • 核心概念

    • Trace:一個請求的完整生命周期(如用戶下單請求)。

    • Span:Trace中的一個操作單元(如調用支付服務),包含:

      Span ID:唯一標識。

      Parent Span ID:父級Span ID,構建樹形結構。

      Tags:附加信息(如HTTP狀態碼、數據庫查詢語句)。

    • 上下文傳播(Context Propagation) :通過HTTP頭(如traceparent)在服務間傳遞Trace信息。

  • 工具鏈

    • 采集與存儲:Jaeger、Zipkin、SkyWalking。
    • 協議標準:OpenTelemetry(統一日志、指標、追蹤的API規范)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77444.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式linux系統中內存管理的方法與實現

第一:linux內核管理詳解圖形 第二:Linux內存管理詳細分析 深入剖析Linux內核內存管理 作為嵌入式系統開發者,理解Linux內核的內存管理對于開發高效、穩定的系統至關重要。在這篇文章中,我們將詳細解析Linux內核如何劃分物理內存和虛擬內存,頁表、MMU(內存管理單元)與TL…

【dataframe顯示不全問題】打開一個行列超多的excel轉成df之后行列顯示不全

出現問題如下圖: 解決方案~ display.width解決列顯示不全 pd.set_option(display.max_columns,1000) pd.set_option(display.width, 1000) pd.set_option(display.max_colwidth,1000) pd.set_option(display.max_rows,1000)

Linux——Shell編程之正則表達式與文本處理器(筆記)

目錄 基礎正則表達式 1:基礎正則表達式示例 (4)查找任意一個字符“.”與重新字符“*” (5)查找連續字符范圍“{ }” 文本處理器 一、sed工具 二、awk工具 (1)按行輸出文本 (2&#xff0…

OpenHarmony系統-源碼下載,環境搭建,編譯,燒錄,調試

獲取源碼 以OpenHarmony5.0.3為例 repo init -u https://gitee.com/openharmony/manifest -b OpenHarmony-5.0.3-Release --no-repo-verify repo sync -c repo forall -c git lfs pull搭建環境 安裝必要的工具和命令 apt-get install -y apt-utils binutils bison flex bc …

Vue3 本地打包啟動白屏解決思路!! !

“為什么我訪問 http://127.0.0.1:5501/index.html 白屏,刪了 index.html 再訪問 / 就又活過來了?” —— 你的項目與 SPA 路由的“宮斗大戲” 一、問題復現 場景 本地通過 VSCode Live Server(或其他靜態服務器)啟動了打包后的 V…

數字人(2):數字人技術全景透視(2025演進版)

隨著人工智能技術的迅猛發展,數字人技術發展也是一日千里。站在當下,著眼未來,我們一起在回眸透視過去的基礎上,一起共同眺望數字人技術的未來。 一、數字人技術體系重構 我們可以用三維定義對數字人技術進行框架重構 維度 技術內涵 典型特征 物理層 人體數字化建模技術 …

小剛說C語言刷題——1035 判斷成績等級

1.題目描述 輸入某學生成績,如果 86分以上(包括 86分)則輸出 VERY GOOD ,如果在 60到 85之間的則輸出 GOOD (包括 60和 85),小于 60 的則輸出 BAD。 輸入 輸入只有一行,包括 1個整數。 輸出 輸出只有一行&#xf…

React-在使用map循環數組渲染列表時須指定唯一且穩定值的key

在渲染列表的時候,我們須給組件或者元素分配一個唯一值的key, key是一個特殊的屬性,不會最終加在元素上面,也無法通過props.key來獲取,僅在react內部使用。react中的key本質是服務于diff算法, 它的默認值是null, 在diff算法過程中…

Zookeeper的通知機制是什么?

大家好,我是鋒哥。今天分享關于【Zookeeper的通知機制是什么?】面試題。希望對大家有幫助; Zookeeper的通知機制是什么? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 Zookeeper 的通知機制是其核心特性之一&#xf…

【LangChain實戰】構建下一代智能問答系統:從RAG架構到生產級優化

打破傳統問答系統的次元壁 當ChatGPT在2022年掀起AI革命時,開發者們很快發現一個殘酷現實:通用大模型在專業領域的表現如同拿著地圖的盲人,既無法理解企業私有數據,也無法保證事實準確性。這催生了RAG(檢索增強生成&a…

UDS中功能尋址可以請求多幀數據嘛?當ECU響應首幀后,診斷儀是通過物理尋址發送流控幀嘛?

文章目錄 1. 前言??1.1 功能尋址是否支持請求多幀數據?1.2 ECU發送首幀(FF)后,診斷儀如何發送流控幀(FC)?1.3 協議依據(ISO 14229-1)1.4 實際應用注意事項總結1. 前言?? 在UDS(Unified Diagnostic Services)協議中,功能尋址與物理尋址的使用規則以及多幀數據傳…

PHP異常處理__Throwable

在 PHP 里,Throwable 是一個極為關鍵的接口,自 PHP 7 起被引入。它為錯誤和異常處理構建了一個統一的框架。下面會詳細介紹 Throwable 的相關內容。 1. 基本概念 Throwable 是 Exception 和 Error 的父接口。在 PHP 7 之前,異常&#xff08…

無需訓練的具身導航探索!TRAVEL:零樣本視覺語言導航中的檢索與對齊

作者: Navid Rajabi, Jana Kosecka 單位:喬治梅森大學計算機科學系 論文標題:TRAVEL: Training-Free Retrieval and Alignment for Vision-and-Language Navigation 論文鏈接:https://arxiv.org/pdf/2502.07306 主要貢獻 提出…

Vue3+Vite+TypeScript+Element Plus開發-22.客制Table組件

系列文檔目錄 Vue3ViteTypeScript安裝 Element Plus安裝與配置 主頁設計與router配置 靜態菜單設計 Pinia引入 Header響應式菜單縮展 Mockjs引用與Axios封裝 登錄設計 登錄成功跳轉主頁 多用戶動態加載菜單 Pinia持久化 動態路由 -動態增加路由 動態路由-動態刪除…

Java讀取JSON文件并將其中元素轉為JSON對象輸出

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 Java讀取JSON文件并將其中元素轉為JSON對象輸…

Spring Boot自動配置原理深度解析:從條件注解到spring.factories

大家好!今天我們來深入探討Spring Boot最神奇的特性之一——自動配置(Auto-configuration)。這個功能讓Spring Boot如此受歡迎,因為它大大簡化了我們的開發工作。讓我們一起來揭開它的神秘面紗吧!👀 🌟 什么是自動配置…

【ELF2學習板】利用OpenMP采用多核并行技術提升FFTW的性能

目錄 引言 OpenMP簡介 編譯OpenMP支持的FFTW庫 部署與測試 測試程序 程序部署 測試結果 結語 引言 在前面已經介紹了在ELF2開發板上運行FFTW計算FFT。今天嘗試利用RK3588的多核運算能力來加速FFT運算。FFTW利用多核能力可以考慮使用多線程或者OpenMP。今天介紹一下Ope…

2000-2017年各省城市天然氣供氣總量數據

2000-2017年各省城市天然氣供氣總量數據 1、時間:2000-2017年 2、來源:國家統計局、能源年鑒 3、指標:行政區劃代碼、城市、年份、城市天然氣供氣總量 4、范圍:31省 5、指標說明:城市天然氣供氣總量是指在一定時間…

Hadoop的三大結構及其作用?

Hadoop是一個分布式存儲和計算框架,其三大核心組件是HDFS(Hadoop Distributed File System)、YARN(Yet Another Resource Negotiator)和MapReduce。它們各自有著重要的作用,共同構成了Hadoop生態系統的基礎…

【AI論文】ColorBench:視覺語言模型能否看到并理解多彩的世界?一個全面的色彩感知、推理和魯棒性基準測試

摘要:顏色在人類感知中起著重要作用,通常在視覺推理中提供關鍵線索。 然而,尚不清楚視覺語言模型(VLMs)是否以及如何像人類一樣感知、理解和利用顏色。 本文介紹了ColorBench,這是一個精心設計的創新基準&a…