【系統設計】2WTPS生產級數據處理系統設計Review

歡迎來到啾啾的博客🐱。
記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。
有很多很多不足的地方,歡迎評論交流,感謝您的閱讀與評論😄。

目錄

  • 反正能用的系統
  • 問題分析
  • 方案一:簡單多實例增加些許容錯
  • 方案二:任務調度機制
  • 方案三:Kubernetes+主備模式

反正能用的系統

幾年前,我曾經參與過一個月工單10億級別(TPS數萬/秒)的系統開發,當時的架構設計大致如下。
圖以數據流為導向,省去了一些微服務架構組件。

![[數據處理系統-Review.png]]

很顯然,這個架構存在一個明顯的問題:數據分區后由不同的服務專門處理,若這個專職的服務掛掉,該分區的數據在服務恢復前都將無法得到處理。

那么,我們應該怎么改善這個設計呢?

問題分析

  • 主要待解決的問題

    • 功能性問題
      專職服務掛掉后,分區數據得不到處理。

    • 拓展問題
      當前的數據分割方式是在系統設計時靜態劃分。如果數據量超出設計預期,系統處理不了,也不好拓展。

    • 性能問題
      不能保障數據均勻地分布在各個分區,也不能保障每個專職服務處理速度一致。可能Server1處理完數據了,Server2還有一半沒有處理,服務器性能得不到充分利用。

  • 其他問題
    略…

方案一:簡單多實例增加些許容錯

每個專職服務都部署成多實例,從而提升容錯能力,解決部分功能性問題。

多實例會帶來一個問題:多個服務競爭同一批任務。

這是很簡單的資源競爭問題,可以簡單使用鎖來避免資源競爭。
在分布式架構中,使用第三方存儲即可解決,如Redis,ZooKeeper。
另外設計兜底機制,如果多個服務實例中存在不靠譜實例,競爭到了資源但是沒有完成,使用告警機制重新競爭處理。
以及從底層設計支持冪等,防止重復消費帶來問題。

  • 基于Redis或Zookeeper設計任務分片獲取

關于任務:任務應該有一個唯一ID、狀態(如:待處理、處理中、已完成、失敗)、處理實例ID(可選,用于追蹤)、嘗試次數等字段。

實例需要嘗試獲取并鎖定一個“未處理”的任務批次。
因此,我們需要一種方式來標識數據分片。
如果數據本身有連續ID或者可以按某種規則分批,那是最好的。如果不行,可能需要預先在DB中標記好批次,或者有一個專門的“任務池”表。為了簡化,我們假設數據可以按ID范圍劃分。

簡單流程圖如下:
選定幾個實例負責加載任務,所有實例從任務池中獲取任務,并對任務加鎖(Redis的SETNX)。
![[數據處理系統-Review-4.png]]

詳細UML如下(AI生成):
![[數據處理系統-Review-5.png]]

但是這樣設計容錯率還是不夠、且不能無法解決其他分區的動態資源分配問題。對所有服務來說性能也沒有利用到極致。

方案二:任務調度機制

我們可以補充設計一個資源調度系統來解決所有問題。
簡單草圖如下:
![[數據處理系統-Review-3.png]]

很顯然,我們需要有

  • 服務管理與檢測
    需要獲取服務狀態以分配任務:需要知道服務實例的處理狀態,哪些服務可以分配任務,以及還能接收多少數據也會損害服務性能。

  • 動態分區計算
    需要支持動態擴展服務。以及最快最好分配數據處理任務到服務,充分利用資源。
    ![[數據處理系統-Review-1.png]]

原來的數據庫分庫分表結構不做更改,需要分庫分表來緩解數據查詢壓力。
調度服務需要獲取數據與分配數據。
任務(數據)獲取注意事項:需要能感知數據源數據量、數據概要信息(比如區間信息,用于分區)。獲取連續數據、內存數據、多線程獲取并匯總信息用于分配。
任務分配:要避免多個分配者競爭。

  • 容錯設計
    如果調度服務掛掉了怎么辦?
    管理服務注冊表,服務狀態檢測。

很顯然,我們可以使用Kafka來解決上述問題。任務均發送至Kafka,由Kafka的rebalance機制進行任務調度,且Kafka消費者組可以很大程序上解決容錯問題。也較易擴展。

方案三:Kubernetes+主備模式

最后但是的團隊在一次迭代中選擇了容器化+主備模式的方式來解決容錯問題。
即,為每個專職服務設置一個備用實例。并且將服務容器化。

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

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

相關文章

歷年北京理工大學保研上機真題

2025北京理工大學保研上機真題 2024北京理工大學保研上機真題 2023北京理工大學保研上機真題 在線測評鏈接:https://pgcode.cn/problem?classification1 判斷身份證校驗位是否正確 題目描述 給定一個身份證號碼,判斷其最后一位校驗位是否正確。 如果…

uni-app學習筆記十--vu3綜合練習

鞏固提升前面學習的知識點,主要涉及下面這方面的運用: 1.v-for運用; 2.v-model雙向綁定; 3.confirm確認事件; 4.click點擊事件; 5.控制按鈕的可點擊和不可點擊; 6.集合刪除和追加元素,獲取集合元素的…

AI時代新詞-AI芯片(AI - Specific Chip)

一、什么是AI芯片? AI芯片(AI - Specific Chip)是指專為人工智能(AI)計算任務設計的芯片。與傳統的通用處理器(如CPU)相比,AI芯片針對深度學習、機器學習等AI應用進行了優化&#x…

華為云Astro前端頁面數據模型選型及綁定IoTDA物聯網數據實施指南

目錄 1. 選擇合適的數據模型類型及推薦理由 自定義模型: 對象模型: 服務模型: 事件模型: 推薦方案: 2. 數據模型之間的邏輯關系說明 服務模型獲取數據: 對象模型承接數據: 前端組件綁定顯示: 數據保存與反饋(可選): (可選)事件模型實時更新: 小結 …

因重新安裝python新版本,pycharm提示找不到python.exe(No Python at“c:\python.exe“)問題解決方法

1、安裝新版本python后提示錯誤如下: 2、打開設置 3、添加Interpreter 4、配置程序的安裝路徑 5、問題完美解決。

一文帶你徹底理清C 語言核心知識 與 面試高頻考點:從棧溢出到指針 全面解析 附帶筆者手寫2.4k行代碼加注釋

引言:C 語言的魅力與挑戰 從操作系統內核到嵌入式系統,從高性能計算到網絡編程,C 語言高效、靈活和貼近硬件的特性,始終占據著不可替代的地位。然而,C 語言的強大也伴隨著較高的學習曲線,尤其是指針、內存管…

GitHub 趨勢日報 (2025年05月22日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1microsoft/WSLLinux的Windows子系統? 2524? 26627C2HeyPuter/puter&#x1…

AI智能混剪核心技術解析(一):字幕與標題生成的三大支柱-字幕與標題生成-優雅草卓伊凡

AI智能混剪核心技術解析(一):字幕與標題生成的三大支柱-字幕與標題生成-優雅草卓伊凡 引言:文字到畫面的橋梁工程 在AI視頻混剪系統中,字幕與標題生成是連接語言表達與視覺呈現的核心樞紐。優雅草卓伊凡團隊將該功能拆…

如何通過PHPMyadmin對MYSQL數據庫進行管理?

管理MySQL數據庫時,使用PHPMyAdmin是一種常見且方便的方式。PHPMyAdmin是一個基于Web的數據庫管理工具,提供了許多功能,如數據庫創建、表管理、數據查詢、用戶權限設置等。本文將介紹如何通過PHPMyAdmin對MySQL數據庫進行管理,包括…

如何解決大模型返回的JSON數據前后加上```的情況

環境說明 springboot 應用使用dashscope-sdk-java對接阿里百練 deepseek v3模型 問題表現 已經指定了輸出json格式,但指令不明確,輸出JSON格式的寫法如下 注:提示詞一開始是能正常功能的,但過了幾天就出現了異常,原…

uniapp實現H5、APP、微信小程序播放.m3u8監控視頻

目錄 1.APP播放.m3u8監控視頻 2.H5播放.m3u8監控視頻 3.微信小程序播放.m3u8監控視頻 最近在寫一個uniapp實現h5、app、微信小程序兼容三端的播放監控視頻功能,我原本以為一套代碼多處運行,但事實并非如此,h5可以運行,微信小程…

螢石云實際視頻實時接入(生產環境)

螢石云視頻接入 本示例可用于實際接入螢石云開放平臺視頻,同時支持音頻輸入和輸出。 實際優化內容 1.動態獲取token 2.切換各公司和車間時,自動重新初始化播放器 let EZUIKit null; // 第三方庫引用 let EZUIKitPlayers []; // 播放器實例數組 le…

【Dify平臺】使用Dify API 實現網頁內嵌式AI助手

使用 Dify API 實現網頁內嵌式 AI 助手 一. 引言二. Dify API 概述三. 實現網頁內嵌式 AI 助手的技術架構四. 前端實現五. 后端實現六. 功能擴展與優化七. 測試與部署一. 引言 隨著 AI 技術的不斷發展,越來越多的企業希望將智能助手集成到自己的網頁中,實現用戶自動接待、問…

mysql8配置文件my.ini講解,原汁原味直接拷貝再講解

文章目錄 一、原英文版本,不帶注釋二、由原版逐字翻譯成的中文版(行行對應)三、最常用的配置 一、原英文版本,不帶注釋 # Other default tuning values # MySQL Server Instance Configuration File # -------------------------…

Go語言中內存釋放 ≠ 資源釋放

// QueryUserFileMetas : 批量獲取用戶文件信息 func QueryUserFileMetas(username string, limit int) ([]UserFile, error) {stmt, err : mydb.DBConn().Prepare("select file_sha1,file_name,file_size,upload_at," "last_update from tbl_user_file where u…

win11+vs2022 安裝opencv 4.11.0圖解教程

1. 下載opencv opencv官網下載地址:Releases - OpenCV 2. 雙擊運行該exe,即可進行安裝,安裝文件夾可自行選擇 安裝后目錄如下: 3. 配置環境變量 使用win鍵搜索環境變量,選中系統變量中的Path,然后點擊編輯…

【Linux】進程 信號的產生

🌻個人主頁:路飛雪吖~ 🌠專欄:Linux 目錄 一、掌握Linux信號的基本概念 🌠前臺進程 VS 后臺進程 🌠 小貼士: 🪄?個系統函數 --- signal() 🪄查看信號 --- man 7 sign…

Python 網絡編程入門

目錄 一、前言 二、網絡通信基礎12:TCP 與 UDP 協議解析 2.1 TCP 協議:可靠的面向連接通信 2.2 UDP 協7議:無連接的快速通信 2.3 Sock12et:網絡通信的基石 三、TCP 編程實15戰:從單工通信到雙向聊天 3.1 TCP 客…

Django壓縮包形式下載文件

通過web將minio上的文件以壓縮包-文件夾-文件的形式下載到本地 import os from bx_mes import settings from io import BytesIO import zipfile from django.http import StreamingHttpResponse class FileRemote(GenericAPIView):def post(self,request):# 壓縮包名folder_n…

Enhancing Relation Extractionvia Supervised Rationale Verifcation and Feedback

Enhancing Relation Extraction via Supervised Rationale Verification and Feedback| Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.php/AAAI/article/view/34631 1. 概述 關系抽取(RE)任務旨在抽取文本中實體之間的語義關