by shigemk2

当面は技術的なことしか書かない

memo: Fluentd ServerEngine Integration & Windows Support #fluentdmeetup

@naritta

ServerEngine is integrated

  • ServerEngine supervisor→server→worker
    • heartbeat via pipe
    • auto-restart
    • unicornと使い方は似ている
  • worker type thread/process/spawn
  • v0.14からspawnのworker typeを利用
  • Windowsにはforkの機能はないので、個別のプロセスを利用する

ServerEngineのメリット

AutoRestart

  • supervisorからworkerを死活監視→自動再起動
    • pstreeで確認できるよ
    • windowsでも同様に動くよ

LiveRestart

  • serverからworkerを自動再起動できる
  • workerをキル→再起動→読みなおし→別のworkerにシェア
  • send SIGHUP
  • RPC Serverとシグナル
  • api/config.reload
  • supervisor/server/worker
    • send USR2
    • 再起動無しで設定ファイルをリロードできる

Socket Manager

  • Socket Managerのほうにリクエストを飛ばす
  • 開いている場合は開く、ない場合は作る
    • UDS(unix)/TCP(Win)
  • get socket and accept in worker
  • server engine側のAPIを利用して、ServerEngine::SocketManagerと記述すると使える
  • server workerのすてきな関係

  • 最大のメリットは将来的にはマルチコアでソケットを使えること

  • マルチプロセスプラグインだとsourceが増えて面倒なのが、socketmanagerをつかうと1つのsourceになって実装がかなり楽になる
    • 将来的にはマルチコアを自由に設定出来るようにする
    • serverとworkerのプロセス関係はWindowsでも使える

Signal Handler

  • キューベースのシグナルハンドリング
    • シグナル同士の競合を防ぐ

Log Rotation

  • もともとServerEngineで実装されていたもの
  • ログローテーションをより簡単に
  • 細かいログレベルのトレースが出来る

まとめ

  • Live Restart/Auto Restart
  • Socket Manager
  • Signal Handler
  • Log Rotation

Windows(Unixで出来ることがWindowsでは出来ないため)

  • signal → rpc handler
  • no socket FD and UDS
  • fork based → spawn based