EdgeLang とは?OpenResty Edge のゲートウェイ DSL — ルールを効率的で安全な Lua にコンパイル
EdgeLang とは?
EdgeLang は、OpenResty Inc. が OpenResty Edge 製品向けにゲートウェイロジックを記述するために開発したドメイン固有言語(DSL)です。Lua を手書きする代わりに、ページルールや WAF ルールを簡潔でドキュメントのようなルールとして記述します。EdgeLang コンパイラはそれらを、各リクエストを一度だけスキャンする高度に最適化された Lua にコンパイルします。そのため、ルールが多く条件が複雑な構成では、手作業で入念に最適化していない手書きの Lua より高速でありながら、無限ループ、メモリリーク、未定義変数を防ぎます。OpenResty Edge は、ページルール、Web アプリケーションファイアウォール(WAF)、負荷分散などを提供するトラフィック管理プラットフォームであり、そのほぼ全体が EdgeLang を基盤として構築されています。Qunar、ADP、Ajaib など多くの高トラフィックサイトが、EdgeLang を使用して複雑なゲートウェイおよび WAF ルールを表現しています。本記事は概念的な紹介です。実際に手を動かすチュートリアルは EdgeLang チュートリアル をご覧ください。
なぜ手書きの Lua ではなく EdgeLang を選ぶのか?
なぜ手書きの Lua ではなく EdgeLang を選ぶのでしょうか?以下にいくつかの利点をご紹介します:
- パフォーマンス:EdgeLang は多数のルールの条件を、入力リクエストデータへの一度のスキャンにコンパイル・最適化します。これにより、正規表現や文字列パターンを含む複雑な条件を持つルールが多数あっても、一つずつ照合することによる速度低下を招きません。こうしたルールの多い構成では、EdgeLang は通常、最適化していない手書きの Lua コードより高速です。
- セキュリティ:EdgeLang はルールベースの言語であり、無限ループ、メモリリーク、未定義変数などの一般的なコーディングエラーを防ぐことができます。誤ったコードによってゲートウェイや WAF がクラッシュする心配がありません。
- 柔軟性:EdgeLang では、シンプルで読みやすい構文を使用して多くのことを実現できます。ヘッダー、Cookie、クエリ文字列、ボディデータなどを操作できます。さらに、カスタムの Lua コードやモジュール、さらには C/C++ コードを呼び出すこともできます。EdgeLang は、ngx_lua や resty.core などの他の OpenResty コンポーネントとも良好に連携します。
- 保守性:EdgeLang のルールは書きやすく理解しやすいです。コードというよりもドキュメントのように見えます。ルールをグループに整理し、異なるドメインやパスに適用することができます。また、Web フォームベースのページルールを使用してコードを書かずにルールを作成・管理することもできます。
EdgeLang の設計者は以前 Cloudflare で長年働いており、Lua で書かれた多くのゲートウェイロジックを維持することがいかに困難であるかを目の当たりにしてきました。EdgeLang はより優れた代替手段であり、より多くの機能とパフォーマンスを提供します。
EdgeLang はどこで使われるか:ページルールと WAF
OpenResty Edge の Web コンソールである Edge Admin では、ページルールや WAF ルールなど、様々な用途で EdgeLang を使用しています。
EdgeLang の完全な構文やその他の多くのコード例については、当社ドキュメントサイトの包括的な EdgeLang ユーザーマニュアル をご覧ください。
結論
EdgeLang は、OpenResty Edge 製品の複雑なゲートウェイロジックを実装するための強力かつ効率的な方法です。パフォーマンス、セキュリティ、柔軟性、保守性など、多くの利点を提供します。EdgeLang のルールは書きやすく理解しやすく、他の OpenResty Edge 機能とシームレスに連携します。EdgeLang についてさらに詳しく知りたい場合は、当社のドキュメントサイトにある包括的なユーザーマニュアルをご覧ください。EdgeLang と OpenResty Edge を使用して、素晴らしい Web ゲートウェイやプライベート CDN ネットワークを作成することをお楽しみいただければ幸いです。
よくある質問
EdgeLang とは?
EdgeLang は、OpenResty Inc. が OpenResty Edge でゲートウェイロジックを記述するために開発したドメイン固有言語です。ページルールや WAF ルールを簡潔でドキュメントのようなルールとして記述し、EdgeLang コンパイラがそれらを、ゲートウェイサーバー上で動作し各リクエストを一度だけスキャンする高度に最適化された Lua にコンパイルします。
EdgeLang は Lua より高速ですか?
EdgeLang は最終的にはゲートウェイ上で動作する Lua にコンパイルされますが、コンパイル時に追加の最適化を行います。多数のルールの条件(特に正規表現や文字列照合)を一つずつ照合するのではなく、リクエストデータへの一度のスキャンにまとめて最適化します。そのため、ルールが多く条件が複雑な構成では、通常、同等の機能を持つ最適化していない手書きの Lua より——LuaJIT 上であっても——高速で、ルールが多く照合が複雑になるほどその優位性は大きくなります。
EdgeLang は手書きの Lua より安全ですか?
はい。EdgeLang はルールベースの言語であり、無限ループ、メモリリーク、未定義変数といった一般的なコーディングエラーを防ぎます。そのため、バグのあるルールが、場当たり的な Lua コードのようにゲートウェイや WAF をクラッシュさせることはありません。
EdgeLang から Lua や C/C++ のコードを呼び出せますか?
はい。EdgeLang はシンプルで読みやすい構文でヘッダー、Cookie、クエリ文字列、ボディデータを操作でき、さらに機能が必要な場合はカスタムの Lua コードやモジュール、さらには C/C++ コードを呼び出すこともできます。ngx_lua や resty.core など他の OpenResty コンポーネントとも良好に連携します。
OpenResty Edge について
OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高同時接続・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay(動的トレーシング技術を利用した非侵入型のプロファイリングおよびトラブルシューティングツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!
























