用一份 JSON 串起 HTTP / Dubbo / WebService / SQL / 脚本:开源服务编排引擎 service-arrange – 码猿手 – 博客园

用一份 JSON 串起 HTTP / Dubbo / WebService / SQL / 脚本:开源服务编排引擎 service-arrange – 码猿手 – 博客园


前に書く

日常のビジネスでは、HTTP マスター注文サービス、Dubbo 在庫、WebService の古いロジスティクス、SQL 検証、およびシェル通知スクリプトなど、「注文」アクションの背後に十数個のインターフェイスが存在することがよくあります。コード内にハードコーディングされている場合、リンクは明確に見えず、変更は本体全体に影響します。順序を変更したり、障害補償を追加したりしたバージョンがリリースされます。

サービス手配 私が解決したいのは、この呼び出しチェーンを画像に描画し、DSL (JSON) にエクスポートし、解析、スケジュール、再試行、補正、追跡をエンジンに任せることです。プロセスを変更するためにコードを変更する必要はなく、図を変更するだけです。

それは何ですか

軽量の DSL ベースサービス手配エンジン + ビジュアル オーケストレーション コンソール:

  • フロントエンド キャンバス出力 DSL (JSON) – システム全体の唯一のコントラクト。
  • バックエンド エンジンは、解析→スケジューリング→実行→オーケストレーション (決定/ループ/補償) を担当します。
  • メッセージ駆動型 (RabbitMQ + Spring Cloud Stream)、MongoDB ストレージ、ZooKeeper 分散ロック。

位置づけの類似点: ワークフロー エンジンの軽量バージョンですが、「手動承認」ではなく「サービス呼び出し」に重点を置いています。

コアコンピテンシー

1. DSL は契約です

ノードと接続は同形であり (接続自体もセルです)、フラットです。 cells 配列+ groups 補償グループ + ランタイム グローバル パラメーター。値の表現は次のように統一されます。 #节点id$jsonpath、サポート #header_$X-Token、#dynamicParams_$idx 待って。フロントエンドのエクスポートとバックエンドの分析は、同じ仕様 (11 個の検証ルール R1 ~ R11 を含む) に厳密に従います。

2. ビジュアル オーケストレーション コンソール (依存関係なし)

純粋な HTML5 + ES5 JavaScript、フレームワークなし、ビルドなし、npm インストールなし、node serve.js 走り始めることができます。左側の分類された折りたたみパレット、右クリック メニュー、ダブルクリック編集、プロパティ パネルのグループ化、接続の丸い頭と角、履歴のダーティ データの自己修復、インポート、エクスポート、および DSL 検証のサポート。

3. 20 人のオペレーターが主流の通話フォームをカバー

カテゴリ オペレーター
外部通話 HTTP、SQL (JDBC 直接接続)、Dubbo (HTTP ゲートウェイ汎用化)、WebService (SOAP)
スクリプト 貝殻、瓶、パイソン
内部演算子 データマッピング、ルール変換、データ結果、意思決定、JSON↔XML交換、遅延
補償する データマッピング補償、HTTP/Dubbo/WebService補償

キャンバス上のオペレータノードを統合する node_op実際の型は次のように与えられます。 data.opType 遅延解析 (CellTypeMapper)、新しいオペレーターを追加する場合、エンジンのスケジュール コードを変更する必要はありません。

4. 完全なプロセスガバナンス

Plan ドラフト/リリース/非アクティブ化 + バージョンのスナップショット。本番環境では、リリースのアクセス制御を開くことができます (require-published公開されたプランのみを実行できます)。冪等で実行中 (X-Idempotency-Keyヒットすると、既存のインスタンスが直接返されます)。フルリンク traceId(TraceFilter → MDC → Inst);単一タスクのタイムアウト (RetryRules.timeoutMs 優先、全世界対応)。失敗したら押してください RetryRules 再試行され、バックオフ キャップによって保護されます。インスタンスのキャンセル/再開。GET /health アプリケーション + Mongo のダブル探索。

5. 信頼性設計

ZooKeeper のインスタンス レベルの分散ロックにより、同じインスタンスのシリアル スケジューリングが保証されます。ロック取得失敗の上限を設定したリニア バックオフの再キューイング、制限を超えた場合の強制 ACK 破棄 (メッセージ ホットスポットのアイドリングを防ぐため)。有害メッセージの処理数の上限。ループ行数の上限 (一定の条件によるスレッドがいっぱいになるのを防ぐため)。障害時に補償ブランチが選択され、ローカル トランザクション ロールバックを実装するための強力な補償の組み合わせがサポートされています。

6. プロジェクトの詳細

均一に戻す {code, msg, data} + @RestControllerAdvice グローバル例外 (IllegalArgumentException → 400); HTTP/Dubbo/MongoDB 送信ネットワーク タイムアウト。 Mongo 接続プールのパラメータ。コンシューマの同時実行性とバック プレッシャーのしきい値はすべて構成可能です。

建築

浏览器 ──REST──▶ web 模块(Inst / Plan / InstQuery / InstLog / Health 控制器
                      + TraceFilter + GlobalExceptionHandler)
                          │
                          ▼
              engine 核心引擎
   DslParser ──▶ Inst(图结构)──▶ TaskInterface(convert) ──▶ Task
        │                                                   │
        │              TaskRunConsumer ◀── TaskProductor ◀──┘
        │                   │
        │             Execute.runProcess(按 cellType 路由到 20 个算子)
        │                   │
        └── TaskResultConsumer(加 ZK 实例锁 → 决策/循环/补偿编排 → 投递下一批)
                          │
        ┌─────────────────┼─────────────────┐
        ▼                 ▼                 ▼
     RabbitMQ          MongoDB          ZooKeeper

テクノロジースタック: Java 8+ / Maven マルチモジュール、Spring Boot + Spring Cloud Stream、Spring Data MongoDB、Curator + ZooKeeper、SpEL + カスタム値式、Hutool。フロントエンドの依存関係のない静的サイト。

クイックスタート

前提条件: JDK 8+、Maven、MongoDB (27017)、RabbitMQ (5672)、ZooKeeper (2181)。

# 1. 克隆(Gitee 主仓库 / GitHub 镜像)
git clone 
cd service-arrange

# 2. 构建并启动后端(默认 8082,上下文路径 /servicearrange)
mvn clean package -DskipTests
java -jar backend/web/target/service-arrange.jar

# 3. 启动前端控制台(零依赖,127.0.0.1:5173)
cd frontend && node serve.js

サービスの準備ができていることを確認します。

curl 
# {"code":200,"msg":"success","data":{"status":"UP","mongo":"UP"}}

30秒で手続き完了

# 1. 保存流程模型(DSL 可从控制台导出,或参考 backend/web/src/main/resources/hrh_http.json)
curl -X POST  \
  -H 'Content-Type: application/json' \
  -d '{"name":"订单链路","dsl":"{...}","remark":"demo"}'

# 2. 发布(生产建议 task.orchestration.require-published: true)
curl -X POST "http://localhost:8082/servicearrange/plan/publish?id="

# 3. 运行(幂等键可选,traceId 自动生成)
curl -X POST "http://localhost:8082/servicearrange/inst/run/or/getResult/?servea_optType=run" \
  -H 'X-Idempotency-Key: order-20261018-001' \
  -H 'Content-Type: application/json' -d '{"orderId":"A1001"}'

# 4. 观察
curl "          # 实例 + 任务 + 日志
curl "     # 节点级日志

合計 17 の REST インターフェイスがあります: 6 つのプロセス モデル、1 つの実行中のインスタンス、4 つのインスタンスのクエリと介入、1 つのインスタンス ログ、4 つのオペレーター登録、および 1 つのヘルス チェック。

インターフェースの概要

コンソールには、インスタンス リスト、配置デザイナー、実行記録、実行詳細、オペレーター登録、およびスキーマ ツールの 6 つのビューがあります。

用一份 JSON 串起 HTTP / Dubbo / WebService / SQL / 脚本:开源服务编排引擎 service-arrange – 码猿手 – 博客园

インスタンスのリストには、ステータス ロゴ、リリース ステータスとバージョン、ノード数、実行時間が表示されます。各インスタンスは、オーケストレーション/リリース/実行/実行レコードに直接入力できます。

オーケストレーションデザイナーこれがコアです。左側は分類ノード ライブラリ (HTTP / SQL / シェル / 内部演算子) です。キャンバスでは、通常線、決定線、サイクル線、補正線の 4 つの線種がサポートされています。ノードはドラッグ アンド ドロップ、右クリック メニューによる編集、プロパティ パネルでのグループ化が可能です。上部のツールバーには、インポート/エクスポート/検証/保存/公開/保存して実行の機能があります。

オーケストレーションデザイナー

ノードをドラッグしてレイアウトを調整します

操作記録と操作内容: 実行ごとにレコードが生成されます。詳細ページの配置図は結果(成功/失敗/スキップ/実行中/未実行)に応じて色分けされており、オペレーターレベルのログまでドリルダウンできます。

運用記録動作詳細・配置図操作詳細・インスタンスログ

オペレーター登録外部 API を再利用可能なアセットとして登録します。登録後は、任意のインスタンスの配置ページにドラッグ&ドロップすることができます。スキーマツール開始/終了ノードの入口パラメータと終了パラメータを維持するために使用されるスキーマ。

オペレーター登録スキーマツール

「保存して実行」をクリックすると、開始ノードの JsonSchema が自動的に実行パラメーター形式にレンダリングされます。

実行入力パラメータ

スクリーンショットは、コンソールに付属のデモ データから取得したものです (バックエンドには接続されていません)。右上隅の接続性表示 404 は予期された現象です。

完全なケース: 注文履行リンク (補償あり)

プロセス:開始 → データマッピング (入力パラメータの組み立て) → HTTP マスターオーダー → WebService Logistics → 終了同時に、補償グループを HTTP ノードにアタッチします (補償データ マッピング → HTTP 補償)。いずれかのノードで障害が発生すると、補償ロールバックがトリガーされます。

正常に実行されました: 6 つのノードすべてが成功、インスタンスのステータス SUCCESS高麗人参を輸出する際には物流注文番号を持参してください(つまり、上の04 / 05の2枚の写真)。

実行に失敗しました: WebServiceロジスティクスノード接続タイムアウト → レコード例 ERRO ログ → 補正ラインにヒット → HTTP補正/ダボ補正を順に実行 → インスタンス設定 FAIL未実行のノードは「スキップ」に設定されます。

失敗した実行・インスタンスのログ失敗した実行・配置グラフの色付け

これは「ローカルトランザクション + 補償」の実装形態です。分散トランザクション プロトコルを導入せず、ピクチャを使用してロールバック アクションを宣言し、失敗パスと成功パスを同等に観察できます。

書類

ウェアハウスには 17 のドキュメントが組み込まれており、エントリから運用および保守までのすべてをカバーしています。クイック スタート、プロジェクト概要、DSL 仕様 (独自契約)、実行エンジンとスケジューリング プロセス、データ モデルとメッセージ モデル、REST インターフェイスの説明、エンタープライズ オーケストレーション機能、オペレーター拡張ガイド、フロントエンド コンソールの説明、構成の説明、導入ガイド、テスト ガイド、システム アーキテクチャ、コーディング仕様、機能リスト、プロジェクトのステータス、ドキュメントの説明です。からの入り口 docs/文档说明.md まず、最短の読み取りパスが役割ごとに与えられます。

倉庫の住所

ライセンス:GPL-3.0。

結論

また、「分散したサービス呼び出しを監視可能、再試行可能、補償可能なリンクに結び付ける方法」に悩んでいる場合は、これを軽量の開始点として使用できます。DSL 契約は明確で、オペレーターはプラグイン可能で、コンソールはすぐに使用できる依存関係がありません。ドキュメントには、設計上の決定と実装のギャップがすべて明確に記載されています。スター/問題/PR 歓迎。



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *