マイクロサービスクエリ言語restQLの最新バージョンがリリースされた。コンテンツアグリゲーション、HTTPメソッドのサポート拡張、自己修復機能、node.jsアプリのバージョンアップなどの、注目すべき新機能が提供されている。全体的なパフォーマンス改善により、最新バージョンは、前バージョンに比較して最大2倍に速度が向上した。互換性を損なうような変更はないので、ユーザは安心してアップグレードすることができる。プロジェクトのコードは公開されていて、MITライセンス下で入手が可能だ。
restQLは、複数のマイクロサービスに対するクエリが必要なフロントエンドコードを、簡素化することを目的としている。マイクロサービスアーキテクチャを採用することで、バックエンドシステムのサポートや保守が容易になる反面、フロントエンドアプリケーション層に処理が押し付けられるという新たな複雑性が広く見られている。restQLは、複数のマイクロサービス呼び出しをオーケストレーションする複雑さを軽減すると同時に、標準的なHTTP呼び出しを使用することで、ネイティブなブラウザーキャッシュ機能を活用する。
restQLを定義付けている特徴のひとつが、個々のリソースに対する自動並列呼び出しだ。ただし、これによって応答も分離されるため、クライアントには、複数の注文を持った顧客のような関連オブジェクトを統合する必要性が生じる。最新バージョンでは、新設されたin
演算子をクエリで使用することで、事前に集計構造を指定することが可能になり、ひとつに結合された結果を得ることができるようになった。
最新バージョンでは、restQLサーバのレジリエンスが向上している。このサーバは、クライアントとマイクロサービスAPI間にあって、システムが過負荷になったことを検出すると、ある種のバックプレッシャを発生させる。コンフィグレーション設定で、許容可能な処理時間のオーバーヘッドのしきい値を定義しておいて、それに達すると、システムは一部の要求に対してHTTP 507応答(ストレージ不足)の返送を開始するが、一部の要求については引き続き正常に実行する。
エラー応答を返すこのパターンでは、アプリケーションに何らかの再試行ロジックが必要になる。restQLの作成者のひとりであるRicardo Mayerhofer氏によると、Istioなどのサービスメッシュを使用した実装が多いということだ。"restQLをサービスメッシュと併用することを推奨しています。restQLではHTTPとRESTを使用しているため、サービスメッシュとは(着信クエリと発信コールの両面で)相性がよいのです。"サービスメッシュでは、自動スケーリングアルゴリズムが一般的に使用されているので、少し時間が経てば新たなノードが立ち上がって、restQLは通常の状態に戻ります。"
従来のバージョンでは、"from
"キーワードを使用して、HTTP GETリクエストに変換されるデータクエリのみがサポートされていた。V3では新たに、POST、PUT、DELETEといったCRUD操作を行うHTTP動詞の標準セットのために、それぞれ"to
"、"into{./0}"、"
"というキーワードが追加されている。delete
restQLの開発者たちは、新たなサーバの立ち上げやメンテナンスが採用上の障壁になるかも知れないという考えから、ノードアプリケーション用のnpmパッケージである@b2wdigital/restqlを作成した。GitHubページには、その実装コードのサンプルが紹介されている。
Mayerhofer氏が先日のブログ記事には、restQL V3の機能に関するさらに詳しい説明がある。InfoQでも以前、最初のリリースと開発理由について取材している。