【发布时间】:2020-01-27 18:05:54
【问题描述】:
我在多个服务器上部署了一个微服务,它有两个主要的数据源:
以高容量(100-1000 事件/秒)持续 (24/7/365) 接收事件
一天一次的操作,可能需要一点时间才能完成
我想以独占模式运行这个一天一次的处理:暂停事件处理,运行一天一次的任务,然后恢复事件处理。我已经有办法正确启动一天一次的操作,但我仍然必须在 1 和 2 之间实现锁定以确保排他性。
我发现的大多数 ZooKeeper 配方都需要对每个已处理的事件进行写入操作,例如使用InterProcessReadWriteLock 读取锁定获取或使用DistributedAtomicLong 增加计数器。由于每天一次的操作很少发生,因此每个事件的开销似乎很浪费。
是否有针对此类用例优化的 ZooKeeper/Curator 收据?
我考虑过,但我不能 100% 确定这是否是正确的方法(以及如何实施下面的第 2 点):
- 当一天一次的操作开始时,在 ZooKeeper 中创建新的
/exclusive路径 - 等待所有机上活动完成
- 在处理事件之前检查
/exclusive是否存在。如果它在那里停止处理,直到/exclusive路径被删除 - 当一天一次结束时,删除
/exclusive路径
【问题讨论】:
标签: java apache-zookeeper apache-curator