@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