rails + serverengineでお手軽daemon
TRANSCRIPT
![Page 1: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/1.jpg)
rails + serverengineで
お手軽daemon
Akira Miki Repro Inc.
shinjuku.rb #29@metaps Sep 30, 2015
![Page 2: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/2.jpg)
Akira Miki Repro
@treetreeslight
![Page 3: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/3.jpg)
![Page 4: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/4.jpg)
解析から解決までサクッと
![Page 5: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/5.jpg)
About job
![Page 6: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/6.jpg)
Reproで使っているjob群
serverengine sidekiq AWS lambda
監視して発火制御したい 並列数を制限したい
並列数を制限しない ガンガン処理したい
S3などのAWSツール群とシームレスな連携してガシガシ処理したい
![Page 7: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/7.jpg)
どんなことに使ってるの?
serverengine sidekiq AWS lambda
•動画の変換 •解析データキャッシュ •定期決済 •push予約の監視 • InApp対象者の更新 etc…
•メールを送る •解析データを送る •配信データの作成 etc…
•Push送る etc…
![Page 8: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/8.jpg)
どんなことに使ってるの?
serverengine sidekiq AWS lambda
•動画の変換 •解析データキャッシュ •定期決済 •push予約の監視 • InApp対象者の更新 etc…
•メールを送る •解析データを送る •配信データの作成 etc…
•Push送る etc…
![Page 9: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/9.jpg)
選定経緯をプロトタイプ時代の
「恥ずかし~~~い」失敗談も踏まえて
![Page 10: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/10.jpg)
プロトタイプだしとりあえず
cron
Rake script
SQSSDK
1分単位だよぉ
![Page 11: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/11.jpg)
あれ?メモリ溢れてね?
![Page 12: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/12.jpg)
そりゃrails分requireしてrake叩と メモリめっちゃ食うよね!!
プロトタイプとはいえ雑すぎた!!!
![Page 13: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/13.jpg)
プロトタイプとはいえちょっとは気を使っておくか
cron
SQSSDK Server
隠しURL
![Page 14: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/14.jpg)
CPUやるきだしてる・・・?
![Page 15: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/15.jpg)
ffmpegって限界までCPU使うからね!
プロトタイプとはいえ雑すぎた!!!
![Page 16: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/16.jpg)
ちゃんとする期
• railsのmodel資産を使いまわし
• ffmpegがCPUを食い尽くすので並列数は制限しつつ
• Rails requireのメモリのオーバーヘッドは最小限に
• 自前でdaemonラッパー書いても良いけど、シグナル制御系とか書くのめんどい <- 一番コレ
![Page 17: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/17.jpg)
serverengine
![Page 18: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/18.jpg)
serverengine 使いやす!!!
SQSSDK serverengine
long poling
•やることに合わせてworker数調整しつつ •superviser -> 親 -> 子という素敵構成 •ログまわりやシグナルによるプロセス制御までバッチリ
![Page 19: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/19.jpg)
気をつけたこと
![Page 20: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/20.jpg)
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しながら止まらず前進
![Page 21: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/21.jpg)
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
![Page 22: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/22.jpg)
Zombi process• long poling中にdeployを連続すると、zombiができる
serverengine
serverengine.pid
Kill
Kill
1回目
2回目
start
start
polling中
serverengine.pid
Override
![Page 23: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/23.jpg)
Memory Usage• serverengineはprocess modelなので、rails全部乗っけてるとプロセス分メモリをいっぱい食べる。
worker
worker
serversupervisor
![Page 24: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/24.jpg)
これ監視系じゃないし sidekiqでもよかったんじゃ?
![Page 25: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/25.jpg)
でした
serverengine sidekiq AWS lambda
•動画の変換 •解析データキャッシュ •定期決済 •push予約の監視 • InAppのターゲット更新
•動画の変換 •メールを送る •解析データを送る •配信データの作成 etc…
•Push送る etc…
![Page 26: rails + serverengineでお手軽daemon](https://reader030.vdocuments.mx/reader030/viewer/2022020108/586fdf311a28ab18428b6ec5/html5/thumbnails/26.jpg)
まとめ
• serverengine使うとdaemonがサクッとできる