OpenResty情報
OpenRestyとは
OpenResty(オープンレスティ)はNginxコア※と独自のNginxモジュール、さらにLua言語の実行環境が統合されたオープンソースの本格的なWebプラットフォームで、スケーラブルなWebアプリケーション、マイクロサービス、APIゲートウェイに適しています。
※NginxコアはNginxの基本機能を提供する組み込みコンポーネントです。
OpenResty は2007年10月にYahoo Chinaで働いていたYichun Zhang氏によって開発が始まりました。その後、2011年からCloudflare社、2016年以降はOpenResty Software Foundation と OpenResty Inc.によって開発が進められています。
主な特徴
Webサーバとアプリケーションサーバの統合によるレスポンス向上
OpenRestyはWebサーバであるNginxのコア機能をベースにアプリケーション機能を搭載したもので、以下のようなモジュール構成になっています。
OpenRestyはWebサーバとアプリケーションサーバを一体化していることが大きな特徴です。
一般的なWebサーバ構成ではアプリケーションサーバを別に用意するため、サーバ間通信によるレイテンシが発生します。これに対してOpenRestyでは両機能が一体化しているため、レスポンスの向上が期待できます。
開発当初、Nginx独自モジュールはPerlで書かれていましたが、現在はC言語で実装されています。
イベント駆動、ノンブロッキングI/Oの活用による高スループット
OpenRestyのベースとなっているNginxコアはノンブロッキングI/Oとイベント駆動型モデルを組み合わせることにより、複数のリクエストを1スレッドで処理することができます。これによりサーバリソースの有効活用が可能となり、高スループットを実現しています。
さらに、その上で動作するLua言語もノンブロッキングI/Oを扱うことを得意としています。
従来のプログラム言語ではイベント駆動を実装する一般的な方法として、コールバック関数が用いられてきました。これはプログラム上でリクエストを発行した際に、そのレスポンスを待つ代わりに、レスポンス発生時に呼び出される関数を定義しておくことでイベント駆動を実現するものです。しかしながら、この記述スタイルはリクエストとレスポンスの記述箇所が分かれるため、プログラムの見通しが悪く、使いこなすのが難しいという欠点があります。
これに対し、Lua言語はプログラム上ではコルーチン(coroutine)という手法を用いて、リクエスト/レスポンスを一連の流れとして記述しながら、実際の動作としてはイベント駆動方式を使った処理を行うことができます。これにより、ユーザが作成したアプリケーションにおいてもイベント駆動、ノンブロッキングI/Oの利点を最大限引き出し、高いスループットを得ることができます。
マイクロサービス、APIゲートウェイへの適用
このようなレスポンスの良さ、スループットの高さといった特徴を生かし、OpenRestyはマイクロサービス、APIゲートウェイとしての活用が進んでおり、人気のAPIゲートウェイであるKongでもOpenRestyが使用されています。
OpenRestyバイナリパッケージのNginxには以下のようなモジュールが組み込まれています(代表的なものを抜粋)。
|
lua-nginx-module |
LuaインタープリターまたはLuaJIT 2をNginxコアに組み込むOpenRestyのコアコンポーネントです。 |
|---|---|
|
stream-lua-nginx-module |
Luaの機能をNginxストリーム/TCPサーバに組み込むOpenRestyのコアコンポーネントです。 |
|
array-var-nginx-module |
Nginxコンフィグファイルで、配列型変数を使用可能にします。 |
|
ngx_coolkit |
Nginx用の便利なモジュールセットです。HTTPメソッドの上書き、Authorizationヘッダからデコードされたパスワードの取得などが可能です。 |
|
echo-nginx-module |
ストリーミング入出力、並列/逐次サブリクエスト、タイマー、スリープ、などのメタデータアクセスのためにNginx内部APIをラップします。 |
|
encrypted-session-nginx-module |
改ざん防止用MAC付きの AES-256 に基づき Nginx 変数の暗号化、復号化のサポートを提供します。 |
|
form-input-nginx-module |
application/x-www-form-urlencoded でエンコードされたHTTP POST、PUTリクエスト本文を解析するNginxモジュールです。 |
|
headers-more-nginx-module |
指定したレスポンスヘッダー、リクエストヘッダーを、追加、設定、またはクリアできるようにします。 |
|
memc-nginx-module |
標準のmemcachedモジュールを拡張します。 |
|
ngx-http-lua-upstream-module |
クラシックNginxアップストリーム用APIを提供するNginx Cモジュールです。 |
|
ngx_devel_kit |
Nginxのコア機能を拡張するように設計されたモジュールです。 |
|
redis2-nginx-module |
Redis 2.0 統合プロトコルが実装されたNginxがノンブロッキングで Redis 2.x サーバと通信できるようにするアップストリームモジュールです。 |
|
set-misc-nginx-module |
Nginxリライトモジュール(MD5/SHA1、SQL/JSONクォーティングなど)にさまざまな set_xxx ディレクティブを追加します。 |
|
srcache-nginx-module |
Nginxの任意の機能(アップストリームや静的ディスクファイル)に透過的なキャッシュレイヤーを提供します。 |
|
xss-nginx-module |
NginxにクロスサイトAJAXサポートを追加します。 |
また、OpenRestyには以下のようなLuaライブラリが同梱されています。これらのライブラリを使うことで、たとえば他システムとの連携や機能拡充など、各ニーズへの柔軟な対応が可能になります。
|
lua-resty-memcached |
Lua Memcachedクライアントドライバーです。 |
|---|---|
|
lua-resty-mysql |
Lua MySQLクライアントドライバーです。 |
|
lua-resty-redis |
軽量で高速なredis rawレスポンスパーサーと、redis rawリクエスト関数を実装します。 |
|
lua-resty-dns |
ノンブロッキングDNSリゾルバです。 |
|
lua-resty-upload |
HTTPファイルアップロードのためのストリーミングリーダーおよびパーサーです。 |
|
lua-resty-websocket |
ノンブロッキングWebSocketサーバとクライアントを実装します。 |
|
lua-resty-lock |
シンプルなノンブロッキングミューテックスロックAPIを実装します。 |
|
lua-resty-lrucache |
LRUキャッシュを実装します。 |
|
lua-resty-signal |
Linuxプロセスを強制終了またはシグナルを送信するためのLuaライブラリです。 |
その他OpenRestyに同梱されているコンポーネントの詳細は下記をご参照ください。
メリット・デメリット
OpenRestyのメリット・必要性
- OpenRestyチームによって開発された多くの高品質なNginxモジュールを利用できます。
-
開発者は独自のLuaスクリプトを作成し、実行することができます。
OpenRestyのデメリット・注意点・課題
-
Python、C、Java などに比べるとLua の開発者が少ないため、開発者の確保が難しい、あるいは言語習得に時間がかかる可能性があります。
ユースケース
- Nginxの機能に加え、同梱されたLuaライブラリや独自のLuaスクリプトを使用した高性能でスケーラブルなWebアプリケーション、動的なWebゲートウェイを構築できます。
動作環境
- 主要Linuxディストリビューション向けにビルド済パッケージを提供しています(Ubuntu、Debian、RHEL、CentOS、Fedora、OpenSUSE、Alpine、Amazon Linux, Rocky Linux Oracle Linux, Azure Linux)。
- Windows版もmacOS版も用意されています。macOSの場合は、Homebrewパッケージマネージャーを使用してインストールすることが強く推奨されています。
- Dockerイメージも用意されています。
OpenRestyのライセンス
OpenRestyのライセンスは、2条項のBSDライセンスに基づいています。
記載された2つの条件下で、改変の有無に関わらず、ソースやバイナリの利用と再配布が認められています。
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象Red Hat JBoss Enterprise Application Platform
ジェイボス エンタープライズアプリケーションプラットフォーム(イーエイピー)。J2EE1.4準拠のJ2EEアプリケーションサーバです。
-
サポート対象Nginx
エンジンエックス。Apache HTTP Serverに次ぐ利用率で人気急上昇中の高速・高性能Webサーバです。
-
サポート対象Kong API Gateway
コング。APIマーケットプレイスの技術をもとに2015年からオープンソースプロジェクトとして提供が開始されたAPIゲートウェイ(APIアグリゲータ)です。
-
GlassFish
グラスフィッシュ。オープンソースのアプリケーションサーバです。
-
サポート対象Apache Tomcat
アパッチトムキャット。JavaサーブレットやJSPを実行するためのソフトウェア


