当前位置: 首页 > news >正文

分布式异步任务处理组件(二)

一些关键点的设计脑暴记录----very important!!!

  1. 首先,任务存储交给kafka,由节点负责写入kafka,acks=1;失败重试;透传kafka的提交可靠性,保证任务提交成功;后续可以考虑自己实现kafka相关机制---做局部优化,因为强依赖kafka
  2. 如何保证消息唯一被消费一次---集群状态维护全局消息唯一key,在写入kafka之前生成,保证提交的任务具有全局唯一key;每次消息执行成功做集群广播,通知到一半以上的节点再持久化(这里考虑一半以上节点还是所有节点,应该是所有节点才行--研究一下一半以上的架构模型适用于什么场景);每个节点间隔时间做持久化,因为是集合操作保证不会重复;间隔时间做持久化保证性能;(这里存在疑点,如果多节点同时失败怎么办,参考zookeeper的持久化机制,或者集群同步机制)保证全局key持久化成功,这样不能保证任务消息只被提交一次---数据库操作才可以保证,需要依赖回滚机制;;;有些任务不具有回滚性质--比如发送邮件。如何处理?可以分为两段提交,prepare状态在发邮件之前执行,提供检查策略用于其他节点检查邮件是否真实被执行;数据库操作提供自检查--检查全局ID即可;文件和邮件短信之类的操作需要用户提供检查策略;---理论上严格保证唯一执行需要每次处理任务前执行检查策略--所以这里要可配置,是否需要严格只执行一次,还是至少被执行一次--原理和提交可靠性一样---也不太一样,提交策略是至少被提交一次,其实有可能多次提交;
  3. 如何维护集群状态全局唯一key,预分配+全局投票;
  4. 再谈如何保证消息唯一被消费一次--全内存操作,只有消息消费成功才给kafka提交offset,因为是全内存操作保证每次拉取的消息数量不会太多;---怎么保证消息不回积压--积压问题通过集群部署实现,因为全内存操作保证最大运行能力,还产生积压说明系统配置不够;--非必要不考虑将消息再次持久化,如果要持久化只考虑持久化极少数一部分;
  5. 集群状态通过全局广播或者zookeeper来实现--基本上考虑节点上线和节点下线问题;也要考虑节点网络延迟问题;--一般来说全局广播和zookeeper的原理是一样的;
  6. 定制化分布式线城池--任务分类;优先级;线程池动态监控和动态调整;---详细考虑设计哪些参数,比如任务执行时间,单任务实际线程运行时间和阻塞时间,IO操作时间--然后对任务打标签---标签是否需要广播,广播后在任务提交时就打标签,以配合自我流量控制;
  7. 任务处理器handler如何注册--动态加载;JNI;或者RPC--这三种方式应该都要支持;
  8. 单节点流量控制--根据当前节点实际任务执行情况做流量控制,单节点消费能力做流量调节跟其他节点没有关系--因为是最大能力执行;
  9. 延时队列怎么实现--双队列--实时队列和延时队列--但是这里也要配合标签和流量控制考虑到实际上的延时队列跟实际上的实时队列的差别---延时队列分为两种--一种是计时结束后需要立即执行,另一种是计时结束后重新入队;
  10. 因为保证强可靠性,任务是否支持子任务或者叫任务递归,任务嵌套--比如自动扣费成功后产生生成订单任务---在扣费任务里提交生成订单即可,不需要组件做管理;---第10点不用考虑;
  11. 单节点流量控制需要规避大任务阻当小任务的情况发生---比如一个大任务挡住所有后续所有小任务的执行;所以这里需要保证所有任务不是严格顺序执行的;比如一部分线程宁愿空着也不能消费大任务,这里可以做任务类型队列,CPU密集型任务队列,IO密集型任务队列,总时间小的任务队列,总时间长的任务队列;-----衡量标准要考虑绝对参数,自适应性参数调节可能产生相对参数;

相关文章:

分布式异步任务处理组件(二)

一些关键点的设计脑暴记录----very important!!! 首先,任务存储交给kafka,由节点负责写入kafka,acks1;失败重试;透传kafka的提交可靠性,保证任务提交成功;后…...

Jenkins 拉取 GitHub 私有仓库失败问题

添加仓库的时候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub账户设置中生成的个人访问令牌填到地址里...

小程序 多层次对象数组的赋值、动态赋值

1、给对象赋值 data: {form: {Name: ,IDCard: ,Sex: ,}},对单个属性赋值 this.setData({form.Name:章三,[form.Sex]:女,}) 动态赋值 onChangeDate(e) {let field e.currentTarget.dataset.field;this.setData({[form.${field}]: e.detail.data})}, field 是wxml上通过dat…...

angular踩坑

1 新版路由守卫由于canActivate已被废弃,采用函数函数,但其参数中无法像类一样进行路由对象注入,如何实现路由首位中的页面跳转? import { CanActivateFn,Router,ActivatedRouteSnapshot, RouterStateSnapshot,} from angular/ro…...

C#时间轴曲线图形编辑器开发1-基本功能

目录 一、前言 1、简介 2、开发过程 3、工程下载链接 二、基本功能实现 1、绘图面板创建 (1)界面布置 (2)显示面板代码 (3) 面板水平方向、竖直方向移动功能实现 (4)面板放…...

elasticsearch查询操作(DSL语句方式)

说明:本文介绍在kibana,es的可视化界面上对文档的查询操作; 添加数据 先使用API,创建索引库,并且把数据从MySQL中查出来,传到ES上,参考(http://t.csdn.cn/NaTHg) 索引库…...

JavaScript详解

目录 一、JavaScript是什么? 1.1、JavaScript 和 HTML 和 CSS 之间的关系 1.2、JavaScript 运行过程 1.3、JavaScript 的组成 二、JavaScript 的书写形式 1. 行内式 2. 内嵌式 3、外部式 注释 三、输入输出 输入: prompt 输出: alert 输出: …...

电缆振荡波局部放电检测定位技术

电缆振荡波检测技术主要用于交联聚乙烯电力电缆检测,是属于离线检测的一种有效形式 。该技术基于LCR阻尼振荡原理,在完成电缆直流充电的基础上,通过内置的高压电抗器、高压实时固态开关与试品电缆形成阻尼振荡电压波,在试品电缆上…...

AI Chat 设计模式:10. 组合模式

本文是该系列的第八篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 给我介绍一下组合模式A.1Q.2 好的,给我举一个组合模式的例子,使…...

【Nginx12】Nginx学习:HTTP核心模块(九)浏览器缓存与try_files

Nginx学习:HTTP核心模块(九)浏览器缓存与try_files 浏览器缓存在 Nginx 的 HTTP 核心模块中其实只有两个简单的配置,这一块也是 HTTP 的基础知识。之前我们就一直在强调,学习 Nginx 需要的就是各种网络相关的基础知识&…...

【1】-Locust性能测试工具介绍与安装

Locust介绍 locust是一个开源的压测工具,其官网地址是Locust - A modern load testing framework,通过编写Python代码,可以轻松实现百万级的并发,相对于我们熟悉的Jmeter来说,其对压测机的要求更低,而且使…...

基于拉格朗日-遗传算法的最优分布式能源DG选址与定容(Matlab代码实现)

目录 1 概述 2 数学模型 2.1 问题表述 2.2 DG的最佳位置和容量(解析法) 2.3 使用 GA 进行最佳功率因数确定和 DG 分配 3 仿真结果与讨论 3.1 33 节点测试配电系统的仿真 3.2 69 节点测试配电系统仿真 4 结论 1 概述 为了使系统网损达到最低值&a…...

【已解决】jupyter notebook里已经安装了第三方库,还是提示导入失败

在jupyter notebook中运行Python代码,明明已经安装了第三方库,还是提示导入失败。 以导入pandas库为例,其他库同理: 报错代码: import pandas报错原因: 电脑上存在多个python运行环境(比如&a…...

Mybatis使用collection映射一对多查询分页问题

场景&#xff1a;页面展示列表&#xff0c;需要查询多的字段&#xff0c;和一的字段。并且还要分页。 这时候直接想到的是手写sql。 /*** 标签*/private List<BasicResidentTags> tags;Data TableName("basic_resident_tags") public class BasicResidentTag…...

Linux/Windows路由管理

本文主要介绍如果通过linux/Windows命令添加IPV6地址&#xff0c;查看添加IPV6默认路由&#xff0c;查看IPV6邻居缓存 一、Linux 1、查看地址 IPV4: route netstat -route ip route IPV6: ip -6 route show route -A inet6 route -62、添加IPV6地址 ip -6 addr add <…...

openpnp - 设备矫正的零碎记录

文章目录 openpnp - 设备矫正的零碎记录概述笔记设备内部不能有任何强干扰源相机就选100W像素的就行, 没有特殊要求openpnp软件的选择视觉归位必须禁止轴的赤隙矫正不用做运行openpnp软件的计算机, 必须是台式机校验完成后, 数据占用的体积END openpnp - 设备矫正的零碎记录 概…...

Linux内核中的链表、红黑树和KFIFO

lLinux内核代码中广泛使用了链表、红黑树和KFIFO。 一、 链表 linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。链表的每个元素都是离散存放的&#xff0c;因此不需要占用连…...

【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 在【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值一文中介绍了如何利用…...

Android 设备兼容性使用(详细版)

经典好文推荐,通过阅读本文,您将收获以下知识点: 一、设备兼容性分类 二、硬件设备兼容 三、软件 APP 兼容 四、兼容不同语言 五、兼容不同分辨率 六、兼容不同屏幕方向布局 七、兼容不同硬件 Feature 八、兼容不同SDK平台 一、设备兼容性分类 Android设计用于运行在许多不同…...

React 中的常见 API 和生命周期函数

目录 useStateuseEffectuseRefdangerouslySetInnerHTML生命周期函数 constructorcomponentDidMountstatic getDerivedStateFromPropsshouldComponentUpdatecomponentDidUpdatecomponentWillUnmount useState useState 是 React 的一个 Hook&#xff0c;用于在函数组件中添加…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...