【发布时间】:2013-09-03 16:14:03
【问题描述】:
我们在使用 Amazon SWF 的新 Ruby-Flow 包装器时遇到问题。
问题是工作流和活动工作人员将(每小时数次)无法与 SWF 服务器正确通信。这体现在各种方面:
- 工作流或活动在新版本启动时无法注册
- 工作流或活动工作者将崩溃
- activity worker 会完成一个任务,然后在报告完成的时候报错,所以整个执行失败。
对于工人崩溃(任何一种),我们看到以下内容:
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 实例上。
是否有我应该调查的根本原因?
是否有允许我重试这些通信的模式或设置?
【问题讨论】: