Linux io_uring サブシステムを使用した hinsightd HTTP サーバーの導入

コンパクトな HTTP サーバー hinsightd が公開されました。これは、Linux カーネルで提供される io_uring 非同期 I/O インターフェイスを使用することで注目に値します。 このサーバーは HTTP/1.1 プロトコルをサポートし、需要の高い機能を提供しながらリソース消費を抑えるように設計されています。 たとえば、hinsightd は、TLS、リバース プロキシ (rproxy)、ローカル ファイル システムで動的に生成されたコンテンツのキャッシュ、送信データのオンザフライ圧縮、確立された接続を切断せずに再起動すること、FastCGI および CGI メカニズムを使用した動的リクエスト ハンドラーの接続をサポートしています。 プロジェクト コードは C で書かれており、BSD ライセンスに基づいて配布されます。

構成を処理し、追加を記述し、リクエスト ハンドラーを作成するには、Lua 言語を使用することができ、そのようなハンドラーはサーバー構成ファイルで直接定義できます。 プラグインの形式では、ログ記録形式の変更、個々のログの仮想ホストへのリンク、負荷分散戦略の定義、HTTP 認証、URL 書き換え、スケジュールされた作業 (Let's Encrypt 証明書の更新など) の実行などの機能が実装されます。

サーバーには、hinsightd 機能をアプリケーションに統合するためのライブラリが付属しています。 Hinsightd には、コマンド ラインから HTTP リクエストを送信するための統合機能も含まれています。たとえば、「hinsightd -d URL」コマンドを実行してページをロードできます。 サーバーは非常にコンパクトで、コンパイルされた形式で約 200KB を占有します (100KB の実行可能ファイルと 100KB の共有ライブラリ)。 外部依存関係には libc、lua、liburing、zlib のみが含まれ、オプションで openssl/libressl と ffcall も含まれます。

今後の開発計画には、圧縮ファイルのキャッシュ機能、システムコールのフィルタリングと名前空間の使用に基づくサンドボックス分離、トラフィックシェーピング、マルチスレッド、エラー処理の改善、マスクベースの仮想ホスト検出などが含まれる。

250 および 500 (括弧内) の並列リクエスト (「ab -k -c 250 -n 10000 http://localhost/」) を実行したときの、ab ユーティリティによる総合パフォーマンス テストの結果 (構成をそのままの最適化なし):

  • hinsightd/0.9.17 – 63035.01 秒あたり 54984.63 リクエスト (XNUMX)
  • lighttpd/1.4.67 - 53693.29 秒あたり 1613.59 リクエスト (XNUMX)
  • Apache/2.4.54 - 37474.10 秒あたり 34305.55 リクエスト (XNUMX)
  • Caddy/2.6.2 – 35412.02 秒あたり 33995.57 リクエスト (XNUMX)
  • nginx/1.23.2 - 26673.64 秒あたり 26172.73 リクエスト (XNUMX)

出所: オープンネット.ru

コメントを追加します