rails + serverengineでお手軽daemon
Post on 16-Apr-2017
1.103 Views
Preview:
TRANSCRIPT
rails + serverengineで
お手軽daemon
Akira Miki Repro Inc.
shinjuku.rb #29@metaps Sep 30, 2015
Akira Miki Repro
@treetreeslight
解析から解決までサクッと
About job
Reproで使っているjob群
serverengine sidekiq AWS lambda
監視して発火制御したい 並列数を制限したい
並列数を制限しない ガンガン処理したい
S3などのAWSツール群とシームレスな連携してガシガシ処理したい
どんなことに使ってるの?
serverengine sidekiq AWS lambda
•動画の変換 •解析データキャッシュ •定期決済 •push予約の監視 • InApp対象者の更新 etc…
•メールを送る •解析データを送る •配信データの作成 etc…
•Push送る etc…
どんなことに使ってるの?
serverengine sidekiq AWS lambda
•動画の変換 •解析データキャッシュ •定期決済 •push予約の監視 • InApp対象者の更新 etc…
•メールを送る •解析データを送る •配信データの作成 etc…
•Push送る etc…
選定経緯をプロトタイプ時代の
「恥ずかし~~~い」失敗談も踏まえて
プロトタイプだしとりあえず
cron
Rake script
SQSSDK
1分単位だよぉ
あれ?メモリ溢れてね?
そりゃrails分requireしてrake叩と メモリめっちゃ食うよね!!
プロトタイプとはいえ雑すぎた!!!
プロトタイプとはいえちょっとは気を使っておくか
cron
SQSSDK Server
隠しURL
CPUやるきだしてる・・・?
ffmpegって限界までCPU使うからね!
プロトタイプとはいえ雑すぎた!!!
ちゃんとする期
• railsのmodel資産を使いまわし
• ffmpegがCPUを食い尽くすので並列数は制限しつつ
• Rails requireのメモリのオーバーヘッドは最小限に
• 自前でdaemonラッパー書いても良いけど、シグナル制御系とか書くのめんどい <- 一番コレ
serverengine
serverengine 使いやす!!!
SQSSDK serverengine
long poling
•やることに合わせてworker数調整しつつ •superviser -> 親 -> 子という素敵構成 •ログまわりやシグナルによるプロセス制御までバッチリ
気をつけたこと
Exception
def cycle invoke end def invoke( *arguments ) execute( *arguments ) rescue => error report_exception(error) end
def execute( *arguments ) raise NotImplementedError end
def report_exception(error) # logging, rollbar, newrelic ... end
• handleしながら止まらず前進
Avoid memory leak• (rubyの設定で解決できると思うけど)fragmentationが溜まるので定期的に強制GC
class worker … def run begin GC.stop cycle ensure GC.start end rescue Exception => error report_exception error end … end
Zombi process• long poling中にdeployを連続すると、zombiができる
serverengine
serverengine.pid
Kill
Kill
1回目
2回目
start
start
polling中
serverengine.pid
Override
Memory Usage• serverengineはprocess modelなので、rails全部乗っけてるとプロセス分メモリをいっぱい食べる。
worker
worker
serversupervisor
これ監視系じゃないし sidekiqでもよかったんじゃ?
でした
serverengine sidekiq AWS lambda
•動画の変換 •解析データキャッシュ •定期決済 •push予約の監視 • InAppのターゲット更新
•動画の変換 •メールを送る •解析データを送る •配信データの作成 etc…
•Push送る etc…
まとめ
• serverengine使うとdaemonがサクッとできる
top related