Welcome to Qmonus-SDK

開発の背景

企業基幹システムはモノリシックに構築され、時間の経過とともに巨大化し、ビジネス環境や技術の進化に追いつけませんでした。柔軟にそして迅速にビジネスや技術の変化に追従していくためには、マイクロサービスアーキテクチャへの移行を加速させる必要があります。

Monolithic Architecture Microservice Architecture
サービス統合型のアーキテクチャ。
複雑で変更にコストがかかる。
ビジネスや技術の進化についていけない。
サービス分散型のアーキテクチャ。
変化に柔軟に対応し、ビジネスや
テクノロジーの進化に追従する。


開発コンセプト

Qmonus-SDKは、マイクロサービスの開発を加速するためのソリューションです。特に、企業の基幹システムで重要となる、マイクロサービス間トランザクションの強い一貫性を保証する仕組みを特徴としています。

  • 生産性と安定性に優れた柔軟かつスピーディなマイクロサービス開発基盤
  • 異なるシステム空間を横断したトランザクションの一貫性を保証
  • サービス間の相互作用を徹底して可視化
  • システム規模に関係なく、投資コストに応じて柔軟なインフラ構成を選択できるポータビリティを確保
  • API統合の基盤コンポーネント
  • 企業バックエンドオーケストレーションのためのプラットフォーム


ソフトウェア構成

Qmonus SDKは、幾つかのコアサービスとSDKポータルで構成されています。開発者は、これらのコンポーネントが提供するサービスをSDKポータル上で自由に組み合わせることができ、迅速にアプリケーションを開発することができます。開発者のカスタムコードは学習容易性と高い生産性が期待されるPythonで記述します。強力な可視化機能により、アプリケーションのテスト・デバッグもSDKポータル上で行うことができます。
ユーザーアプリケーションは、各メタマイクロサービス上でプラグインとして動作します。



メタマイクロサービスの概要

API Gateway as a Service

APIのルーティングを一元的に管理します。APIは、ルーティング単位でアクションパイプラインをカスタマイズすることができ、Request/Responseの様々なデータ加工を実現します。 アクションパイプライン設定はAPIを通じて動的に編集できます。アクションパイプラインにはPythonへのフック機能が提供されており、簡単なステートレスマッシュアップや柔軟なモック作成が可能です。 後述するSchedule as a Serviceと連動し、管理されるAPIは絶対時刻指定でブッキング呼び出しが可能となります(X-Xaas-Schedule-Datetime拡張ヘッダによる指定)。 Workflow as a Serviceを通じて生成されたデータベース上のモデルに対してGraphQLによるプロキシアクセスをサポートしています。 APIGWを経由した通信はリアルタイムにFrontalのUI上でモニタリングすることができます。

リソース 概要
Routing APIプロキシの設定、及びアクションパイプラインをカスタマイズすることができます。
Parameter Mapper JSONボディのキー/値コンバータを作成できます。コンバータはパイプラインに組み込むことができます。


Transaction as a Service

複数のマイクロサービスにまたがるワークフローのデータ整合性を保証するトランザクション機能部です。トランザクション情報を管理し、ステートマシン、排他制御、リカバリー機構などを提供します。

リソース 概要
Transaction トランザクション情報を管理します。状態マシンとリカバリ制御機能を提供します。
Mutex トランザクションが保有するロックを管理して排他制御を実現します。
Abort hook トランザクションが中断したときの自律アクションを設定することができます。トランザクション状態マシンを補完するオペレータアクションの自動化を実現します。
Quota トランザクションの種別に対して同時走行数の上限を設定できます。
Counter グローバルカウンタを作成できます。オーダー番号などの生成に利用できます。
IPAM IPアドレスプールを作成できます。


Scenario as a Service

プラグイン開発の核となる機能部でトイブロックビルディング形式で記述可能なワークフロー、部品化のためのクラス(ATOM)やモジュール、ファンクションなど様々なアプリケーション部品を提供します。すべてのリソースは作成したその時点から利用できます。また、ユニットテストフレームワークやデバッグ機能も提供しています。

リソース 概要
Workspace プラグインの開発空間を管理します。開発者モードでのみ有効です。github統合モードではgithubリポジトリを開発空間として扱います。
Config プラグインが利用するアプリケーション固有の設定情報を管理します。
Command ワークフローで使用できるカスタムのコマンド部品を作成します。
Variable Group ワークフローで使用可能なグローバル変数のセットを定義できます。
Scenario ワークフローAPIを作成します。非同期モードの場合は、トランザクションサービスと統合されます。
Daemon 一定のサイクルで稼働するワークフローを作成します。
Template jinja2テンプレートを作成できます。ワークフローやATOMメソッドなどのカスタムスクリプトから簡単に使用できます。
Model データベースのテーブルを生成し、ORMクラスが自動的に生成されます。
ATOM プロパティ及びメソッドのツリー伝播機構と自律状態遷移機構を具備する高度なクラスを作成できます。
Instance ATOMインスタンス情報を管理します。
Module カスタムのPythonモジュールを自由に作成し、ワークフローやATOMなどから使用できます。
Function カスタムのPython関数を自由に作成し、ワークフローやATOMなどから使用できます。
Alias MUオブジェクトのキー/値コンバーターを作成できます。
Protobuf gRPCインタフェースを提供するためのプロトコルバッファインターフェイスを定義できます。
gRPC Servicer gRPCサービスを提供するサービサーを作成できます。
Follower プラグイン追跡モードで稼働するフォロワーを作成できます。 (エッジソリューションでの高度な使用法)
Job 非同期カスタムジョブを作成できます。
Interactive Shell Qmonus名前空間で実行されるPython-REPLを提供します。
Closed Loop クローズドループを開発を支援し、スケーラブルに自律駆動するワークフローを提供します。
DAG 有向非巡回グラフでワークフローを表現し、トポロジカルソートにより、適切な順序で分散実行するワークフローモデルです。


Schedule as a Service

絶対時刻指定でのOutgoing Webフック機能を提供しています。

リソース 概要
Schedule 絶対時刻指定のWebフック予約を管理します。
Outgoing web hook 曜日と絶対時刻指定でのWebフック予約を管理します。


Event chain as a Service

イベントハンドラリソース管理、イベントキュー、ハンドラ実行、チェーン管理機能などを提供しています。ネットワーク機器を非同期で制御するためのCLINetconfのテンプレートサービスをバンドルしています。

リソース 概要
Lambda function イベントに連動して駆動する任意のカスタムイベントハンドラーを作成できます。
CLI Proxy CLI送受信テンプレートを駆動する、イベントハンドラーを作成できます。
NETCONF Proxy NETCONF送受信テンプレートを駆動する、イベントハンドラーを作成できます。
Device CLI ProxyやNETCONF Proxyによって制御する対象デバイスの情報を管理します。
Device Role DeviceにCLI ProxyやNETCONF Proxyを関連づけるロールを定義できます。


Data collection as a Service

データ収集テンプレートと収集ターゲットを管理し、データ収集を行う機能を提供しています。

リソース 概要
Collection pattern データ収集項目はパターン定義できます。収集プロセス自体もカスタマイズできます。
Collection データ収集ターゲットを作成できます。
Collection hook データ収集ターゲットを作成、更新、削除する際にカスタムスクリプトにフックする機能を提供します。


Data reflection as a Service

収集されたデータ加工処理や伝搬などのアクション定義を管理し、外部サービスへの連携機能を提供します


リソース 概要
Reflection 収集したデータを反射する方法をカスタム定義できます。ZABBIXへのメトリック転送が標準でサポートされています。
Worker カスタムのFIFOや外部のデータ収集サービス(Kafka、AWS SQS、Cloud Pubsubなど)に接続して情報をコンシュームする常駐型のワーカーを作成できます。


Portal

開発者向けのSDKポータルとオペレータ向けのメンテナンスUIを提供します。詳しくは、Qmonus SDK Frontal操作マニュアルを参照ください。



処理駆動モデル

Qmonus SDKでは、様々なアプリケーション設計や外部コンポーネントとのインテグレーションに柔軟に対応するため、カスタムプラグインの処理駆動モデルを網羅的にサポートしています。
以下の表は、アプリケーションの処理を開始するトリガーと各プラグインの対応を示しています。On Requestは、外部からのAPI呼び出しで駆動するプラグインです。On Timeは、絶対時刻に駆動するプラグインです。Periodicは定周期で起動するプラグインです。State Changeは、内部オブジェクトの状態変化をトリガーに駆動するプラグインです。Event Consumeは、内部キューや外部コンポーネントが提供するイベントストリームエンドポイントからのイベント検出をトリガーに駆動するプラグインです。


これら様々なトリガーで駆動するプラグインは、そのランタイムにおいてさらに他の処理を駆動していくことで柔軟な処理モデルの設計を可能にします。以下の図は駆動モデル間の組み合わせを俯瞰した概念図です。