OutSystemsのアーキテクチャ
目次
OutSystemsの基礎となるアーキテクチャは、アプリケーションのエンドユーザー、アプリケーションを作成する開発者、またはアプリケーションを管理する運用チームには見えないものです。この記事では、OutSystemsのアーキテクチャを、アプリケーションのパフォーマンスやセキュリティの最大化、継続的なデリバリープロセスのオープン化、継続的なイノベーションの促進といった観点から説明します。
Platform Server
OutSystems Platform ServerはOutSystemsの中核をなすものです。Platform Serverは、一連のサービスによって標準のWebアプリケーションサーバースタックを補完するサーバーコンポーネントです。
OutSystemsでは、専有的なランタイムエンジンを使用しません。すべてのアプリケーションは、標準アーキテクチャやフレームワークに依存しています。
OutSystems Platform Serverは、アプリケーションを標準のWebアプリケーションサーバーに生成、最適化、コンパイル、デプロイしたり、ネイティブモバイルアプリにパッケージ化したりする際に必要となるすべての手順を処理し、特殊な機能を内部に備えています。
- コードジェネレータ: モデル化されたアプリケーションをビジュアルエディタに取り込み、パフォーマンスのために保護および最適化され、標準テクノロジーによって稼働する標準アプリケーションを生成、コンパイル、アセンブルします。
- デプロイサービス: 作成したアプリケーションを標準のWebアプリケーションサーバーにデプロイし、アプリケーションが整合性を持ってサーバーファームやクラウドインフラの各フロントエンドにインストールされるようにします。
- アプリケーションサービス: スケジュール設定されたバッチジョブの実行を管理し、エラー、監査、パフォーマンスメトリックなどのイベントを保存する非同期ロギングサービスを提供します。
- モバイルアプリビルドサービス: プライベートストアやパブリックストア、またはモバイルデバイス管理(MDM)やモバイルアプリケーション管理(MAM)ツールを介して、コンパイルされたモバイルアプリをネイティブモバイルアプリにパッケージ化し、配布できる状態にします。
コードジェネレータ
このコンパイラは、ビジュアルエディタで開発されたアプリケーションモデルを取り込み、すべてのネイティブアプリケーションコンポーネントを生成し、アプリケーションサーバーにすぐにデプロイできるようにします。
コードジェネレータは、アプリケーションモデルを取得後、以下の処理を実行します。
- アプリケーションモデルの詳細なグラフ分析を実行。このグラフは、外部の依存関係をチェックし、アプリケーションを最適化するために使用されます。
- コードを生成するときに実行できる最適化をチェック。たとえば、アプリケーション内にデータベースからデータを取得するクエリがある場合でも、そのクエリの結果がアプリケーションで使用されない場合、オプティマイザはそのクエリを削除するようにフラグを立てます。
- 外部サービスに加えた変更からアプリケーションを分離するために連携プロキシを生成。
- アプリケーションスタックのすべてのレイヤーに対してネイティブコードを生成(データベースを操作するSQL、バックエンドのビジネスロジックサービス、フロントエンドのJavaScriptコンポーネント)。
- アプリケーションにセッション管理、認証、構成をバンドル。
- アプリケーションにロギングおよび監視機能を追加。これにより、開発者は実行時にエラーや監査、パフォーマンスメトリックをチェックできます。
- ビルド用スクリプトを生成し、データベースモデルをアップグレードしてアプリケーションをデプロイ。
デプロイサービス
デプロイサービスは、作成したアプリケーションコンポーネントをアプリケーションサーバーにデプロイし、アプリケーションが整合性を持ってサーバーファームの各フロントエンドサーバーにインストールされるようにします。
デプロイコンポーネントには2つの種類があります。デプロイサービスは、特定のフロントエンドに.NETアプリケーションをデプロイします。デプロイコントローラは、以下のようにすべてのフロントエンドサーバー間のデプロイを調整します。
- デプロイコントローラは、OutSystemsコードジェネレータを使用してアプリケーションモデルをコンパイルします。
- アプリケーションをコンパイルすると、各フロントエンドサーバー上のデプロイサービスにコードが送信されます。次に、デプロイコントローラはデプロイを監視し、アプリケーションが正常にインストールされるようにします。
- すべてのデプロイが完了すると、デプロイコントローラは、作成したデータモデルと一致するようにランタイムデータベースを更新します。完了しなかった場合、デプロイはキャンセルされ、アプリケーションの古いバージョンが変更されることなく引き続き実行されます。
アプリケーションサービス
OutSystems Platform Serverには、実行時にアプリケーションを管理するためのサービスもあります。これには2種類のサービスがあります。
- スケジューラサービス: このサービスは、スケジュール設定されたタスクの実行を管理します。
- ログサービス: このサービスは、アプリケーションのエラー、監査、およびパフォーマンスイベントを管理します。
スケジューラサービス
OutSystems Platform Serverは、アプリケーションでスケジュール設定されたバッチジョブの実行をサポートします。実行時に、スケジューリングサービスは、メタデータデータベースから次の保留中のジョブを取得し、実行します。
バッチタスクは、水平方向の拡張のために設計されているため、すべてのフロントエンドサーバーに分散されます。
ログサービス
アプリケーションは、エラー、監査、およびパフォーマンスログを作成するよう自動的に構成されます。実行時にこれらのメトリックは非同期で取得されるため、メトリックが絶えず作成されている間も、アプリケーションのパフォーマンスが損なわれません。
アプリケーションの通常の処理と競合しないように、ログサービスは低い優先度で実行されます。実行時に、アプリケーションがエラー、監査、またはパフォーマンスイベントを生成すると、以下のようになります。
- イベントがフロントエンドサーバーの標準メッセージキューに書き込まれます。
- フロントエンドサーバーで実行されているログサービスは、メッセージキューからイベントを非同期で取得し、ログデータベースに追加します。
- イベントは、監視コンソールによって、エラー、監査、またはパフォーマンスのデータを表示する際に活用できます。また、利用可能なAPIを使用して外部システムに送信することもできます。
モバイルアプリビルドサービス
モバイルアプリビルドサービス(MABS)は、モバイルデバイスへのインストール向けにモバイルアプリをネイティブアプリにパッケージ化するプラットフォームサービスです。MABSは、iOSやAndroid向けにネイティブアプリをコンパイル、パッケージ化、署名するといった煩雑な作業を排除する拡張性の高いサービスとして設計されています。そのため、モバイルアプリの構築を効率化し、1クリックでバックエンドからフロントエンドに移行することができます。
MABSに対する各リクエストは隔離されたサンドボックス環境でキューと同時に処理され、情報のセキュリティを確保します。MABSとのすべての通信はPlatform ServerおよびHTTPSを介して行われ、ビルド操作を実行するのに必要な情報のみがMABSに送信されます。つまり、バックエンドのロジックに関する情報は送信されません。MABSはすべての情報を暗号化し、プロセスを完了するための必要最小限の期間のみ保存します。
MABSが実行するビルドプロセスは以下のとおりです。
- 基本となるネイティブアプリの構造やデフォルトでネイティブ機能を提供するOutSystemsテンプレートを使用した新規プロジェクトの作成
- アプリのリソース(アイコン、スプラッシュ画面、構成)の処理
- モバイルプラットフォーム(iOSまたはAndroid向け)の設定
- ネイティブプラグインの追加
- アプリに署名するキーの処理
- パッケージのビルド
モバイルパッケージが作成されると、OutSystemsはすべての情報を削除してアプリケーションパッケージを収集し、ユーザーに返します。