分布式异步任务处理组件(二)
一些关键点的设计脑暴记录----very important!!!
- 首先,任务存储交给kafka,由节点负责写入kafka,acks=1;失败重试;透传kafka的提交可靠性,保证任务提交成功;后续可以考虑自己实现kafka相关机制---做局部优化,因为强依赖kafka
- 如何保证消息唯一被消费一次---集群状态维护全局消息唯一key,在写入kafka之前生成,保证提交的任务具有全局唯一key;每次消息执行成功做集群广播,通知到一半以上的节点再持久化(这里考虑一半以上节点还是所有节点,应该是所有节点才行--研究一下一半以上的架构模型适用于什么场景);每个节点间隔时间做持久化,因为是集合操作保证不会重复;间隔时间做持久化保证性能;(这里存在疑点,如果多节点同时失败怎么办,参考zookeeper的持久化机制,或者集群同步机制)保证全局key持久化成功,这样不能保证任务消息只被提交一次---数据库操作才可以保证,需要依赖回滚机制;;;有些任务不具有回滚性质--比如发送邮件。如何处理?可以分为两段提交,prepare状态在发邮件之前执行,提供检查策略用于其他节点检查邮件是否真实被执行;数据库操作提供自检查--检查全局ID即可;文件和邮件短信之类的操作需要用户提供检查策略;---理论上严格保证唯一执行需要每次处理任务前执行检查策略--所以这里要可配置,是否需要严格只执行一次,还是至少被执行一次--原理和提交可靠性一样---也不太一样,提交策略是至少被提交一次,其实有可能多次提交;
- 如何维护集群状态全局唯一key,预分配+全局投票;
- 再谈如何保证消息唯一被消费一次--全内存操作,只有消息消费成功才给kafka提交offset,因为是全内存操作保证每次拉取的消息数量不会太多;---怎么保证消息不回积压--积压问题通过集群部署实现,因为全内存操作保证最大运行能力,还产生积压说明系统配置不够;--非必要不考虑将消息再次持久化,如果要持久化只考虑持久化极少数一部分;
- 集群状态通过全局广播或者zookeeper来实现--基本上考虑节点上线和节点下线问题;也要考虑节点网络延迟问题;--一般来说全局广播和zookeeper的原理是一样的;
- 定制化分布式线城池--任务分类;优先级;线程池动态监控和动态调整;---详细考虑设计哪些参数,比如任务执行时间,单任务实际线程运行时间和阻塞时间,IO操作时间--然后对任务打标签---标签是否需要广播,广播后在任务提交时就打标签,以配合自我流量控制;
- 任务处理器handler如何注册--动态加载;JNI;或者RPC--这三种方式应该都要支持;
- 单节点流量控制--根据当前节点实际任务执行情况做流量控制,单节点消费能力做流量调节跟其他节点没有关系--因为是最大能力执行;
- 延时队列怎么实现--双队列--实时队列和延时队列--但是这里也要配合标签和流量控制考虑到实际上的延时队列跟实际上的实时队列的差别---延时队列分为两种--一种是计时结束后需要立即执行,另一种是计时结束后重新入队;
- 因为保证强可靠性,任务是否支持子任务或者叫任务递归,任务嵌套--比如自动扣费成功后产生生成订单任务---在扣费任务里提交生成订单即可,不需要组件做管理;---第10点不用考虑;
- 单节点流量控制需要规避大任务阻当小任务的情况发生---比如一个大任务挡住所有后续所有小任务的执行;所以这里需要保证所有任务不是严格顺序执行的;比如一部分线程宁愿空着也不能消费大任务,这里可以做任务类型队列,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映射一对多查询分页问题
场景:页面展示列表,需要查询多的字段,和一的字段。并且还要分页。 这时候直接想到的是手写sql。 /*** 标签*/private List<BasicResidentTags> tags;Data TableName("basic_resident_tags") public class BasicResidentTag…...
Linux/Windows路由管理
本文主要介绍如果通过linux/Windows命令添加IPV6地址,查看添加IPV6默认路由,查看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内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。链表的每个元素都是离散存放的,因此不需要占用连…...
【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动
[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 在【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值一文中介绍了如何利用…...
Android 设备兼容性使用(详细版)
经典好文推荐,通过阅读本文,您将收获以下知识点: 一、设备兼容性分类 二、硬件设备兼容 三、软件 APP 兼容 四、兼容不同语言 五、兼容不同分辨率 六、兼容不同屏幕方向布局 七、兼容不同硬件 Feature 八、兼容不同SDK平台 一、设备兼容性分类 Android设计用于运行在许多不同…...
React 中的常见 API 和生命周期函数
目录 useStateuseEffectuseRefdangerouslySetInnerHTML生命周期函数 constructorcomponentDidMountstatic getDerivedStateFromPropsshouldComponentUpdatecomponentDidUpdatecomponentWillUnmount useState useState 是 React 的一个 Hook,用于在函数组件中添加…...
从USB转TTL接线到手机热点配网:ESP8266无线通信保姆级避坑指南(附软件包)
从USB转TTL接线到手机热点配网:ESP8266无线通信保姆级避坑指南 当你第一次拿起ESP8266模块时,可能会被这个小巧的Wi-Fi模块惊艳到——它只有指甲盖大小,却蕴含着强大的无线通信能力。但很快,这种惊艳就会变成困惑:为什…...
Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题
Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题当你第一次用Godot4完成一个2D场景搭建时,那种成就感往往会被几个突如其来的bug瞬间击碎——角色神秘消失、背景纹丝不动、屏幕边缘出现诡异黑边。这些问题看似简单,…...
Ubuntu经常安装软件
1、垃圾清理工具stacer sudo apt updatesudo apt install stacer apt cleanapt autocleanapt autoremove 2、类似与everything的工具Fsearcch 1sudo add-apt-repository ppa:christian-boxdoerfer/fsearch-stable 2sudo apt update 3sudo apt install fsearch (注…...
告别DLL缺失烦恼!Visual C++运行库合集一键搞定Windows应用依赖问题
告别DLL缺失烦恼!Visual C运行库合集一键搞定Windows应用依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开某个软件或游戏时…...
实战对比:用直方图均衡化与CLAHE拯救你的背光/过曝照片(附Python完整代码)
拯救逆光废片:直方图均衡化与CLAHE的实战效果对比每次旅行回来整理照片时,总会有几张因为光线问题几乎要删除的废片——要么是逆光下的人脸黑得看不清五官,要么是天空过曝失去所有云层细节。这些照片往往记录着重要时刻,直接删除实…...
Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)
Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式?这种重复操作不仅浪费时间,还容易在重要演示时手忙脚乱。想象一下:电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏,整个过程…...
5步快速上手OpenVSP:免费开源的飞机参数化设计终极指南
5步快速上手OpenVSP:免费开源的飞机参数化设计终极指南 【免费下载链接】OpenVSP A parametric aircraft geometry tool 项目地址: https://gitcode.com/gh_mirrors/ope/OpenVSP OpenVSP是一款由NASA开发的免费开源飞机参数化设计工具,让航空工程…...
告别烧录烦恼:用Etcher三步打造完美启动盘的终极指南
告别烧录烦恼:用Etcher三步打造完美启动盘的终极指南 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 你是否曾因烧录系统镜像而误删硬盘数据…...
RedisDesktopManager Windows版:3分钟掌握免费Redis可视化工具,告别命令行操作!
RedisDesktopManager Windows版:3分钟掌握免费Redis可视化工具,告别命令行操作! 【免费下载链接】RedisDesktopManager-Windows RedisDesktopManager Windows版本 项目地址: https://gitcode.com/gh_mirrors/re/RedisDesktopManager-Window…...
从Bing日志到学术基准:MS MARCO数据集的前世今生与你的信息检索实验
从Bing日志到学术基准:MS MARCO数据集的前世今生与你的信息检索实验 当你在深夜调试信息检索模型时,是否曾好奇过那些基准数据集背后的故事?MS MARCO——这个让无数研究者又爱又恨的数据集,最初只是Bing搜索引擎日志中的普通用户查…...
