DUICUO

Openresty の楽しい側面についてお話ししましょう。

[[414495]]

この記事は、theanarkh氏によるWeChat公式アカウント「プログラミングアクロバット」からの転載です。転載の許可については、「プログラミングアクロバット」公式アカウントまでお問い合わせください。

OpenRestyは、中国の開発者が立ち上げたオープンソースプロジェクトです。私も実際に触ってみましたが、その技術的な実装は非常に興味深いものでした。OpenRestyはNginxベースのWebサーバーで、興味深いのは、WebアプリケーションサービスをNginxに統合するというアプローチです。ご存知の通り、Nginxは通常、Node.js、Go、PHPなどのバックエンド技術と組み合わせて使用​​され、プロセス間通信やソケットを介して完全なサービスを実現します。

では、OpenRestyはどのようにそれを実現するのでしょうか?OpenRestyは、独自のサードパーティ製NginxモジュールとLua言語をNginxに統合し、OpenRestyという新しいパッケージにパッケージ化します。Node.jsに似ています。V8はJavaScriptをサポートしていますが、ネットワーク、ファイル転送、その他の機能が欠けています。Node.jsはV8を基盤としてこれらの機能を拡張し、V8とその他のコードを新しい製品としてNode.jsにパッケージ化します。Nginxにはスクリプト実行機能がありませんが、NginxをベースにしたOpenRestyは、サードパーティ製モジュールを通じてLua機能を統合し、Nginx内でLuaスクリプトを実行できるようにします。

OpenRestyを使えば、Luaコードを直接記述してビジネスロジック全体を完結できます。重要なのは、OpenRestyが言語レベルの機能を提供していることです。これにより、Nginx自体が提供するイベントを超えたイベントを実行できます。OpenRestyのソースコードには、サードパーティ製のNginxおよびLuaモジュールを含む膨大なコードが含まれていますが、ここでは基本的な原理にのみ焦点を当てます。

LuaJITはLua言語用のJITコンパイラで、驚くほど高速であると報告されています。NginxはNginxカーネルであり、ngx_luaはサードパーティ製モジュールとしてLuaをNginxに統合します。それでは使い方を見てみましょう。ソースコードは公式サイトからダウンロードできます。コンパイルとインストールは3つのステップで完了します。

  1. ./configure
  2. 作る
  3. sudo インストール

次に実行する

  1. mkdir openresty-test openresty-test/logs/ openresty-test/conf/

次に、confフォルダにnginx.confという新しい設定ファイルを作成します。以下の内容を記述します。

  1. ワーカープロセス 2;
  2. イベント {
  3. ワーカー接続 1024;
  4.  
  5. http {
  6. サーバー {
  7. 8888を聴く;
  8. 位置 / {
  9. デフォルトタイプは text/html です。
  10. コンテンツバイluaブロック{
  11. ngx.say( "こんにちは" )
  12. }
  13. }
  14. }}

次に実行する

  1. nginx -p openresty-test

この時点でNginxは実行されており、ポート8888にアクセスすると「Hi」という出力が表示されます。Nginxの設定に`content_by_lua_block`ディレクティブがあります。これはNginx組み込みのディレクティブではなく、OpenRestyの拡張機能です。`location`ブロックでルートが一致すると、NginxのサードパーティモジュールがLuaエンジンを呼び出して`content_by_lua_block`内のLuaスクリプトを実行します。Luaの機能により、OpenRestyはNginxよりもはるかに多くのことを実現でき、NginxとLuajitの高いパフォーマンスと組み合わせることで、柔軟で高性能なWebサーバーを構築できます。例えば、OpenRestyをゲートウェイとして使用し、ルーティング、認証、監視などの機能を実装できます。OpenRestyはLua言語を使用しており、非常にシンプルで、既存の低水準言語モジュールとの統合が容易なため、開発コストを削減できます。全体として、OpenRestyは非常にクールで興味深いプロジェクトだと思います。