关于排队机定序问题,再请教下老师

来源:10-3 Disruptor的使用入门-1

慕少4057723

2023-10-19

抱歉可能我的问题没有描述清楚,我的意思是排队机从网关抓取订单在内存中排序的时候,举个例子比如网关中有1万笔订单,排队机内存只能完成1千笔订单的排序,是否会出现内存不够用无法完成当前所有订单的排序的情况 ?

关于排队机定序过程中的故障问题:
排队机按照 抓单–>定序–>insertToKvStore(入库) 进行处理
也就是说一笔委托真正能成功进排队机的前提是需要代码一直完成调用 insertToKvStore 入库才算是完成其他raft节点的同步哦,如果在排序之后但在调用insertToKvStore之前,也就是说还没有入库的时候系统crash 了,那以前的委托订单会有丢失呢 ?

简单说就是:
排队机 RPC抓单完成,此时网关的内存队列的数据其实已经清除了因为抓单执行完毕了,然后排队机开还没完成定序就crash 了,也就是说程序还没有机会调用 insertToKvStore, 此时数据并没有存入 sofa kv数据库,也就是未完成其他raft节点的数据同步,此时因为leader挂了,其余的raft节点重新选举出一个新的leader,那新leader 如果继续完成之前的未完成的老订单的定序任务呢?

不知道我是否描述清除我的问题 :)

写回答

1回答

Gudy

2023-10-20

  1. 你假设的情况是排队机变成了流量瓶颈,在实际工作中会尽力避免这种情况,在整个项目立项初期就会在硬件(内存,CPU,IO)上面做好规划。在代码层面,排队机是可以增加流量控制的(这个在课程里面没有体现),它能监控自身队列的情况决定从网关接收委托单的频率,不会挤爆自己的内存导致程序crash。

  2. 你的理解是对的,这个时候会存在丢失委托单的情况,更加可靠的做法是insertToKvStore成功之后再通知gateway

1
1
慕少4057723
非常感谢!
2023-10-20
共1条回复

SpringCloud+Vertx+Disruptor 撮合交易系统实战

独家掌握金融业务系统知识,培养金融IT工程师核心竞争力

488 学习 · 149 问题

查看课程