TroubleShooting - 迁移到集群环境数据错乱问题

本文探讨了从单节点系统迁移至集群环境时遇到的链式数据同步问题。介绍了因未采用分布式锁而导致的数据断链及时间戳错乱问题,并提出通过集中处理发送任务并限制发送频率的方法来解决。

最近系统出了个问题,发现系统发布出去的某一条链式结构的数据出现断链的问题,调查发现这是在单系统迁移到集群环境中没有考虑清楚导致多个节点同时修改数据而出现的错误,这里介绍下问题的来龙去脉。

我们的系统持续接受外部系统提供的产品的信息(每次一个产品),对产品信息进行加工,把加工后的产品数据按产品类型加入内存数组,每次有新产品加入数组,就需要把数组数据打包成链式结构(外部数据结构要求),然后发给其他外部系统。单节点的时候对数组的产品添加,以及整个链式数据发送在同个类中使用了synchronized,所以产品都是先添加进数组,然后再组装成链式结构发送出去,在发送过程中也不会出现数组数据被修改的可能性,系统工作正常。在搬到集群环境中后由于多个节点都可以接受产品信息,所以数组被存在了distributedmap里面,但是数组数据没有使用distributed lock来保证组装链式数据的时候数组数据不被修改,链式数据可能会出现nextlink不存在,但是数据却真实存在。

这个问题的源头是要解决多节点同时修改数据的问题,可以通过使用distribution lock来解决。

不过发现更坑爹的问题,因为每次有新产品加入数组,都会触发一次同类型产品的链表结构的组装和发送,如果网络有问题,可能会出现后发出链式数据先到下个节点。单节点的时候由于链式数据中存有创建时间戳,所以下个节点不会出现后创建的链式数据被覆盖的现象。不过对于集群环境,链式数据的时间戳不再是顺序的,当短时间很多个产品进入系统的时候,就可能发生数据多的链式数据的创建时间戳更早同时更早到达下个节点,结果就悲催的被覆盖了。

为了解决这个问题,最好的办法就把发送任务做成集群里的单节点任务 (可以参考clustertimer规范的实现),其他节点只更新distributedmap中的内存数组。同时为了防止链式数据发送过于频繁,把收到产品就发送链式数据改成每分钟检测一次是否有缓存的新产品,有才创建链式数据发送到下一个节点。

内容概要:本文围绕“考虑电能交互的冷热电区域多微网系统双层多场景协同优化配置”的Matlab代码实现展开,提出一种结合电能交互机制的双层优化模型,用于解决冷、热、电多能耦合背景下多微网系统的协同规划与运行问题。研究采用多场景分析方法应对可再生能源出力与负荷需求的不确定性,通过上层规划设备容量配置与下层优化多时段运行策略的联动,提升系统在复杂环境下的经济性、鲁棒性与能源利用效率。所提供的Matlab代码集成了建模、求解(如YALMIP+CPLEX)与结果可视化全流程,涵盖场景生成与削减、双层优化结构设计及多能流协同调度等关键技术环节,为综合能源系统优化提供了完整的算法实现与技术参考。; 适合人群:具备电力系统、综合能源系统或优化建模背景,熟悉Matlab编程与数学规划方法,正在从事相关领域科研或工程设计工作的研究生、高校研究人员及能源行业技术人员。; 使用场景及目标:①开展冷热电联供(CCHP)多微网系统的容量规划与运行优化研究;②支撑含分布式能源、储能及多能转换设备的综合能源系统多目标、多场景优化建模;③学习与复现双层优化、分布鲁棒优化及场景分析等先进优化方法在能源系统中的实际应用。; 阅读建议:建议结合配套文献与代码同步研读,重点理解双层模型的构建逻辑、变量耦合关系与求解技巧,关注场景生成方法与YALMIP调用细节,通过调整参数、修改目标函数等方式进行仿真实验,以深化对系统优化机理的掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值