More Related Content
Similar to Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話 (20)
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
- 2. Shinjuku.rb #29 LT?
• 竹内 雄一@大宮
• フリーランス WEBエンジニア
(受託メイン 設計~運用)
• Ruby on Rails 1.1ぐらいから
• そのほかCMS AWS 鯖管 など
• むかしつくったもの
• rack-ketai … jpmobileがrack対応してなかった時のやつ
• KetaiPost … Movable Typeでメール投稿するやつ
お世話になった本たち@takeyuweb
- 7. What’s ActiveJob ?
• Rails標準のキューイング仕様(4.2~)
• 時間のかかる処理を裏でやるやつ
• これまでいろんなgemがありそれぞれのやり方を覚える必要があった
• BackgrounDRb / Resque / Delayed Job / Sidekiq / Sucker Punch etc…
• 標準があることで書き方を統一できて嬉しい
- 11. こないだの案件の場合
• AWS
• Redisの管理をしたくない
• ワーカーを動かすインスタンスのスケールアウトを可能に
• Amazon Simple Queue Service (SQS)
• ジョブキューの出し入れ、排他制御
• 追記 ジョブ完了後メッセージを削除しないと、
可視性タイムアウト終了後再度落ちてくる
• ジョブキュー専用に設計されてて使いやすく堅牢
• Amazon Lambdaなどとの連携も
• フルマネージド
• スケールアウトが容易
- 13. ActiveJobとAmazon SQSをつなぐ
• aws sdkを使ってアダプタを自作した
• Active Job meets Amazon SQS
http://takeyuweb.hatenablog.com/entry/2014/12/11/043515
• ジョブをSQSから取り出してActiveJobのジョブを実行するスクリプトを
書く
• job_data = JSON.parse(message[:body])
ActiveJob::Base.execute(job_data)
• ただのスクリプトなので、このままでは落ちたら終わり
• 永続(サービス)化が必要
※今ならshoryukenというSQSを利用したgemがあるのでそれを使えば多分楽(永続化もある)
- 17. Godの設定
# config/god.rb
ROOT_DIR = ENV['RAILS_ROOT'] || File.expand_path(File.join(File.dirname(__FILE__), '..'))
God.pid_file_directory = File.expand_path(File.join(ROOT_DIR, 'tmp/pids')) + '/'
God.watch do |w|
w.name = 'activejob_worker_server'
w.dir = ROOT_DIR
w.uid = 'deploy'
w.env = ENV.to_h
# 実行するServerEngineなスクリプト
w.start = "bundle exec ruby bin/activejob_worker_server“
# STOPコマンド後待機する秒数 これを超えたら強制終了
w.stop_timeout = 60.seconds
# その他メモリ管理とかいろいろ
end
- 18. デプロイ
• AWS OpsWorks
• カスタムCookbookを書く
• LayerをみてWorker用のやつなら以下
• godなどインストール
• デプロイ後の god terminate & god -c ..