【系统设计】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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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)任务旨在抽取文本中实体之间的语义关