llfc項目分布式服務筆記

一、系統整體架構流程圖(簡明版)

復制代碼

+---------------+             +------------------+          +----------------+
|  客戶端 (Client) |--------->|   GateServer    |----------|  StatusServer  |<--+
+---------------+             +------------------+          +----------------+   ||                                  |         |連接狀態、用戶登錄、客戶端請求                     |  管理所有chatserver的連接數|                                  |+----------------+       |                                  ||     chatserver1   |-----|                                  |+----------------+       |                                  || 連接用戶數管理     |<-------------------------------------+| grpc端點處理       |+------------------+|   |                               TCP服務監聽  |   |  grpc通信  (端對端聊天、好友請求...)|   |                               +--------+  +---------+| chatserver2  |  | chatserverN |(未來可擴展多臺)+--------------+  +--------------+
  • 客戶端(用戶手機/網頁)發起請求(登錄、聊天消息等)
  • GateServer:作為“門面”,收發客戶端請求。它負責:
    • 用戶登錄轉發到特定的chatserver
    • 獲取聊天內容
    • 獲取負載最小的chatserver進行分配(通過StatusServer)
  • StatusServer:監控所有chatserver的連接數,做負載均衡決策
  • 多個ChatServer:實際處理用戶的聊天邏輯
  • Grpc端點通信:ChatServer之間通過grpc實現端對端通信
  • 連接池(ChatConPool):優化grpc連接管理,避免頻繁建立連接

二、詳細逐步講解(用比喻輔助)

1. 系統的基本目標

  • 分布式部署:多個ChatServer共享壓力
  • 負載平衡:避免某臺ChatServer超載
  • 端對端通信:確保不同ChatServer可以直接互傳消息
  • 狀態監控:動態獲取每臺Server的連接數,確保由負載最小的Server處理用戶請求

2. 核心技術點及其作用

a. 多個ChatServer

  • 就像超市里有多收銀臺,用戶隨機排隊,但我們想讓“服務快”的收銀臺快點幫用戶結賬。
  • 每個ChatServer都有自己的連接數(“排隊人數”)

b. GateServer(門面)

  • 就像路口柜臺,負責迎接客戶(用戶)
  • 核心職責:
    • 讓用戶登錄后,告知它們“去哪臺聊天服務器”
    • 通過調用StatusServer查找連接最少的ChatServer
    • 轉發后續聊天請求到對應的ChatServer

c. StatusServer(負載調度)

  • 管理所有ChatServer的連接數(“排隊人數”)
  • 動態統計,做負載最小的Server的選擇
  • 作用類似:超市每個收銀臺可以實時看到等待人數,然后引導客戶去排隊少的柜臺

d. grpc通信

  • grpc:一種高效的遠程通信協議,像快遞包裹一樣,快速、可靠地傳遞信息
  • 通過grpc,ChatServer之間端對端可以直接調用,相當于兩個超市的收銀員可以直接交換信息,不需要經過中轉站

e. 連接池(ChatConPool)

  • 連接grpc的“橋梁”,如超市里備用的快速通道
  • 避免每次通信都重新建連接,節省資源,提高效率

3. 工作流程(用戶請求全流程)

假設用戶要登錄,系統是如何實現的?

  1. 用戶發起登錄請求(輸入賬號密碼)
  2. GateServer收到請求
    • 通過調用StatusServer查詢負載信息, 發現“ChatServer A”連接數最少
  3. GateServer把用戶登錄請求(ID、Token等信息)轉發到“ChatServer A”
  4. ChatServer A確認用戶信息后,返回登錄成功
  5. GateServer將用戶ID綁定到會話中,存入Redis(或者內存)
  6. 用戶正式登錄成功(連接完畢)

之后用戶發消息:

  • 用戶消息發到GateServer
  • GateServer識別到用戶已登錄
  • 直接將消息轉發到對應的ChatServer
  • 聊天內容由目標ChatServer處理

負載均衡(動態匹配)

  • 每次用戶登錄或請求,GateServer會實時調用StatusServer,#找到連接數最少的ChatServer
  • 這樣確保每個服務都不會過載,從而保證系統平穩運行

4. 跨Server通信(端對端grpc)

  • 由于多個ChatServer都通過grpc連接,彼此可以調用服務
  • 這樣可以實現:
    • 跨Server轉發消息(比如:A和B兩個Server的用戶聊天)
    • 其他交互(好友關系校驗、同步消息等)

5. 用戶連接數管理

  • 每個ChatServer:啟動后,向Redis設置自己的連接數(初始為0)
  • 每當用戶連接/斷開:更新連接數
    • 連接:增加
    • 斷開:減少
  • StatusServer:實時讀取所有Server的連接數,做出負載匹配

三、各個組件詳細作用介紹

組件作用作用比喻
GateServer客戶端入口,負責請求轉發、負載均衡超市門口的工作人員,迎接客戶
StatusServer監控每個ChatServer連接數,提供負載分配依據超市中監控排隊人數的管理員
ChatServer具體處理聊天邏輯,存儲好友關系、聊天歷史等超市的收銀臺,客戶排隊等候
grpc通信各Service端點間可靠、快速的網絡通訊快遞車,直接送貨到不同超市的貨架
連接池(ChatConPool)管理grpc連接,避免頻繁創建,提升效率超市備用通道,快速通達收銀臺
Redis存儲用戶狀態、連接數信息,快速查詢超市排隊系統,實時統計等待人數

四、總結和思路重點

  • 多服務器部署:將系統分別部署多個ChatServer,避免單點失效,提升性能
  • 動態負載均衡:請求到達GateServer,實時通過StatusServer匹配負載最小的Server,確保公平分配
  • grpc端對端通信:多Server可以直接交互,保證消息轉發效率
  • 連接數管理:實時監控每個Server的連接情況,依據連接數來做負載調度
  • 高效通信:利用grpc連接池,減少連接創建/銷毀的開銷

五、建議理解路徑

  1. 把整體流程圖記住:用戶-門面-負載調度-聊天處理(跨Server)
  2. 重點理解

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

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

相關文章

C++如何設計和實現緩存(cache)來減少對后端存儲的訪問壓力

隨著數據量的激增和用戶對低延遲、高吞吐量需求的不斷提升,如何減少系統瓶頸、提升響應速度成為了開發者的核心挑戰之一。在這一背景下,緩存(cache)作為一種關鍵的技術手段,逐漸成為解決性能問題的核心策略。緩存的本質是通過存儲頻繁訪問的數據或計算結果,減少對后端存儲…

華為設備端口隔離

端口隔離的理論與配置指南 一、端口隔離的理論 基本概念 端口隔離&#xff08;Port Isolation&#xff09;是一種在交換機上實現的安全功能&#xff0c;用于限制同一VLAN內指定端口間的二層通信。被隔離的端口之間無法直接通信&#xff0c;但可通過上行端口訪問公共資源&#…

1688平臺商品詳情接口開發指南(含Python代碼示例)

接口概述 1688開放平臺提供的商品詳情接口&#xff08;item_get&#xff09;是獲取商品核心數據的重要API&#xff0c;開發者可通過該接口獲取商品標題、價格、規格參數、圖片等詳細信息。本文重點解析標題字段的獲取方式&#xff0c;并提供完整代碼示例。 接口請求參數 基礎…

Edge瀏覽器PDF字體顯示錯誤

Edge瀏覽器PDF字體顯示錯誤 軟件版本信息 Edge Version: 136.0.3240.50 Word Version: Microsoft Office 專業增強版2021問題描述 在Word中使用多級列表自動編號, 并使用Word軟件自帶的導出為PDF文件功能, 在Word中顯示正常的數字, 在Edge中查看PDF將會出現渲染錯誤的現象,…

Redis能保證數據不丟失嗎之AOF

我們都知道,Redis是一個基于內存的k-v數據庫,既然是基于內存的,那么Redis如何保證數據不丟失?以及真的能做到數據的百分百不丟失嗎? 為什么Redis數據需要持久化機制? Redis的一個常用場景是緩存,通常緩存丟失的話,我們也可以從數據庫中重新找回,那么為什么Redis還需…

Apache POI實現Excel的基本寫入、導出操作

目錄 一、Apache POI 簡介 二、入門案例(寫入導出) 三、實際開發過程中的導出操作——&#xff08;將文件下載至客戶端瀏覽器中&#xff09; 一、Apache POI 簡介 Apache POI&#xff08;Poor Obfuscation Implementation&#xff09;是 Apache 軟件基金會的開源項目&#…

HTTP請求與前端資源未優化的系統性風險與高性能優化方案

目錄 前言一、未合并靜態資源&#xff1a;HTTP請求的隱形殺手1.1 多文件拆分的代價1.2 合并策略與工具鏈實踐 二、未啟用GZIP壓縮&#xff1a;傳輸流量的浪費2.1 文本資源的壓縮潛力2.2 服務端配置與壓縮算法選擇 三、未配置瀏覽器緩存&#xff1a;重復請求的根源3.1 緩存失效的…

AgentMesh開源多智能體 (Multi-Agent) 平臺

AgentMesh 是一個開源的多智能體 (Multi-Agent) 平臺&#xff0c;核心目標是解決多個智能體之間的通信和協同問題&#xff0c;真正實現 “11>2” 的效果。能夠幫助用戶快速創造自己的多智能體團隊&#xff0c;或是讓已有的多個單一智能體獲得協同能力&#xff0c;最終解決更…

基于Jetson Nano與PyTorch的無人機實時目標跟蹤系統搭建指南

引言&#xff1a;邊緣計算賦能智能監控 在AIoT時代&#xff0c;將深度學習模型部署到嵌入式設備已成為行業剛需。本文將手把手指導讀者在NVIDIA Jetson Nano&#xff08;4GB版本&#xff09;開發板上&#xff0c;構建基于YOLOv5SORT算法的實時目標跟蹤系統&#xff0c;集成無人…

從入門到登峰-嵌入式Tracker定位算法全景之旅 Part 8 |產品化與運維:批量標定、誤差監控、OTA 升級與安全防護

Part 8 |產品化與運維:批量標定、誤差監控、OTA 升級與安全防護 本章聚焦將嵌入式 Tracker 定位系統推向 量產與運維 階段,覆蓋 批量標定、誤差監控、遠程 OTA 升級 以及 定位安全防護,確保產品在大規模部署后仍能穩定、精準、可靠地運行。 一、批量標定平臺搭建 標定流程…

gsplat 渲染庫 安裝部署筆記

目錄 Windows 安裝 Nvdiffrast安裝 gsplat安裝成功筆記: cu118測試ok vs 編譯安裝報錯: 安裝命令: 報錯結果: Windows 安裝 pip install gsplat 安裝成功,調用報錯: python -c "from gsplat import csrc as _C" Traceback (most recent call last): …

Java二維碼學習

使用Java語言生成二維碼有以下方式,一是谷歌的zxing,二是基于zxing實現的qrcode開源項目,三是基于zxing實現的qrgen開源項目 一 zxing 谷歌的zxing技術生成二維碼,是MultiFormatWriter多寫格式書寫器生成BitMatrix位矩陣,然后將位矩陣的信息在BufferedImage中設置二維碼…

工業質檢/缺陷檢測領域最新頂會期刊論文收集整理 | AAAI 2025【持續更新中】

會議官方論文列表&#xff1a;https://ojs.aaai.org/index.php/AAAI/issue/view/624 其中&#xff0c;2025年是第三十九屆AAAI人工智能大會&#xff0c;主要對第三十九屆相關論文進行梳理&#xff0c;當前已初版28期(volume 39 no. 28) 【Attention】 雖然本文主要面向的領域…

數據結構實驗8.1:圖的基本操作

文章目錄 一&#xff0c;實驗目的二&#xff0c;實驗內容三&#xff0c;實驗要求四&#xff0c;算法分析五&#xff0c;示例代碼8-1.cpp源碼graph.h源碼 六&#xff0c;操作步驟七&#xff0c;運行結果 一&#xff0c;實驗目的 1&#xff0e;掌握圖的鄰接矩陣、鄰接表的表示方…

Spring Boot3 實現定時任務 每10分鐘執行一次,同時要解決分布式的問題 區分不同場景

在Spring Boot 3中實現分布式定時任務&#xff0c;確保多實例環境下任務僅執行一次&#xff0c;可以采用以下方案&#xff1a; 方案一&#xff1a;Redis分布式鎖&#xff08;推薦&#xff09; import org.springframework.data.redis.core.StringRedisTemplate; import org.sp…

WPF MVVM入門系列教程(五、命令和用戶輸入)

&#x1f9ed; WPF MVVM入門系列教程 一、MVVM模式介紹二、依賴屬性三、數據綁定四、ViewModel五、命令和用戶輸入六、ViewModel案例演示 WPF中的命令模型 在WPF中&#xff0c;我們可以使用事件來響應鼠標和鍵盤動作。 但使用事件會具備一定的局限性&#xff0c;例如&#x…

2025年01月09日德美醫療前端面試

目錄 vue2 的雙向綁定的原理vue3 的雙向綁定原理vue 的生命周期vue 子組件為何不能修改父組件的值js delete 刪除數組的某一個值會怎么樣vue 和 react 的 diff 算法什么是閉包原型鏈this指向 vue2 的雙向綁定的原理 以下是 Vue 2 雙向綁定的原理&#xff1a; 1. 核心概念 …

知識圖譜 + 大語言模型:打造更聰明、更可靠的AI大腦 —— 探索 GraphRAG 中文優化與可視化實踐

大語言模型&#xff08;LLMs&#xff09;無疑是近年來人工智能領域最耀眼的明星。它們強大的自然語言理解和生成能力&#xff0c;在文本創作、代碼生成、對話交互等眾多領域展現了驚人的潛力。然而&#xff0c;當前的 LLMs 并非完美無缺&#xff0c;它們常常面臨著“幻覺”&…

【uniapp】在UniApp中檢測手機是否安裝了某個應用

1. 使用plus.runtime.isApplicationExist&#xff08;僅限App端&#xff09; // 判斷應用是否安裝 function checkAppInstalled(packageName) {if (uni.getSystemInfoSync().platform android || uni.getSystemInfoSync().platform ios) {// 僅App端可用if (typeof plus ! u…

使用 Vue + Axios 構建與后端交互的高效接口調用方案

使用 Vue Axios 構建與后端交互的高效接口調用方案 在 Vue 前端開發中&#xff0c;與后端接口的數據交互是非常核心的部分。而 Axios 是 Vue 項目中最常用的 HTTP 客戶端&#xff0c;具備基于 Promise、攔截器、自定義實例等諸多優勢。 本篇將深入介紹如何基于 Vue 搭配 Axi…