ホームページ バックエンド開発 PHPチュートリアル nginx イベント駆動型モデルへの参入

nginx イベント駆動型モデルへの参入

Jul 29, 2016 am 09:06 AM
epoll events nginx

最近、私はアリ・タオ・ホイ先輩が書いた「nginxの徹底理解」でnginxのイベントモジュールを読んでいました。私がこのコンテンツを読みたい理由は、nginx が巨大な同時接続を処理できること、そしてその背後にあるイベント ドライバーがどのように構築されているかを見たいからです

nginx について話すために大量のコードを投稿したくないからです。このブログ記事はイベント駆動型であり、私はそこまで完全には理解していないかもしれませんし、読者がすぐに知識を理解するのはさらに難しいでしょう。そのため、将来のサーバー プログラムの開発に役立つと思われるいくつかのことを簡単に要約します。知識ポイント

nginx の epoll モデルについて簡単に説明します

この記事では、epoll を例としてのみ取り上げます

nginx は、接続イベントが相対的なものであるため、通常のサーバー設計では新しい接続イベントを処理するために epoll をイベント ドライブの基礎として使用します。機密性が高い (高速応答に対する高い要件) ため、接続を特別に処理するための別のスレッド (プロセス) を開き、接続を取得し、それを各 I/O 多重化スレッドに配布します。ただし、nginx は接続イベントを処理し、他のイベントも処理します。同じ I/O 多重化の下で、接続イベントの応答要件はどのように確保されるのでしょうか? Niginx は取得したイベントに対してコールバックを呼び出しませんが、2 つのポスト キューに入れます。最初のキューは接続イベントを保存するために使用され、2 番目のキューは通常の読み取りおよび書き込みイベントを保存するために使用されます。 ngx_posted_accept_events のイベントが実行中に最初に処理されるようにすることで、応答速度に対する接続の感度を確保できます

(2)クロストークを防ぐ方法

クロストーク問題はサーバープログラムで対応すべき問題と言えます。クロストークの問題は、ソケットが閉じられたばかりで、新しい接続が入ってきたことを意味します。新しい接続は、たまたま閉じられたばかりのソケットにシステムによって割り当てられます。その後、ソケットにまだ未処理のイベントが残っている場合、そして、対応するソケットにデータを送信します。このソケットは、新しく作成されたユーザーに送信される可能性があります。では、nginx はこの問題をどのように解決するのでしょうか?これは非常に簡単です。nginx が新しい接続を取得するたびに、この接続のインスタンスと前の接続のインスタンスが異なるように接続内のフラグを反転します。また、各イベントには接続が含まれるため、イベントが処理されるたびに反転されます。イベント内のインスタンスが同じかどうかを比較するだけでOKです

(3) 「雷鳴の群れ問題」にどう対処するか

いわゆるサンダーリング ハード問題とは、複数のプロセスが同時に同じポートをリッスンしていることを意味します。接続が確立されると、システムは複数のプロセスを起動しますが、当然のことながら、新しい接続を処理できるのは 1 つのプロセスだけなので、他のプロセスが処理します。本来は覚醒する必要があるが、覚醒してしまうのが、有名な雷鳴の群れの問題です。 nginx が解決する方法も非常に簡単です。サンダーリング グループの問題を回避するために、同時に 1 つのプロセスだけがポートでリッスンしていることを確認するだけです。しかし、問題の鍵は、同時に 1 つのプロセスだけがポートをリッスンするようにする方法です。 nginx はロックを試行する方法を採用し、ロックの戻り値に基づいてプロセスが新しい接続イベントを処理するかどうかを決定することで、「雷の群れ問題」を解決します
(4)負荷分散の解決方法
以前に書いた小さなネットワーク ライブラリでは、メイン スレッドを使用して新しい接続を受け入れ、新しい接続を各子スレッドに順番に分散させ、nginx がプロセス間の負荷分散の問題を解決しました。バランスのとれた分散はありませんが、各プロセスが処理する接続数が処理する最大接続数の 7/8 を超えると、今度は接続は処理されませんが、処理する接続数は -1 になります。 . これは、他のスレッドに機会を与えることと同等であり、これにより負荷分散が実現されます

概要

最初に nginx ドライバー モジュールについて書きます。自分自身を勉強するためにこのブログを書いているだけです

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i

').text(i)); }; $numbering.fadeIn(1700); }); });

以上、内容の側面も含めてnginxのイベント駆動モデルについて紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Tomcat サーバーへの外部ネットワーク アクセスを許可する方法 Tomcat サーバーへの外部ネットワーク アクセスを許可する方法 Apr 21, 2024 am 07:22 AM

Tomcat サーバーが外部ネットワークにアクセスできるようにするには、以下を行う必要があります。 外部接続を許可するように Tomcat 構成ファイルを変更します。 Tomcat サーバー ポートへのアクセスを許可するファイアウォール ルールを追加します。 Tomcat サーバーのパブリック IP を指すドメイン名を指す DNS レコードを作成します。オプション: リバース プロキシを使用して、セキュリティとパフォーマンスを向上させます。オプション: セキュリティを強化するために HTTPS を設定します。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

nginx へようこそ!それを解決するにはどうすればよいですか? nginx へようこそ!それを解決するにはどうすればよいですか? Apr 17, 2024 am 05:12 AM

「nginx へようこそ!」エラーを解決するには、仮想ホスト構成を確認し、仮想ホストを有効にし、Nginx をリロードする必要があります。仮想ホスト構成ファイルが見つからない場合は、デフォルト ページを作成して Nginx をリロードすると、エラー メッセージが表示されます。が消え、ウェブサイトは通常のショーになります。

Dockerコンテナ間で通信する方法 Dockerコンテナ間で通信する方法 Apr 07, 2024 pm 06:24 PM

Docker 環境でのコンテナ通信には、共有ネットワーク、Docker Compose、ネットワーク プロキシ、共有ボリューム、メッセージ キューの 5 つの方法があります。分離とセキュリティのニーズに応じて、Docker Compose を利用して接続を簡素化するか、ネットワーク プロキシを使用して分離を強化するなど、最も適切な通信方法を選択します。

phpmyadminの登録方法 phpmyadminの登録方法 Apr 07, 2024 pm 02:45 PM

phpMyAdmin に登録するには、まず MySQL ユーザーを作成して権限を付与し、次に phpMyAdmin をダウンロード、インストール、構成し、最後に phpMyAdmin にログインしてデータベースを管理する必要があります。

Nodejsプロジェクトをサーバーにデプロイする方法 Nodejsプロジェクトをサーバーにデプロイする方法 Apr 21, 2024 am 04:40 AM

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。

HTMLファイルからURLを生成する方法 HTMLファイルからURLを生成する方法 Apr 21, 2024 pm 12:57 PM

HTML ファイルを URL に変換するには Web サーバーが必要です。これには次の手順が含まれます。 Web サーバーを取得します。 Webサーバーをセットアップします。 HTMLファイルをアップロードします。ドメイン名を作成します。リクエストをルーティングします。

phpmyadmin のインストールが失敗した場合の対処方法 phpmyadmin のインストールが失敗した場合の対処方法 Apr 07, 2024 pm 03:15 PM

失敗した phpMyAdmin インストールのトラブルシューティング手順: システム要件を確認する (PHP バージョン、MySQL バージョン、Web サーバー)、PHP 拡張機能を有効にする (mysqli、pdo_mysql、mbstring、token_get_all)、構成ファイル設定を確認する (ホスト、ポート、ユーザー名、パスワード)、ファイルを確認するアクセス許可 (ディレクトリの所有権、ファイルのアクセス許可)、ファイアウォール設定の確認 (Web サーバー ポートのホワイトリスト)、エラー ログの表示 (/var/log/apache2/error.log または /var/log/nginx/error.log)、テクニカル サポートの問い合わせ ( phpMyAdmin

See all articles