时序图说明
以下时序图展示了 Orleans 流系统中握手机制的完整流程,包括正常情况和异常情况的处理。
1. 正常握手流程
2. 新订阅握手流程
3. 异常处理流程
4. 重试机制流程
5. 消息投递流程
6. 故障恢复流程
7. 状态同步流程
8. 关键设计决策说明
8.1 为什么使用无限重试?
- 可靠性优先:握手失败意味着消息投递失败
- 网络不稳定:分布式环境中网络问题很常见
- 消费者重启:消费者可能暂时不可用
8.2 为什么需要 MoveNext()?
- 避免重复:令牌指向已处理的消息
- 连续性保证:确保从下一个未处理消息开始
- 状态一致性:保持消费者和代理状态同步
8.3 为什么需要备用方案?
- 容错性:握手失败时系统仍能工作
- 降级策略:从已知安全位置开始
- 系统可用性:避免因握手失败导致整个系统停止
8.4 为什么保存 LastToken?
- 下次握手参考:为下次握手提供基准
- 状态追踪:监控消费者状态变化
- 性能优化:减少重复的状态查询
9. 性能优化点
- 异步处理:所有操作都是异步的,避免阻塞
- 状态缓存:缓存常用状态信息,减少存储访问
- 批量操作:支持批量消息投递
- 智能重试:使用退避算法避免过度重试
- 资源管理:及时释放不需要的资源
10. 监控指标
- 握手成功率:成功握手次数 / 总握手次数
- 握手延迟:从开始握手到完成的时间
- 重试次数:平均重试次数
- 错误率:握手失败的比例
- 消息投递延迟:从握手完成到开始投递的时间
这个握手机制确保了 Orleans 流系统在复杂的分布式环境中能够可靠、高效地处理消息投递。