Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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…
• メールを送る
• 解析データを送...
どんなことに使ってるの?
serverengine sidekiq AWS lambda
• 動画の変換
• 解析データキャッシュ
• 定期決済
• push予約の監視
• InApp対象者の更新
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)
en...
Avoid memory leak
• (rubyの設定で解決できると思うけど)fragmentationが
溜まるので定期的に強制GC
class worker
…
def run
begin
GC.stop
cycle
ensure
GC....
Zombi process
• long poling中にdeployを連続すると、zombiができる
serverengine
serverengine.pid
Kill
Kill
1回目
2回目
start
start
polling中
s...
Memory Usage
• serverengineはprocess modelなので、rails全部乗っけて
るとプロセス分メモリをいっぱい食べる。
worker
worker
serversupervisor
これ監視系じゃないし
sidekiqでもよかったんじゃ?
でした
serverengine sidekiq AWS lambda
• 動画の変換
• 解析データキャッシュ
• 定期決済
• push予約の監視
• InAppのターゲット更
新
• 動画の変換
• メールを送る
• 解析データを送る
•...
まとめ
• serverengine使うとdaemonがサ
クッとできる
rails + serverengineで
お手軽daemon
Upcoming SlideShare
Loading in …5
×

rails + serverengineで
お手軽daemon

1,460 views

Published on

rails + serverengineで
お手軽daemon

Published in: Technology
  • Be the first to comment

rails + serverengineで
お手軽daemon

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

×