在分布式应用程序中维护状态

时间:2015-09-04 11:10:49

标签: ruby asynchronous distributed celluloid

我正在使用zeromq,celluloid创建一个异步应用程序。我需要维护依赖于某些响应的不同任务的状态。我可以通过在响应参数中发送有关状态的数据来实现。但有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

使用唯一标识的Conditions等待回复。

这个问题非常抽象/模糊,所以我会尽力给你一个功能性的例子。如果我理解/猜测正确,这就是你需要做的事情:

  1. 在提出请求之前生成UUID Celluloid::Internals::UUID.generate
  2. 打包请求数据,并发送带有数据的UUID
  3. 创建与Condition相关联的UUID
  4. 发送请求。
  5. 处理请求,保持UUID与之关联。
  6. 返回响应,向UUID发送回复数据。
  7. 处理通用(未声明)级别的响应...然后使用返回的数据发信号通知Condition,将Condition定位在线程安全的Hash中{ {1}}。
  8. 通过在所述对象中阻止UUID而不是直接处理响应,在所述对象中接收所需的数据。
  9. 陈述的对象应该不知道wait这是设计无状态的...它应该与一个层进行通信,该层发出请求,接收响应,并将响应传递给要求它的对象,没有声明的对象失去其状态,并且没有在请求或响应中传递状态信息。

    即将推出的ECell大量使用此策略。希望您已经使用celluloid-zmq gem来支持已经0MQ支持。