Tengine公式サイト:http://tengine.taobao.org/index_cn.html
OpenResty公式サイト:http://openresty.org/
OpenrestyとTengineはnginxの2つのバージョンに基づいて、彼らは関係と淘宝網を持っているという意味で、淘宝網前者は旧章のエンジニアは、オープンソースプロジェクト淘宝網で春の開発を主導している派生しました
Openresty最も重要な特徴は、ngx_luaモジュールの導入で、プラグインを開発LUAの使用をサポート
淘宝網自身のビジネスをもたらすにTengine機能は、多数の新機能が原因であります
OpenResty:
nginxのはロシアの発明である、Luaは、いくつかのブラジル発明の教授で、中国の張チョンはまた、この高性能サーバ・ソリューションLuaJIT VM埋め込まNginxは、OpenRestyの実現を置きます
あなたはOpenResty無料のステッチによって実行される様々な機能をnginxの置くことができ、より重要なのは、開発のしきい値は、このすべては、操作するための強力な軽量のLua言語である、高いものではありません。
その主な使用シナリオは以下のとおりです。
Luaの出力処理nginxの(プロキシ、Postgresの、Redisの、種々の上流の混練のMemcached など)
の前に、実際に上流のサービス要求に達し、Luaは、任意の複雑なアクセス制御およびセキュリティ検出することができる
任意のヘッド内部に応じて制御します情報
バックエンドとは、完全なビジネスへのリアルタイムアクセスを選択するために、この情報を使用する(例えばRedisの、Memcachedのは、MySQL、Postgresのような)外部ストレージバックエンドの情報サービスから取得した
ランダム書き込み複雑なWebアプリケーションのコンテンツハンドラでは、しかし、同期の使用まだ非ブロックモード、アクセス、バックエンドのデータベースや他の保存
のLuaで完成、書き換えフェーズで非常に複雑なURLディスパッチ
のLuaによっては、高度なキャッシュメカニズムを有効にする、任意の場所にある子として要求し、nginxのことができます
OpenRestyも知られているngx_openresty
、それはnginxのに基づいて、Webアプリケーション・サーバーの中核です、。
OpenResty nginxのとnginxのが効果的に強力な汎用のWebアプリケーションプラットフォームになりますうまく設計nginxのモジュールの様々な、プールすることによりLuaのベース、高性能なWebプラットフォーム、OpenResty。
OpenResty目標は、Webサービスは、nginxのサービス内で直接実行することです、HTTPクライアント要求のため、でもリモートバックエンドDBのためだけでなく、I / Oモデルを非ブロックのnginxの完全な使用は、高性能の応答のシリーズです。
イベント駆動型モデルと高性能なWebアプリケーションを実現するために、IOを非ブロックによるOpenResty nginxの。
OpenRestyは、私たちはnginxの非同期の非ブロッキング非同期同時使用LuaのバックエンドDBアクセスや他のサービスによって実現することができるように。
使用OpenResty ngx.location.capture_multi
非同期同時アクセスの舞台裏インターフェースすることができ大幅にブラウザを減らすHTTP接続の数を。
- OpenResty動作原理
nginxのはで使用されてmaster-worker
いるモデルで、master
複数の管理プロセスworker
の基本的な処理時間、プロセスの上にあるworker
プロセス、master
プロセスは、グローバル初期化と責任があるworker
の管理。
OpenResty、各worker
LuaVMを用いた処理、要求が割り当てられている場合worker
の時間、これはLuaVMを作成するcoroutine
コルーチン、コルーチンの間でデータの分離は、それぞれが別々のグローバル変数を有するコルーチン。
- リクエストを処理フローOpenResty
nginxのは、オブジェクト自体を達成するためのさまざまな段階でぶら下がって、彼らの行動に応じて、サードパーティのモジュール、要求の異なる段階に分割されます。同じ特性を使用してOpenResty、異なるステージは、異なる取り扱い挙動を有します。
nginxの
nginxの特長
- 軽量Webサービスは、Apacheとリソースよりも少ないメモリを使用しています
- アンチnginxの同時処理要求、非同期ノンブロッキング。
- 高度にモジュール設計
nginxのベースの設計作業プロセスおよびプロセスの複数の作業モードは、各プロセスが複数の接続を処理するシングルスレッドされ、各ワーカー・プロセスは、それによってスレッドコンテキストスイッチを低減すること、複数の接続を処理するために、非ブロッキングI / Oを使用し高性能、高同時実行。パフォーマンスを向上させるようにそのため、本番環境では、nginxのワーカープロセスによってCPUと結合することができます。
nginxのアーキテクチャ
それぞれのnginxのマルチプロセスモード、worker
プロセスはとても貯蓄のパフォーマンス・オーバーヘッドをもたらすロック、ロックなしので、独立しています。別々のプロセスを使用することの利点は、worker
プロセスの終了時にプロセス間の相互の影響は、ない、他のプロセスがまだサービスが終了していないことを確実にするために取り組んでいます。
ハンドルのリクエスト、他のスレッドを待っていることは他のタスクに行くことができますが、スレッド呼び出しがブロックされたときに発生する非同期ノンブロッキングにnginxの非同期の非ブロッキングの方法。
ngx_lua
ngx_lua
nginxのは、Luaの、Luaのスクリプトの実行は、nginxのを聞かせて、そして高い同時、ノンブロッキング・ハンドルの様々な要求に埋め込まれています。構築されたLuaのコルーチンは、うまく非同期コールバック呼び出しのシーケンスの形式に変換することができます。ngx_lua
LuaのIO操作で行わノンブロッキングコールを達成するために、イベントモデルnginxのに委託されます。開発者は、シリアル・プログラミング・モードを使用することができngx_lua
、コンテキストを保存し、自動的にターミナルの間にIO操作をブロックし、その後、ハンドリング機構nginxのイベントに委託IO操作は、IO操作が完了した後、ngx_luaはコンテキストを再開します、プログラムは継続しますこれらの操作は、ユーザプログラムに対して透過的で行います。
それぞれのnginxのworker
プロセスは、こと倍LuaのインタプリタまたはLuaJITインスタンスを保持しているworker
すべての要求は、この例の共有処理を。各要求のcontext
コンテキストは、各要求の独立性を確保しながらLuaは、軽量コルーチン分離されています。
ngx_lua
`1-CORを使用して
ngx_lua
原則モジュール
- 各ワーカー・プロセス
worker
Luaの仮想マシン(LuaVM)を作成するために、作業プロセスworker
VMを共有するための内部合意。
-各nginxのI / Oプリミティブ注入Luaの仮想マシンパッケージ後、直接アクセスLuaのコードを可能にします。 - データ処理Luaのコルーチン、コルーチン間のスペーサによって各外部要求。
- Luaのコードは、作業機械のプロセスをブロックすることなく、非同期I / O操作は、現在のコルーチンを中断します呼び出します。
- I / O、非同期操作が完了すると、削減コルーチンのコンテキスト関連のプロトコル、および実行し続けます。
ngx_lua命令
nginxのスクリプトは、いつ、どのようにLuaのコードの結果を使用するように指定するユーザーのための指示を操作し、指示のLuaの基本的なビルディングブロックです。
命令のngx_lua順: