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
イベントハンドラリソース管理、イベントキュー、ハンドラ実行、チェーン管理機能などを提供しています。ネットワーク機器を非同期で制御するためのCLI
、Netconf
のテンプレートサービスをバンドルしています。
リソース | 概要 |
---|---|
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
は、内部キューや外部コンポーネントが提供するイベントストリームエンドポイントからのイベント検出をトリガーに駆動するプラグインです。
これら様々なトリガーで駆動するプラグインは、そのランタイムにおいてさらに他の処理を駆動していくことで柔軟な処理モデルの設計を可能にします。以下の図は駆動モデル間の組み合わせを俯瞰した概念図です。