BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース RockScript: マイクロサービスをオーケストレーションするオープンソースのスクリプト言語と実行エンジン

RockScript: マイクロサービスをオーケストレーションするオープンソースのスクリプト言語と実行エンジン

原文(投稿日:2017/10/27)へのリンク

Tom Baeyens氏がRockScriptのプレビューをリリースした。イベント駆動アーキテクチャ(EDA)形式のマイクロサービスの統合とオーケストレーションのための、オープンソースのスクリプト言語とそのエンジンだ。RockScriptは、JavaScriptによく似た言語をそのエンジンで実行することにより、BPEL(Business Process Execution Language)やBPM(Business Process Modelling)と同じような方法で、マイクロサービスシステム内のトランザクション実行のコーディネーションを可能にする。

分散システム内におけるサービス間インタラクションの問題は目新しいものではない。従来のSOA(Service Oriented Architecture)コミュニティでも、“オーケストレーションとコレオグラフィ(choreography、振り付け)”が選択肢として広く議論されてきた。サービスオーケストレーションとは、(BPELなどで)事前定義されたビジネスプロセスワークフローに基づいて、集中型エンジンがサービスを自動実行する方法である。これに対してサービスコレオグラフィでは、ビジネスプロセスの集中管理は行なわず、代わりにサービス間インタラクションのコーディネーションをサービス自体の中に構築する。マイクロサービスの権威であるJames Lewis氏やMartin Fowler氏は、これを“高機能なエンドポイントと低機能なパイプ(smart endpoints and dumb pipes)”、と表現している。

オーケストレーションとコレオグラフィに関する議論はマイクロサービスコミュニティ内でも続いているが、このアーキテクチャスタイルがサービスのコレオグラフとして一般的に受け入れられている。しかしながら、マイクロサービスアーキテクチャスタイルを採用する(そしてプロセスのオーケストレーションに多大な投資をする)企業数が増加して、サーバレスないしFaaS(Function-as-a-Service)フレームワークを使用して実装されたファイングレインなサービスが市民権を得た結果、オーケストレーションフレームワークが再び注目を集めるようになっている。RockScriptはこのタイプのオーケストレーションフレームワークの一例として、特にマイクロサービス実装を対象とするものだ。

RockScript wikiには、“マイクロサービスとのインタラクションはおもにJSON over HTTPで実行される”が、このようなインタラクションがトランザクションに参加するのは容易ではない、と述べられている。インタラクション内のあるタイミングでコールされたサービスがクラッシュしたり、下位インフラストラクチャのある種のコンポーネントがフェールする場合があるためだ。ビジネスプロセスで複数のマイクロサービスインタラクションを組み合わせた場合の一貫性を保つためには、コールグラフとその完了ないし障害の記録を保管し、管理しなければならない。このようなマルチフェーズトランザクションプロトコルのマイクロサービスにおけるベストプラクティスの一例が、Sagaパターンとして取り上げられている。

RockScript言語は、イベントに対する応答として起こるべきことをキャプチャするように設計されている。通常は外部イベントが入力トリガとして使用され、その結果としてコマンドがマイクロサービスAPIに送信される。場合によってはその間でデータの変換が行われる。言語はHTTP APIとメッセージ交換の両方に接続可能なように設計されているが、現時点ではHTTP APIのみが実装されている。プロジェクトの発案者で、ActivitiとjBPMプラットフォームの創業者でもあるBaeyens氏は、RockScriptの構想として、“エンタープライズシステムで発火されたイベントに接続される小規模なスクリプトを簡単に作成できること”をあげている。“スクリプトに対して、このような形式のトリガの接続を簡単に確立できるようにしたいのです。”このようなトリガの概念は、ワークフロー自動化フレームワークであるIFTTTZapierに近いものがある。

RockScriptの実行にはレジリエンスがあり、アプリケーションおよびインフラストラクチャのクラッシュ時には、ランタイムエンジンがスクリプトの再実行を保証する。各スクリプト実行時のランタイム状態は、イベントソーシングのアプローチを使用してクラスタ全体に保存される。これにより、スクリプトが非同期アクティビティの完了を待つ間、スレッドやメモリといったリソースが消費されることはない。イベントソーシングを採用したことにより、サーバクラッシュなど何か問題が発生した場合の原因調査や、最後に保存された状態からのリカバリ試行も可能になった。

InfoQはBaeyens氏と席を共にして、RockScriptを開発した動機について聞いた。

InfoQ: InfoQへようこそ、Tom!あなたはワークフローやBPM(Business Process Management)に長く(jBPM、Activiti、過去にはEffektifを創設以来)関わっていますが、今回さらに新たなプロジェクトを発足させた理由は何でしょう?

Baeyens: これまで経験したプロジェクトは、非同期継続を扱うエンジンを実装する上で、数多くの知識を与えてくれました。しかし運用面では、開発者は2つの異なる世界で作業しなければならないことに気付いたのです – ワークフローはダイアグラムに基づいています。データ変換はこれまで、一般的にJavaScriptなどのプログラミング言語で記述されたアクティビティの中に置かなくてはなりませんでした。

従って開発者は、この2つの異なる世界を跨いで開発を行なわなければなりませんでした。ワークフローが開発者の主流技術としていまだ定着しないのは、ここに大きな理由があると私は考えています。ワークフローアクティビティの概念をJavaScriptのようなスクリプト言語に持ち込めば、開発者は自身の好きなひとつの世界で開発を行なうことができます。私の目標は、マイクロサービスインテグレーションを開発者コミュニティに広めて、マイクロサービス統合を今よりもずっと簡単にすることです。

InfoQ: RockScriptと比較できるような他のテクノロジは何でしょう?

Baeyens: 最近、AWSのステップ関数やMicrosoftのロジックアプリケーションなど、クラウドプラットフォームのベンダが同じようなサービスをローンチしています。これらのソリューションは、それ自体がAPIやカスタムアプリ、サーバレスなクラウド関数(あるいはラムダ関数)を相互に接続する役割を果たしています。今日のサービス間インタラクションは一般的にJSONをベースとして、HTTP経由で転送されており、非同期メッセージングへの移行が進みつつあります。BPELではこれまで、XMLベースのサービスへの統合が試みられてきましたが、非常に複雑なものになっていました。これはつまり、統合プログラム言語の必要性が常にあるということです。RockScriptでは、今日のAPIとマイクロサービスのエコシステムに最適な統合スクリプト言語になることを目標としています。

InfoQ: あなたはJavaに深く関わっているにも関わらず、RockScriptでは基盤としてJavaScriptを選択しました。これはなぜでしょう?

Baeyens: 3つの理由があります。

  1. オンラインIDEとJavaScriptの知識さえあれば、サーバレスクラウドインフラストラクチャ上で完全なアプリケーションを開発できる時代が来ると思うからです。
  2. CTOと開発リーダには、自社が選択したテクノロジに対して、新しい開発者が短期間で学習し、開発作業を立ち上げることのできる方法を知る必要があります。RockScriptはJavaScriptのサブセットですから、ほとんどの開発者にとって習得が容易なのです。
  3. JavaScriptの構文は、マイクロサービス間のインタラクションでデータ変換を行なうには理想的です。ほとんどのマイクロサービスはJSONをベースとしています。そのようなデータを扱う上で、JavaScriptは最良の言語なのです。

RockScriptのwikiには、プロジェクトは現在コンセプト実証の段階であり、実装は暫定的であるため、現時点では安定性に関する保証はない、とされている。現在の実装は開発者エクスペリエンスに重点を置いているため、現時点での永続性はメモリ上でのみ提供(SQLあるいはKafkaなどのデータストアに永続性を構築する予定である)されており、JavaScript言語の適用範囲も最小限となっている。プロジェクトではフィードバックを求めており、GitHub issuesTwitterメーリングリストなどを通じて報告できる。

この領域には新たなオーケストレーションフレームワークがいくつも現れている。興味のある読者は、それぞれのWebサイトで詳細を確認するとよいだろう。

Apache CamelSpring Integrationなど既存の統合フレームワークでも、オーケストレーション動作の多くをエミュレートすることができる。ActivitijBPMMS BizTalk BPMといった既存のBPM(Business Process Modeling)ツールでも、同様なことが可能だ。

RockScriptに関するその他の情報は、プロジェクトのWebサイトやGitHubリポジトリで確認することができる。またプロジェクトのWikiには、ハンドオン・チュートリアルが公開されている。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT