Amazon SWF 的新 Ruby-Flow 包装器存在问题。
问题是 Workflow 和 Activity 工作人员将(每小时数次)无法与 SWF 服务器正确通信。这体现在各种方面:
- 当新版本的工作人员启动时,工作流或活动无法注册
- 工作流或活动工作者将崩溃
- 活动工作者将完成一项任务,然后在报告完成时出错,因此整个执行失败。
对于工人崩溃(任何一种),我们看到以下内容:
andy@Andy-MBP:Crucible $RAILS_ENV=development rake crucible:swf:ingress_wf_start
rake aborted!
execution expired
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/http/connection_pool.rb:301:in `start_session'
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/http/connection_pool.rb:125:in `session_for'
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/http/net_http_handler.rb:52:in `handle'
/Users/andy/.rvm/gems/ruby-1.9.3-p448@rails3/gems/aws-sdk-1.11.1/lib/aws/core/client.rb:238:in `block in make_sync_request'
当失败涉及未能更新任务已完成的服务器时,回溯非常相似。
这本身似乎不是 SWF 问题(也就是说,它不是活动执行的超时);这是一个 Ruby HTTP 通信问题。与 Twitter API 通信的 SO 也存在类似问题。
同样,SWF 超时过期也不是问题。工作流的超时时间为一天,每个活动的超时时间为一小时。故障发生在该边界内。
不幸的是,它大部分都有效,我通常可以启动工作流执行,我只是经常遇到这种错误,以至于我们除了琐碎的工作之外什么都做不了。这些错误非常随机,因此故障排除非常困难。
我们已经在不同的机器和不同的网络上复制了这个。我们仍在尝试开发中的 SWF,因此没有任何失败的工作人员位于 EC2 实例上。
是否有我应该调查的根本原因?
是否有允许我重试这些通信的模式或设置?