Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NGINXENG JP#2 - 2-NGINXの動作の詳細

hiropo20
January 26, 2023

NGINXENG JP#2 - 2-NGINXの動作の詳細

■NGINX-エンジニアリング勉強会#2
https://nginx-eng.connpass.com/event/270365/

その他のイベント資料や動画などイベントページをご覧ください。

hiropo20

January 26, 2023
Tweet

More Decks by hiropo20

Other Decks in Technology

Transcript

  1. ©2022 F5 2 NGINXとは nginx(「エンジンエックス」のように発音[1][2]) は、フリーかつオープンソースなWebサーバであ る。処理性能・高い並行性・メモリ使用量の小さ さに焦点を当てて開発されており、 HTTP, HTTPS,

    SMTP, POP3, IMAPのリバースプ ロキシの機能や、ロードバランサ、HTTPキャッ シュなどの機能も持つ。 出典: フリー百科事典『ウィキペディア(Wikipedia)』 作者 Igor Sysoev 開発元 Nginx Inc. 初版 2004年10月4日 (18年前) 最新版 1.22.1 最新評価版 1.23.0 リポジトリ •hg.nginx.org/nginx プログラミング 言語 C言語 対応OS Unix系、Microsoft Windows 種別 Webサーバ、 リバースプロキシ ライセンス BSDライク 公式サイト nginx.org, Nginx Inc. https://ja.wikipedia.org/wiki/Nginx
  2. ©2022 F5 3 NGINXとは HTTPS/gRPC App TCP/UDP SMTP HTML File

    WEBサーバ / Path Routing / キャッシュ / 通信の細かな制御により、 高速 安定 高機能 高機能なReverse Proxy / キャッシュサーバ Load Balancing / API Gateway として利用可能 このNGINXについて 動作を分解します
  3. ©2022 F5 5 NGINXが提供するソフトウェア NGINX Plus NGINX OSSをベースに、さらなるエンタープライズユースに対応したソフトウェア (分散・冗長性・JWT制御・API制御 に加え、各種セキュリティモジュールの利用が可能)

    NGINX Management Suite NGINX統合管理ソフトウェア。NGINX PlusによるAPI管理 NGINX Instance Manager NGINX OSS、NGINX Plusの統合管理。ヒストリカルなAPM機能、コンフィグ・証明書管理、 管理対象のNGINX OSS / NGINX Plusに対するAPI制御機能を提供 NGINX App Protect WAF F5が提供する、ミッションクリティカル環境に最適な高速な高品質なWAF NGINX App Protect DoS 従来のツールでは検知できないレイヤー7のDoS脅威から高度な保護を提供 NGINX Ingress Controller Kubernetes環境での高度な通信制御を提供。NGINX機能をIngressリソースを通じて管理可能。 NGINX Service Mesh NGINX Plusによるコンテナ間の制御を提供するシンプルなサービスメッシュソリューション NGINX for Azure NGINX PlusをAzureからSaaS環境として提供、コンフィグを貼り付けるだけで活用が可能 All-In-One SW Overview NGINX OSS Dev/Opsに最適な、超軽量・高速・多機能なAll-In-One Software NGINX Unit 動的かつ分散アプリケーション環境向けに設計されたアプリケーションサーバ NJS (NGINX JavaScript) NGINXの機能を拡張するJavaScript言語のサブセットモジュール NJS Open Source Security Container SaaS
  4. ©2022 F5 6 主要NGINXソフトウェアの構成イメージ App Proxy Client App NJS オンプレミス

    クラウド・コンテナ K8S(コンテナ・NIC) NGINX OSS 環境 App HTTP gRPC etc TCP/ UDP NGINX Plus App オンプレミス クラウド・コンテナ K8S(コンテナ・NIC) App WAF DOS NJS HTTP gRPC etc TCP/ UDP NGINX Unit App オンプレミス クラウド・コンテナ K8S(コンテナ) JS Ruby Go Java Perl PHP Python HTTP NGINX Ingress Controller Pod K8S(NIC) Pod WAF DOS NJS HTTP SMTP etc TCP/ UDP NGINX Service Mesh K8S(NSM) C HTTP gRPC TCP/ UDP Container Container C JWT/OIDC/ActiveHC/ Cookie Persistence/ より詳細なMetrics/ メーカーSupport OSS
  5. ©2022 F5 8 NGINX OSS – リリースサイクル NGINX OSSは、mainline(奇数)とstable(偶数)の二種類に分かれます 毎年4月にmainlineからstableをforkします。以降のリリースVersionが新しい番号へ更新されます

    NGINX Plusは、NGINX OSSと別のレポジトリで管理されています。mainlineからforkされます NGINXはmainlineの利用を推奨しますが、更新頻度などの観点からstableの利用も可能です 1year 1year ここが「mainline」 頻繁な機能追加
  6. ©2022 F5 9 R26 R27 R28 NGINX Plusは、NGINXメインラインでテスト・実証された、すべてのOSS新機能を取り入れます。 NGINX Plusは、年3回バイナリパッケージがリリースされます。

    NGINX Plusは、エンタープライズ向けの追加機能と商用サポート(英語、日本語)が含まれています。 NGINX Plusは、リリースから2年間サポートされます。 NGINX Plus – リリースサイクル https://docs.nginx.com/nginx/releases/ N+は「mainline」を Mergeしている 1.21.5 1.21.6 1.23.2
  7. ©2022 F5 11 コンテナプラットフォームに最適なNGINX Technology Source: Datadog Container Report 2022

    Top Ingress Providers CNCF Survey Source: CNCF Survey 2020 安定・高速動作がクラウドネイティブ環境に最適 実績
  8. ©2022 F5 12 柔軟に拡張できる最高のパフォーマンス HARDWARE SPECS EXPECTED PERFORMANCE 2 CPU

    cores 4 GB RAM 2x10 GbE NIC 74,000 RPS 9,100 SSL TPS (ECC) 4 Gbps throughput 4 CPU cores 8 GB RAM 2x10 GbE NIC 150,000 RPS 17,600 SSL TPS (ECC) 8 Gbps throughput 8 CPU cores 16 GB RAM 2x10 GbE NIC 300,000 RPS 33,000 SSL TPS (ECC) 8 Gbps throughput HARDWARE SPECS EXPECTED PERFORMANCE 2 CPU cores 4 GB RAM 2x1 GbE NIC 90,000 RPS 4,500 SSL TPS (ECC) 1 Gbps throughput 4 CPU cores 4 GB RAM 2x40 GbE NIC 175,000 RPS 8,500 SSL TPS (ECC) 5 Gbps throughput 8 CPU cores 4 GB RAM 2x40 GbE NIC 350,000 RPS 16,000 SSL TPS (ECC) 40 Gbps throughput 0 2000 4000 6000 8000 10000 12000 14000 16000 18000 系列1 0 50000 100000 150000 200000 250000 300000 350000 400000 系列1 0 5000 10000 15000 20000 25000 30000 35000 系列1 0 50000 100000 150000 200000 250000 300000 350000 系列1 2 Core 4 GB 4 Core 4 GB 8 Core 4 GB 2 Core 4 GB 4 Core 8 GB 8 Core 16 GB https://www.nginx.com/resources/datasheets/nginx-plus-sizing-guide/ https://www.nginx.com/resources/datasheets/nginx-ingress-controller-kubernetes/ ベアメタル:CPU/メモリに応じて様々な規模に柔軟な対応 Ingress Controller:アプライアンスに相当する高速・安定な処理 安定・拡張性
  9. ©2022 F5 14 NGINXのプロセス・ファイル Master Process Worker Process Worker Process

    Cache Manager Config File HTML File OS Cache Loader Cache File /etc/nginx /var/www /tmp/cache /conf.d file socket file process OS Worker Processを含む 全体のプロセス管理 クライアントからの 接続・リクエスト・転送 など通信処理を実施 プロセス起動時の キャッシュのロード・ キャッシュファイル管理 設定ファイル access.log /var/log/nginx/ error.log HTMLファイル ログファイル キャッシュ ファイル
  10. ©2022 F5 15 NGINXのプロセス・ファイル Master Process Worker Process Worker Process

    Cache Manager OS Cache Loader UID PID PPID CMD root 8882 1 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 8883 8882 nginx: worker process nginx 8884 8882 nginx: worker process nginx 8885 8882 nginx: cache manager process nginx 8886 8882 nginx: cache loader process socket file process OS PSコマンド出力抜粋 ※ Cacheに関する設定をを行いNGINXを起動した際に、 Cache関連のプロセスが動作します
  11. ©2022 F5 16 NGINXの設定のロード・反映 Master Process Worker Process Worker Process

    Config File HTML File OS /etc/nginx /var/www /conf.d file access.log /var/log/nginx/ error.log #nginx –s reload 設定ファイルの読み込み 設定ファイルの 構文チェック Worker Processへ 設定の反映 構文エラー、 プロセス再起動 など、 ログへ記録 socket file process OS
  12. ©2022 F5 17 NGINXのキャッシュファイルのロード Master Process Worker Process Worker Process

    Cache Manager Cache File OS Cache Loader Cache File Cache File Cache File /data/nginx/cache 設定の内容に応じて キャッシュファイルをロード (読み込む数など) socket file process OS
  13. ©2022 F5 18 NGINXのコネクション処理 Master Process Worker Process Worker Process

    HTML File OS OS App /var/www TCP/80 TCP/80 通信の着信を検知 設定に応じた処理 (HTML File) HTMLファイルを 読み込み 応答 通信の着信を検知 設定に応じた処理 (Proxy) 応答 アップストリームへ 通信を転送 TCP/3XXXX access.log /var/log/nginx/ 通信の結果を ログへ記録 socket file process OS
  14. ©2022 F5 19 NGINXのコネクション処理時の設定ロード Master Process Worker Process Worker Process

    OS TCP/80 TCP/80 既存コネクションは 旧プロセスで処理を 継続 新規コネクションから 新しいプロセスで処理 Worker Process TCP/80 Worker Process 設定ファイル読み込みの 影響を最小限に 抑えることができます socket file process OS OS App Config File Config File /etc/nginx /conf.d 設定ファイルの読み込み #nginx –s reload
  15. ©2022 F5 20 NGINXのコネクション処理時の設定ロード socket file process OS Master Process

    Worker Process Worker Process OS Worker Process Worker Process UID PID PPID CMD root 7813 1 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 7858 7813 nginx: worker process nginx 7859 7813 nginx: worker process PSコマンド出力抜粋 UID PID PPID CMD root 7813 1 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 7897 7813 nginx: worker process nginx 7898 7813 nginx: worker process 7858 7859 7897 7898 7813
  16. ©2022 F5 21 Config File NGINXのコネクション処理時の設定ロード+NAP Master Process Worker Process

    Worker Process OS TCP/80 TCP/80 既存コネクションは 旧プロセスで処理を 継続 新規コネクションから 新しいプロセスで処理 Config File /etc/nginx /conf.d 設定ファイルの読み込み Worker Process TCP/80 Worker Process socket file process OS NAP Process Policy File OS App #nginx –s reload
  17. ©2022 F5 22 NGINXのコネクション処理時のUpgrade Master Process Worker Process Worker Process

    OS TCP/80 TCP/80 既存コネクションは 旧プロセスで処理を継続 Worker Process Worker Process アップグレードの 影響を最小限に 抑えることができます Master Process コネクションの管理を 新旧プロセスで連携しながら実施 既存コネクションの処理完了後、 新しいプロセスへ切り替え socket file process OS
  18. ©2022 F5 24 NGINXの動作:Blocking I/O Process・Thread OS Master Process conn

    conn conn conn conn TCP/80宛に接続 OS App OS App conn • TCP/80に新規接続時、コネクション ソケットを受け付け、処理を行う プロセスやスレッドを実行 • 通信がエラー・終了となるまで処理を実行 • 各プロセス・スレッドはコネクションの 処理専用として動作する 新規接続 既存コネクションの処理 Process・Thread Process・Thread socket file process OS
  19. ©2022 F5 25 NGINXの動作:Non Blocking I/O Worker Process Worker Process

    OS Master Process conn conn conn conn conn TCP/80宛に接続 OS App OS App conn • TCP/80に新規接続時、 コネクションソケットを作成 • 新規のコネクションソケットを リストに追加 • コネクションソケットで • リクエストの読み込み>処理 • 対象ソケットへ書き込み可能>処理 • エラー・タイムアウト>ソケット削除 新規接続 既存コネクションの処理 socket file process OS CPU個数分のWorker Processが動作
  20. ©2022 F5 26 NGINX / Apache の比較 • 同時接続 150ユーザ

    • 最大約 1800rps • GETリクエストに対し静的HTMLを応答 テストシナリオ NGINX Apache nginx/1.21.6 (nginx-plus-r27-p1) Server version: Apache/2.4.41 (Ubuntu) ・MPMはPrefork