0

Amazon SWF の新しい Ruby-Flow ラッパーに問題があります。

問題は、ワークフロー ワーカーとアクティビティ ワーカーが (1 時間に数回) 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 通信の問題です。SO には、Twitter API との通信に関する同様の問題があります。

繰り返しますが、これは SWF タイムアウトの期限切れの問題ではありません。ワークフローのタイムアウトは 1 日で、各アクティビティのタイムアウトは 1 時間です。障害は、その境界内で十分に発生します。

残念ながら、ほとんどの場合は機能します。通常はワークフローの実行を開始できますが、この種のエラーが頻繁に発生するため、簡単なジョブ以外は何も完了できません。エラーは十分にランダムであるため、トラブルシューティングは非常に困難です。

これを別のマシンで、別のネットワークから再現しました。開発中の SWF をまだ試しているため、失敗したワーカーは EC2 インスタンスにはありません。


調査すべき根本的な原因はありますか?
これらの通信を再試行できるパターンまたは設定はありますか?

4

1 に答える 1