参与者节点处于Draining Mode时FinalityFlow行为及Corda版本差异咨询
结论
你描述的交易分发阻塞问题并非开源Corda独有,Corda Enterprise的默认FinalityFlow实现也存在完全相同的运行表现。
逻辑说明
- 开源Corda和Corda Enterprise的核心交易最终确认逻辑是对齐的,默认
FinalityFlow都会按照getParticipants()返回的列表顺序串行向参与者推送交易通知。只要列表中某一个节点处于Draining Mode、离线或无响应,整个推送流程就会卡在该节点上,排在其后面的所有参与者哪怕运行完全正常,也暂时收不到交易通知,和你的推论一致。 - Corda Enterprise没有在默认实现中针对这个场景做额外的失败隔离优化,所以也会出现正常节点被故障节点牵连收不到通知的问题。
规避方案
如果要避免第三方节点故障影响正常参与者的交易接收,可以自行改造FinalityFlow的分发逻辑:
- 把默认的串行推送改为并行向所有参与者推送交易
- 给每个节点的推送逻辑设置独立的超时、重试规则,单个节点推送失败后标记为待补发任务,不要阻塞其他节点的通知流程
内容的提问来源于stack exchange,提问作者Tywin Lannister
相关产品推荐
相关产品推荐

