Thruster
機能
Efficient static file serving via X-Sendfile and compression モチベーション
ONCEを始めたとき、顧客がRailsアプリを簡単にパッケージ化して実行できるようにしたかった 実行とはインターネットへの公開も含む
安全かつ高速である必要がある
これまではpumaだけでは不十分で追加にweb serversを用意したりCDNを設定していた 大規模なアプリでは必要なセットアップだがそうではないことも多い
仕組み
Thrusterはpumaプロセスをラップする
thrust bin/rails serverで起動する
SSL_DOMAIN=example.com環境変数を与えることで
一部の機能のみ使うこともできる
HTTP/2をサポートしていない
ブラウザは接続ごとに一度に1つのアセットをリクエストする必要がある
ドメインごとの接続数が 6 ~ 8 に制限されるが、ほとんどのページには数十のアセットがある
必要なものをすべて取得するには複数回ラウンドトリップしなければならない
アセットを転送するときPumaはそのコンテンツをディスクからメモリにコピーし、それからメモリからネットワークに再度コピーする
これが起こっている間はPuma のスレッドの1つがコピー処理でスタックしてしまい、CPU時間とメモリを消費する NginxのようにsendfileLinuxカーネルコマンドで効率化すべき ohbarye.icon 条件によっては(?)pumaもsendfileLinuxカーネルコマンドを使うとの指摘あり