Openrestyの紹介

1. OpenRestyの概要

OpenRestyこれは、NginxとLuaに基づく高性能Webプラットフォームであり、多数の高度なLuaライブラリ、サードパーティモジュール、およびほとんどの依存関係を統合しています。これは、非常に高い同時実行性と高いスケーラビリティを処理できる動的Webアプリケーション、Webサービス、および動的ゲートウェイを便利に構築するために使用されます。Luaスクリプトを使用して、NgnixでサポートされているCおよびLuaモジュールを呼び出し、10Kか​​ら1000Kの単一マシン同時接続で高性能のWebアプリケーションシステムをすばやく構築できます。OpenRestyの目標は、NGNixのノンブロッキングIOモデルを使用して、WebサービスをNginxサービス内で直接実行できるようにし、HTTPクライアント要求とバックエンドDBに一貫した高性能応答を提供することです。

OpenRestyはNginx開発に基づいており単純にNginx +の  lua-nginx-module結合バージョンと見なすことができます 

公式ウェブサイト:https : //openresty.org/cn/Official
document:https : //github.com/openresty/lua-nginx-module#version

openrestyベストプラクティス:https://github.com/moonbingbing/openresty-best-practiceshttps://moonbingbing.gitbooks.io/openresty-best-practices/content/

nginxが使用するwiki:https : //www.nginx.com/resources/wiki/

nginx3rdのLuaモジュールWiki:https ://www.nginx.com/resources/wiki/modules/lua/

 

 

2.高性能サーバーの2つの重要な要素

「高性能」サーバーでは、言語のパフォーマンスではなくキャッシュが問題であり、言語レベルは非同期の非ブロックをサポートする必要があります。

1.キャッシュ速度

メモリ> SSD>メカニカルディスク;ローカルマシン>ネットワーク;インプロセス>プロセス間。キャッシュシステムの目標は、プロセスのヒット率が最も高くなることを期待することです。その場合、キャッシュシステムの全体的な効率も最も高くなります。

2.非同期の非ブロッキングは、イベント駆動型のアプローチを指します(イベントの完了後に通知します)。

データベースへのアクセス、ネットワークへのアクセス、および一部の遅いIOデバイスへのアクセスを期待して、待機に多くの時間を費やさないでください。代わりに、イベント駆動型のアプローチを使用して、システムがタスクを完了したときに通知します。このようにして、サーバーCPUのアイドルリソースを使用してクライアント接続を処理できます。

3. OpenRestyに含まれるテクノロジー

  • Nginx:ロードバランシング+リバースプロキシおよびその他の機能だけでなく、Nginx cモジュールの開発コストは高くなります。
  • LuaJIT:OpenRestyはLuaJITを使用し、LuaJITはLuaのメインパフォーマンスです。

OpenRestyは、高性能サーバーの開発モデルを覆しました。OpenResty 基本的に  LuaJIT 、仮想マシンはNginxワーカーに組み込まれているため、効率は特に高く、パフォーマンスOpenResty はNginx cモジュールに近いか、それを超えています。

Nginxはmaster-workerモデルを使用するため、つまりmasterメインプロセスは複数のプロセスを管理するworkerため、基本的なイベント処理はworker中間に配置され、masterドラマ全体の初期化とworker権利の管理のみを担当しますOpenRestyでは、それぞれworkerがLuaVMを使用し、各リクエストが割り当てられるworkerLuaVMcoroutineコルーチンがthisに作成されますコルーチン間のデータ分離_G各コルーチンには独立したグローバル変数があります

Luaのコルーチンはマルチスレッドのスレッドに似ており、独自のスタック、ローカル変数、命令ポインターなどを持っていますが、グローバル変数などの情報を他のコルーチンと共有しています。スレッドとコルーチンの主な違いは、マルチプロセッサの場合、概念的にはマルチスレッドは複数のスレッドを同時に実行することですが、コルーチンはコードを使用してコルーチンの切り替えを完了します。常に実行されるコルーチンプログラムは1つだけです。また、この実行中のコルーチンは、明示的に中断する必要がある場合にのみ中断されます。

四、OpenResty市場の他の言語との比較

  • node.js:非同期のノンブロッキング機能を独自の言語に最初に組み込んだもので、フロントエンドの学生はすぐに介入できます。ただし、node.jsはコールバックを使用して非同期の非ブロッキングを実装するため、コードの記述が面倒です。
  • Python:3.4以降、非同期ioやa​​iohttpなどの非同期サポートが追加され、3.5がコルーチンを導入しました。デメリットは、多くの人が2.7をまだ使用しているため、バージョンスパンが大きいことです。
  • Golang:近年非常に暑くなっています。短所:コードの記述にはGoキーワードが必要ですが、オンラインホットデバッグは不便です(SystemTap サポートは限定的です)。
  • Baas:サービスとしてのバックエンド。同社はモバイルアプリケーション開発者に統合クラウドバックエンド境界サービスを提供しています。

 

参照:

https://www.zhihu.com/question/23048744

https://www.cnblogs.com/52fhy/p/10589295.html

https://www.jianshu.com/p/09c17230e1ae

524件のオリジナル記事を公開 172 件を賞賛 100,000回以上の閲覧

おすすめ

転載: blog.csdn.net/INGNIGHT/article/details/104822017