持久化执行前置课(十):画出最小持久化内核,再开始写执行器
上一篇为事件与逻辑加上版本契约旧运行终于能够跨部署恢复。现在可以收束九篇原则稳定身份标记同一件事追加事件保存事实纯决定产生命令发件箱投递意图幂等回执约束副作用租约与预算控制恢复。一、痛点组件齐全仍可能边界混乱团队很容易先选数据库、队列和编排框架再把业务判断塞进 worker 循环。结果是历史读取、网络调用、状态推进和异常重试相互嵌套任何一步都无法独立重放。最小内核不是功能最少的玩具而是职责最少且边界可验证的结构。二、原理一个确定性核两个持久化方向内核读取事件历史折叠出状态再根据新事件产生新状态和命令。向内只追加事件向外只写命令意图活动执行器把命令变成回执事件。下面用纯内存数据展示一轮循环刻意不在决定函数里执行命令。fromdataclassesimportdataclass,replacedataclass(frozenTrue)classState:phase:strnewtoken:str|NoneNonedataclass(frozenTrue)classMessage:kind:strdata:dictdefdecide(state:State,event:Message)-tuple[State,list[Message]]:ifstate.phasenewandevent.kindtrip_requested:returnreplace(state,phaselocking),[Message(lock_budget,{activity_id:act-1})]ifstate.phaselockingandevent.kindbudget_locked:returnreplace(state,phaseready,tokenevent.data[token]),[]raiseValueError(finvalid:{state.phase}{event.kind})stateState()history[]outbox[]foreventin[Message(trip_requested,{}),Message(budget_locked,{token:B-7}),]:state,commandsdecide(state,event)history.append(event)outbox.extend(commands)print(event.kind,,state.phase,[item.kindforitemincommands])print(history,len(history),outbox,len(outbox),token,state.token)输出trip_requested locking [lock_budget] budget_locked ready [] history 2 outbox 1 token B-7三、实现用不变量先约束存储接口在选择框架前先写存储端口的契约测试序号连续、期望版本冲突、事件与命令同事务、命令 ID 唯一、完成回执引用已有命令。示例验证最核心的守恒关系任何阶段都不能凭空出现。fromdataclassesimportdataclassdataclass(frozenTrue)classRecord:seq:intevent:strcommands:tuple[str,...]defvalidate(records:list[Record],completed:set[str])-None:knownset()forexpected,recordinenumerate(records,start1):ifrecord.seq!expected:raiseValueError(sequence_gap)forcommandinrecord.commands:ifcommandinknown:raiseValueError(duplicate_command)known.add(command)missingcompleted-knownifmissing:raiseValueError(forphan_receipt:{sorted(missing)})records[Record(1,trip_requested,(act-1,)),Record(2,budget_locked,(act-2,)),Record(3,flight_booked,()),]validate(records,{act-1,act-2})print(valid records,len(records))try:validate(records,{act-3})exceptValueErroraserror:print(caught,error)输出valid records 3 caught orphan_receipt:[act-3]四、踩坑一开始就追求分布式规模单机 SQLite 足以验证事务边界、重放和崩溃语义。过早引入多分区队列会把业务错误藏在基础设施噪声里。另一个坑是把快照当事实源快照只是缓存删除后必须能由事件重建。监控指标同样不能代替事件指标可采样、可丢失不适合裁决业务状态。最小内核也要从第一天保存模式版本、逻辑版本、活动 ID 和停止原因否则以后补字段无法解释旧记录。安全边界应默认拒绝未知事件和未知版本。人工操作通过命令进入同一事件链而不是提供一个绕过历史的“强制改状态”按钮。五、验证先证明纯核再连接数据库验收顺序应是状态转移表、历史重放、非法事件、命令稳定性然后才是数据库事务、队列重复和进程崩溃。每加入一种基础设施都保留前一层快速测试。最终从空库执行一条旅行历史关闭进程、重新打开并重放所得状态和命令摘要必须一致。至此090 的证据包不再只是任务终点它启发了持久化执行从一开始就保存可验证事实。这十篇完成了从证据消费到内核蓝图的桥接。下一篇将真正从零实现miniflow先把旅行预订工作流写成无数据库、无网络的纯状态机再逐步为它接上持久化能力。参考来源Temporal核心应用结构Martin FowlerFunctional Core, Imperative ShellSQLite事务 觉得有用就点个赞 收藏方便回头查阅有疑问直接在评论区留言我看到都会回。 本文属于《持久化执行前置课》系列持续更新关注不迷路。 文章里的代码都能直接跑。想要可直接 clone 的完整工程 配套部署脚本 / 踩坑清单评论一声或发邮件到cj2664qq.com我免费发你。如果你正好在做类似系统、或有工程化难题想找人做也欢迎邮件聊一句——我按实际情况评估能落地的就接单或出方案。评论和邮件都能直接找到我不用跳别的平台。

相关新闻

树莓派Pico驱动2.9英寸电子纸:SPI通信与低功耗显示实战

树莓派Pico驱动2.9英寸电子纸:SPI通信与低功耗显示实战

1. 项目概述:当Pico遇上电子纸如果你手头有一块树莓派Pico,又恰好对低功耗、类纸显示的电子墨水屏(e-Paper)感兴趣,那么“Pico e-Paper 2.9 D”这个项目可能就是为你量身定做的。它本质上是一个软硬件结合的驱动方案&a…

2026/8/2 5:16:36阅读更多 →
持久化执行前置课(九):版本化历史,让代码升级后仍能重放旧工作流

持久化执行前置课(九):版本化历史,让代码升级后仍能重放旧工作流

上一篇让重试拥有明确预算和停止语义。但工作流可能运行数月,其间代码必然升级;若新代码重新解释旧事件并发出不同命令,确定性会在部署之后悄然破裂。 一、痛点:数据库兼容不等于行为兼容 给 JSON 新增可选字段通常能解析&#…

2026/8/2 5:16:36阅读更多 →
工业自动化实战:Modbus RTU 8通道模拟量输出模块配置与调试全解析

工业自动化实战:Modbus RTU 8通道模拟量输出模块配置与调试全解析

1. 项目概述:从一块“B型”8通道模拟量输出模块说起最近在做一个工业数据采集与控制的小项目,手头正好用到了这块“Modbus RTU Analog Output 8CH (B)”模块。名字听起来有点拗口,简单拆解一下:它的核心功能就是通过Modbus RTU这种…

2026/8/2 5:16:36阅读更多 →
5G组网时代下中小企业的轻量级新范式:内网穿透技术的革新与实践

5G组网时代下中小企业的轻量级新范式:内网穿透技术的革新与实践

随着5G网络的普及,连锁门店、小微企业、外勤团队对跨地域内网互通的需求日益增长。传统5G组网方案虽能满足需求,但面临专线成本高、配置复杂、穿透性差、安全风险大等痛点。针对此类场景,轻量级内网穿透技术正成为更具性价比的替代方案&#…

2026/8/2 6:34:54阅读更多 →
网络安全自学路线:从零基础到实战入门,保姆级指南

网络安全自学路线:从零基础到实战入门,保姆级指南

最近在后台收到不少私信,很多同学对网络安全感兴趣,想自学却不知从何下手。网上的资料要么过于零散不成体系,要么上来就是一堆晦涩难懂的术语,劝退了不少热情。作为一名在安全领域摸爬滚打多年的从业者,我深知一个清晰…

2026/8/2 6:34:54阅读更多 →
【单片机毕业设计】基于嵌入式的井下气体液位井盖状态监测平台 基于单片机的市政窨井智能检测报警设备设计(016201)

【单片机毕业设计】基于嵌入式的井下气体液位井盖状态监测平台 基于单片机的市政窨井智能检测报警设备设计(016201)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/2 6:34:54阅读更多 →
5分钟掌握地理数据编辑:让空间数据处理变得简单高效的终极指南

5分钟掌握地理数据编辑:让空间数据处理变得简单高效的终极指南

5分钟掌握地理数据编辑:让空间数据处理变得简单高效的终极指南 【免费下载链接】geojson.io A quick, simple tool for creating, viewing, and sharing spatial data 项目地址: https://gitcode.com/gh_mirrors/ge/geojson.io geojson.io是一款免费开源的地…

2026/8/2 6:34:54阅读更多 →
佳能g1800 1810 2800 2810 3800 3810 4800 4810 TS3380清零软件,支持故障代码5B00,5B02,5B04,1700,1702,1704,P07,E08亲测。

佳能g1800 1810 2800 2810 3800 3810 4800 4810 TS3380清零软件,支持故障代码5B00,5B02,5B04,1700,1702,1704,P07,E08亲测。

极速下载:点这里下载 密码:00 百度云:点这里下载 备用:pan.baidu.com/s/1gls2G4rqWWP-Mw-z6tVjnQ?pwd0000 常见型号如下: G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1…

2026/8/2 6:34:54阅读更多 →
xAI人才流失启示:AI团队管理与技术精英职业选择深度分析

xAI人才流失启示:AI团队管理与技术精英职业选择深度分析

1. 项目概述:一场顶级AI人才地震的深度复盘最近科技圈最炸裂的消息,莫过于马斯克旗下xAI公司爆发的“创始人离职潮”。短短24小时内,两位联合创始人相继出走,而将时间线拉长到一个月,这已经是第三位华人创始成员离开。…

2026/8/2 6:32:54阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →