《RPC實戰與核心原理》學習筆記Day14

来源:https://www.cnblogs.com/wing011203/archive/2023/01/31/17081102.html
-Advertisement-
Play Games

這篇文章主要描述如何定位RPC問題以及如何使用時鐘輪來管理RPC中的定時任務,主要包括如何設計合適的異常機制,如何使用分散式鏈路跟蹤系統,以及如何使用時鐘輪來管理RPC中的超時控制和心跳檢測。 ...


19 | 分散式環境下如何快速定位問題?

分散式環境下定位問題有什麼難點?

分散式環境下定位問題的難點在於,各子應用、子服務之間有複雜的依賴關係,我們有時很難確定是哪個服務的哪個環節出現的問題。如果要通過日誌來排查問題,就需要對每個子應用、子服務逐一進行排查,很難一步到位。

在分散式環境下如何快速定位問題?
有兩種方式:

  1. 藉助合理封裝的異常信息
  2. 藉助分散式鏈路跟蹤

RPC框架列印的異常信息中,需要包含定位問題所需要的異常信息的,比如哪些異常引起的問題(如序列化問題或網路超時問題),是調用端還是服務端出現的異常,調用端與服務端的IP是多少,以及服務介面與服務分組是什麼等等。

異常的示意圖如下所示。

一款優秀的RPC框架要對異常進行詳細地封裝,還要對各類異常進行分類,每類異常都要有明確的異常標識碼,並整理成一份簡明的文檔。適用房可以快速地通過異常標識碼在文檔中查閱,從而快速定位問題,找到原因,並且異常信息中藥包含排查問題時所需要的重要信息,比如服務介面名、服務分組、調用端和服務端的IP,以及產生異常的原因。總之,要讓適用房在複雜的分散式應用系統重,根據異常信息快速地定位到問題。

分散式鏈路跟蹤可以讓我們快速的知道整個服務調用的鏈路信息以及被調用的各個服務是否存在問題。例如服務A調用下游服務B,服務B又調用了B依賴的下游服務,如果服務A可以清楚的知道整個調用鏈路,並且能準確的直到調用鏈路中個服務的狀態,那麼就可以快速的定位問題。

分散式鏈路跟蹤有Trace和Span兩個關鍵概念:

  • Trace:代表整個鏈路,每次分散式都會產生一個Trace,每個Trace都有它的唯一標識,即TraceId,在分散式鏈路跟蹤系統重,就是通過TraceId來區分每個Trace的。
  • Span:代表了整個鏈路的一段鏈路,也就說Trace是由多個Span組成的。在一個Trace下,每個Span也有唯一的標識SpanId,而Span之間是存在父子關係的。

Trace和Span的關係如下圖所示。

RPC在整合分散式鏈路跟蹤所需要做的核心事情有2件:

  1. 埋點:分散式鏈路跟蹤系統要想獲得一次分散式調用的完整鏈路信息,就必須對這次分散式調用進行數據採集,而採集這些數據的方法就是通過RPC框架對分散式鏈路跟蹤進行埋點。RPC調用端在訪問服務端時,在發送請求消息前會觸發分散式跟蹤埋點,在接收到服務端響應時,也會觸發分散式跟蹤埋點,並且在服務端也會有類似的埋點。這些埋點最終可以記錄一個完整的Span,而這個鏈路的源頭會記錄一個完整的Trace,最終Trace信息也會上報給分散式鏈路跟蹤系統。
  2. 傳遞:上游調用端將Trace信息與父Span信息傳遞給下游服務的服務端,由下游觸發埋點,對這些信息進行處理,在分散式鏈路跟蹤系統重,每個子Span都存有父Span的相關信息以及Trace的相關信息。

20 | 詳解時鐘輪在RPC中的應用

RPC中的定時任務應該如何處理?

  1. 針對有定時需求的請求,建立額外的線程,使用Thread.sleep方法來處理。
  2. 建立一個單獨的線程,來持續掃描有定時需求的請求,判斷是否到時間了。
  3. 使用時鐘輪方法

在時鐘輪機制中,有時間槽和時鐘輪的概念,時間槽相當於時鐘的刻度,時鐘輪箱單與秒針與分針等跳動的一個周期,我們會將每個人物放到相應的時間槽位上。

時鐘輪的運行機制和生活中的時鐘是一樣的,每隔固定的單位時間,就會從一個時間槽位調到下一個時間槽位,這就相當於我們的秒針跳動了一次;時鐘輪可以分為多層,下一層時鐘輪中每個槽位的單位時間是當前時間輪整個周期的時間,這就相當於1分鐘等於60秒鐘;當時鐘輪將一個周期的所有槽位都跳動完後,就會從下一層時鐘輪中取出一個槽位的任務,重新分不到當前的時鐘輪中,當前時鐘輪則從第0槽位開始重新跳動,這就相當於下一分鐘的第1秒。

在RPC框架中哪些功能會用到時鐘輪?

  1. 調用端請求超時處理,我們每發一次請求,都創建一個處理請求超時的定時任務放到時鐘輪里,在高併發、高訪問量的情況下,時鐘輪每次只輪詢一個時間槽位中的任務,這樣會節省大量的CPU。
  2. 心跳檢測,對於這種需要重覆執行的定時任務,我們可以在定時任務執行邏輯的最後,重設這個任務的執行時間,把它重新丟回到時鐘輪裡面。

在使用時間輪時,我們需要註意兩件事情:

  1. 時間槽位的單位時間越短,時間輪觸發任務的時間就越精確。
  2. 時間輪的槽位越多,那麼一個任務唄重覆掃描的概率就越小,因為只有在多層時鐘輪中的任務才會被重覆掃描。
    作者:李潘     出處:http://wing011203.cnblogs.com/     本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.CSS 參考手冊 2.元素的分類 首先我們要知道一共有幾種元素 1.行內元素(可以與其他行內元素位於同一行,不會以新行開始高度、寬度不能設置) 2.塊級元素(每個塊級元素都從新的一行開始,其後的元素也另起一行。預設排列方式:從上至下元素的高度、寬度、行高、內外邊距都可設置) 3.行內塊元素(和其 ...
  • refs 字元串形式refs-過時了 // ref key為自命名內容, value為節點 input class Demo extends React.Component { showData = () => { // 拿到的是真實DOM const { input1 } = this.refs; ...
  • 大部分同學都知道,在 CSS 世界中,有 vw、vh、vmax、vmin 這幾個與視口 Viewport 相關的單位。 正常而言: 1vw 等於1/100的視口寬度 (Viewport Width) 1vh 等於1/100的視口高度 (Viewport Height) vmin — vmin 的值是 ...
  • JQuery動態生成的按鈕無法觸發問題與解決方法 起因: 利用JQuery動態添加的按鈕無法通過$(selector).click方法觸發點擊事件 //在網頁載入完成後動態添加表格 $(function () { //通過Ajax向後臺請求程式 $.ajax({ method : "post", u ...
  • 金融社區優惠文章是基於京東商城優惠商品批量化自動生成的,每日通過不同的渠道獲取到待生成的SKU列表,並根據條件生成優惠文章。 但是,生成優惠文章之後續衍生問題:該商品無優惠了,對應文章需要做取消推薦或下架處理,怎樣能更快的知道該商品無優惠了呢? ...
  • 一、Spring簡介 1、Spring介紹 Spring 是一款主流的 Java EE 輕量級開源框架 ,Spring 由“Spring 之父”Rod Johnson 提出並創立,其目的是用於簡化 Java 企業級應用的開發難度和開發周期。Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性 ...
  • 最近做的一個項目是採用前後端分離模式寫前端,後端是fabric區塊鏈,提供介面,需要使用post方法進行訪問。如上一章註冊用戶,就是需要把用戶名、賬戶信息轉換成json形式 使用post方法傳給後端區塊鏈的url.話不多說直接看代碼分析。 /*post1註冊用戶*/ func signup(url ...
  • 聲明式事務 1.事務分類 編程式事務 Connection connection = JdbcUtils.getConnection(); try{ //1.先設置事務不要提交 connection.setAutoCommit(false); //2.進行業務 crud //3.提交事務 conne ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...