アーキテクチャ

Version 26.2.9619


アーキテクチャ


CData Arc は、ビジネスプロセスを統合するメッセージ駆動型のプラットフォームです。アプリケーション、データベース、外部メッセージシステムが互いにやり取りできるコミュニケーションハブを提供します。

デザイン原則と実装

Arc のアーキテクチャは、一連のコアとなるデザイン原則に則って決定されています。このセクションでは、Arc のデザインの3つの側面に着目します:

  • CData が重視する原則と価値
  • Arc の高度な理解に必要なコアとなるコンセプト
  • アーキテクチャ上の判断と、その判断がデザイン原則をどう反映しているか

コアとなる原則およびコンセプトセクションは、技術的な知識を持ったユーザーと一般のユーザー、両方に向けたものになっています。残りの実装のセクションは、エンジニアにArc のアーキテクチャを活用する方法を理解してもらうためのものです。

コアとなる原則

次の図は、Arc デザインの基本原則を示しています:

連携プラットフォームで上記のデザイン原則を実装する方法は、Arc のアーキテクチャ以外にも存在します。次に実装のアイデアと、それがどのようにデザイン原則を反映するかを説明します。

コンセプト

大枠では、Arc の実装は3つの要素から構成されます:

  • フロー
  • コネクタ
  • メッセージ

次の図は、これらの要素間の関係を示しています:

フロー

Arc フローは、一連の自動化されたデータ処理タスクを実行する設定済みのワークフローです。フローは複数のコネクタによって構成され、1つのコネクタが処理したデータが自動的にフロー内の次のコネクタに渡されるよう接続されます。

UI では、フローはフローページのワークスペースに保持されます。コネクタを空のキャンバスに追加し、設定したり相互に接続することができます。次の画像は、AS2 とFile の2つのコネクタから構成される簡単なフローを示します。

コネクタ間の青い矢印は、AS2 コネクタが受け取ったデータが自動的にFile コネクタに渡されることを示します。コネクタの右側にある青い点を別のコネクタの左側にドラッグすると、この関係が構成されます。

フロー内の一連のコネクタはデータ処理の論理的な手順を構成するため、特定のビジネスタスクを達成できるようフローをデザインしてください。タスクとしては単なるファイルのダウンロードから、受信したビジネス文書に基づいて複数のバックエンドアプリケーションを同期することまで、さまざまな複雑度のものがあり得ます。

異なるタスクを達成するためにArc 内で複数のフローを設定することもできます。フローは、青いフローの矢印で明示的に接続されていなければ、互いに独立して動作します。

コネクタ

コネクタはフローの個別の部品で、アプリケーションデータおよびメッセージに影響します。各コネクタはメッセージに特定の操作を実行し、フロー内の次のコネクタ、または外部パーティ(FTP 同期先など)に渡します。

操作は主に3つのカテゴリに分けられます:トリガー、変換、およびターミナル。

  • トリガーコネクタは、受信オートメーションがファイルを取得または作成することによって、またはパッシブ受信をサポートするコネクタの場合は、コネクタが外部クライアントからファイルを受信することによってフローを開始します。AS2Email ReceiveSFTP が例として挙げられます。
  • 変換コネクタは、フローの途中に存在するコネクタで、メッセージに対して作業を実行する(何らかの方法でメッセージを変更する)役割を担います。X12XML MapCSV が例として挙げられます。
  • ターミナルコネクタは、フローの終端です。Arc がメッセージを基底のディスクに渡すか、またはメッセージが送信アクション中にコネクタによって消費され、アウトプットは生成されません。FileMySQL、またはUpsert 用に構成された任意のデータベースコネクタが例として挙げられます。

コネクタが上の操作を実行するときには、コネクタはトランザクションを処理していることになります。

フローページのワークスペースで、キャンバスにコネクタを追加すると、その構成設定パネルが開きます:

コネクタは、種類(AS2、SQL Server、XML など)に応じて異なる設定を持ちます。

AS2 やSFTP などの一部のコネクタは、外部パーティまたはサーバーからデータを受け取るか、外部パーティまたはサーバーにデータを送信します(あるいはその両方を行います)。これらのコネクタは通常、データがアプリケーションに入力されたり出力される、フローの起点または終点にあります。

XML Map やX12 などの他のコネクタは、アプリケーション内でローカルにデータを処理します。これらのコネクタは、(外部データソース以外の)他のコネクタからのみデータの受信が可能で、(外部デスティネーション以外の)他のコネクタにのみデータを送信できるため、通常はフローの中間に組み込まれています。

メッセージ

フロー内のコネクタ間でデータをやりとりする際には、メッセージとしてやりとりされます。メッセージは主に、ファイルペイロードデータ(Arc が処理しているデータ)とメタデータ(Arc がアプリケーションを通過するデータのフローを追跡するために使用する情報)で構成されています。

メッセージについては、メッセージの実装でより詳細に説明されていますが、メッセージは標準RFC822(インターネットメッセージ)形式のファイルである、というのが概要となります。コネクタがデータをフロー内の他のコネクタに渡すと、次の図に示すように、渡されたコネクタはデータをファイルに書き込み、ファイルを次のコネクタに渡します。

フローの各ステップで、メッセージ(ファイル)はアプリケーション側に受信、またはダウンロードされ(トリガーコネクタを使用)、アプリケーション内でローカルに変換されて(変換コネクタを使用)、アプリケーションから送信、またはアップロードされます(ターミナルコネクタを使用)。これらの各操作をトランザクションと呼びます。

Arc は透明性の高いシステムです。ファイルシステムを参照したり、メッセージがあるフォルダから別のフォルダへコピーされるのを確認したり、またはメッセージ内容を通常のテキストエディタなどのツールを使って表示することで、プラットフォーム内の動作を理解できます。

実装の概要

このセクションでは、先に定義したコアとなるコンセプト(フローコネクタ、およびメッセージ)の、Arc の実装に関する技術的な詳細と、この実装がどのようにCData のデザイン原則を満たすのかを説明します。

ファイルベースのアーキテクチャ

Arc はファイルシステム上のファイルにすべてのデータを保存します。そのため、アプリケーションに関わるすべてがディスク上に残ります。次に例を示します:

設定済みフロー内のコネクタは、トランザクションタブからファイル(メッセージ)を読み書きします。データが1つのコネクタから別のコネクタにデータを渡す際には、これらのメッセージファイルは最初のコネクタのReceive フォルダから、次のコネクタのSend フォルダに移動されます。

Arc はこうしたファイルシステムベースの構造にWeb UI を提供し、フローの簡単な構築、設定を実現します。 設定を管理するには、Arc の管理APIとUI の使用を推奨します。これらの方法はディスク上の設定ファイルを直接変更します。ファイルベースのアーキテクチャにより、Arc をInfrastructure as Code(IaC)ツールやGit などのバージョン管理システムと統合するのも容易です。Git をArc と統合する方法の詳細については、CData Arc の構成をGit でバージョン管理する方法を参照してください。

メッセージの実装

Arc のメッセージはアプリケーションが処理した生データを含む、ディスク上のファイルです。メッセージは2つの部分に分けられます:

  • ボディ:アプリケーションデータのペイロード
  • ヘッダー:メッセージのメタデータ

ヘッダーとボディの組み合わせは、RFC2822に準拠した.eml 拡張子のファイルに保存されます。このファイルは、標準的なテキストエディタやメールクライアントで開くことが可能です。ヘッダーはname: value ヘッダーを改行 文字で区切ったリストであり、ボディは2つの改行 文字でヘッダーと区別されます。

重要:Arc を安定して動作させるために、アプリケーションの実行中はこれらのファイルに直接アクセスしないでください。外部プログラムがこれらのファイルをロックすると、パフォーマンスと信頼性の問題が発生する可能性があります。

メッセージボディ

メッセージボディやペイロードは、アプリケーションによって処理される実際のファイルデータです。これは、リモートソースから受信されるデータで、変換コネクタなどで操作されます。メッセージヘッダーは主にArc がメッセージを追跡するために使用されますが、メッセージペイロードにはユーザーが主に関心を持つデータが含まれています。

データを受信すると、Arc はメッセージを生成して(新規メッセージをディスクに書き込んで)、受信中のデータをメッセージのボディに使用します。例えば、SFTP コネクタがリモートサーバーからファイルをダウンロードすると、リモートファイルの内容が新規メッセージのボディとなります。

データがアプリケーション内でローカルに処理される際には(例えば、EDI がXML に変換されたり、ファイルが新しい形式にマッピングされるなど)、操作を実行中のコネクタがインプットメッセージのボディを読み込み、メモリ内でデータを処理して、アウトプットメッセージのボディに結果を書き込みます。

アプリケーションがデータを送信する際には(例えば、リモートサーバーにファイルをアップロードしたり、ピアにファイルを送る、データベースに挿入するなど)、インプットメッセージのボディだけが送信されます。

メッセージヘッダー

メッセージヘッダーは、Arc がアプリケーションを通過するデータの進行状況を追跡するのに役立ちます。ヘッダーには、一意のMessageId(ファイル名が変更されても、Arc がメッセージのライフサイクルを完全に把握するのに役立ちます)、コネクタがメッセージを処理した時のタイムスタンプ、処理中に発生した可能性のあるエラー、その他のメタデータが含まれます。

ヘッダーは、メッセージの先頭にある headerName: headerValue 構文で、改行で区切られて表示されます。メッセージにカーソルを合わせて詳細を表示をクリックすると、関連するヘッダーが表示され、メッセージファイルの内容をダウンロードできます。

メッセージヘッダーは、Arc がフロー内で認識するのに有用なその他の値にも使用されます。例えば、リモートFTP サーバーのサブフォルダからファイルをダウンロードする際、Arc は、このフォルダパスをローカルシステムで再作成する必要がある場合に備えて、サブフォルダヘッダーを使用してメッセージへのフォルダパスを追跡します。

Arc は生データファイルに、ファイル処理の方法に関するメタデータを付加します。次は最も頻繁に出現するヘッダーの一部です:

  • フロー内でファイルを識別する一意の永続するMessageId
  • 処理中のファイルのタイムスタンプ
  • ファイルを処理したコネクタのConnectorId
  • エラーで処理に失敗したファイルのインスタンス

本アプリケーションがメッセージヘッダーを編集、および上書きすることはありません。処理履歴がすべて保持されるよう、新規ヘッダーは常に既存のリストに追加されます。

フロー内のメッセージ

Arc は、アプリケーションによって処理されたデータを追跡し理解するためにメッセージヘッダーを内部的に使用しますが、メッセージが調査されない限り、これらの詳細をユーザーに非表示にします。例えば、Arc は内部MessageId を使用してメッセージを識別しますが、トランザクションタブおよびメッセージタブには公開ファイル名が表示されます。

メッセージのヘッダーを確認するには、メッセージにカーソルを合わせてメッセージ詳細を表示を選択してください。次の画像はトランザクションタブのメッセージを示しています。

Arc はコネクタの内部Receive フォルダに書き込まれる際、フロー内のどの位置にあるかに関わらず、メッセージを.eml 形式で保存します。ただし、メッセージが外部システム(データベースやSFTP サーバーなど)に送信される場合、Arc はファイルの内容のみをアップロードし、.eml ヘッダーは含みません。同様に、File コネクタのSend アクションを使ってファイルをディスクに書き込む場合も、外部プロセスが期待する出力に合わせるため、Arc は.eml 構造を省略します。つまり、.eml ヘッダーはArc の内部ファイル形式の一部ですが、外部の送信先にデータを渡す際には含まれません。

バッチグループとバッチメッセージ

メッセージは複数のペイロードを含むことができ、その場合はバッチグループとみなされます。バッチグループ内の個々のペイロードは、次の図で示すように、バッチメッセージとみなされます。

バッチグループ

メッセージは、バッチグループにまとめてバッチ処理することで、パフォーマンスを向上させ、大きなメッセージのグループをより管理しやすくすることができます。バッチグループは、各MIME パートが個別のバッチメッセージであるMIME 形式のファイルです。バッチグループは、基本のメッセージで使用されるのと同じヘッダースキームを使用して、バッチに関するメタデータを保持します。これらのヘッダーは、バッチの個々の部分ではなく、バッチ全体の処理を追跡します。

バッチメッセージ

バッチグループ内の各バッチメッセージは、アプリケーションによって処理されるファイルペイロードデータを含むMIME パートです。各バッチメッセージには、MIME パート内のペイロード(バッチグループではない)に関連するメタデータが含まれます。バッチメッセージには複数のメタデータのセットがあります。1つはバッチグループ全体を追跡するためのヘッダーセットで、もう1つはバッチ内の各メッセージ用の個別のヘッダーセットです。

メッセージへのアクセスと閲覧

メッセージはディスク上のファイルなので、ユーザーや外部システムは現時点でArc パイプライン内にあるメッセージにアクセスし、閲覧することができます。外部アプリケーションを使用してメッセージにアクセスするには、ファイルシステム上のどこにメッセージ.eml ファイルがあるかを理解する必要があります。メッセージファイルの正確な場所については、フォルダ階層を参照してください。

重要:Arc を安定して動作させるために、アプリケーションの実行中はメッセージファイルに直接アクセスしないでください。外部プログラムがこれらのファイルをロックすると、パフォーマンスと信頼性の問題が発生する可能性があります。

Arc のUI やArc の管理APIでもメッセージを確認できます。メッセージは、メッセージを処理したすべてのコネクタのトランザクションタブ、およびアクティビティページに表示されます。詳細を表示をクリックすると、メッセージ情報ページが開きます:

このパネルに表示された値はメッセージヘッダーです。ダウンロードボタンをクリックするとメッセージボディにアクセスできます。ログをダウンロードをクリックすると、メッセージに関連するログをダウンロードできます。

メッセージトラッキングとログ

メッセージには、メッセージの一意の識別子として機能するMessageId ヘッダーが含まれます。このMessageId は、ファイル自体の名前が変更されたとしても、フロー内では変化しません。そのため、フロー内でのすべてのファイルの状態はMessageId を参照することで追跡できます。ユーザーはこの値を使って、特定のトランザクションに関連したログデータを見つけることができます。

Arc はログデータを次の2つのフォーマットで保存します:

これらのフォーマットとその関係については次で説明します。

アプリケーションデータベース

アプリケーションデータベース は、Arc が以下の目的で使用するリレーショナルデータベースです:

  • 本アプリケーションが処理した各トランザクションのメタデータを保存
  • どのトランザクションにも特定的でないアプリケーションの操作のログを保存
  • 特定のコネクタの状態を保存(例えば、コネクタが確認応答または受信確認を待機している場合)

Arc はSQLite(Windows / .NET)、またはH2(Java)データベースを同梱していますが、SQL Server やPostgreSQL、MySQL などの外部データベースを使用することもできます。Arc はアプリケーションデータベース内のすべての関連するテーブルの作成と保守を行います。

外部データベースを使用するには、アプリケーションをホストするサーバーの設定ファイルでデータベース接続文字列を設定する必要があります(.NET 版アプリケーションデータベースの設定およびクロスプラットフォーム版のarc.properties ファイルのcdataappdb 設定を参照してください)。

アプリケーションデータベースには、メッセージの追跡やログの検索に使用されるテーブルがあります。これは、本アプリケーションが処理した各トランザクションのメタデータを保持し、メタデータには処理されたメッセージのMessageId が含まれます。UI のアクティビティページを使用して、メッセージログやトランザクションログを検索します。トランザクションのメタデータ(タイムスタンプ、ConnectorId、ステータスなど)は、アクティビティページで検索できます。データベースのフットプリントを最小化するため、verbose ログデータはアクティビティページには含まれず、ディスク上のログファイルに保存されます。

Verbose ログファイル

Arc は、メッセージを処理するたびにMessageId と同名のログフォルダを生成します。このフォルダにはverbose ログファイルが含まれ、ログ内容はファイルを送信および受信(または送信か受信のどちらか)したコネクタの種類に依存します。例えば、AS2 コネクタはメッセージ自体を表示する.eml ファイルに加えて、MDN レシート、生のリクエストと応答、接続ログをログに記録します。

こうしたログファイルは、フロー内のメッセージを追跡するだけであれば不要です。アプリケーションデータベースに保存されたメタデータだけで、メッセージの追跡には十分です。ただし、デバッグの際などに特定のトランザクションの詳細がほしい場合は、メッセージのMessageId と処理したコネクタに基づいて、適切なファイルを見つける必要があります。

ユーザーはMessageId がわかっていれば適切なログフォルダに手動で移動できます。しかし、こうしたverbose ログファイルを見つけるにはアプリケーションデータベースを使用する方が便利です。詳しくは、アプリケーションデータベースとログファイルの関係を参照してください。

アプリケーションデータベースとログファイルの関係

アプリケーションデータベースに保存されたメタデータには、特定のトランザクションに関連するログファイルを見つけるのに必要なすべての情報が含まれます。Arc のUI および管理API はこの関係を使って、すべてのトランザクションのログファイルに簡単にアクセスできるようにします。

  • アクティビティページには、すべてのトランザクションメタデータが含まれています。トランザクションエントリの上にカーソルを合わせて詳細を表示をクリックし、関連するログファイルにアクセスします。Arc はMessageId を使用して、ディスク上の適切なログファイルを検索しています。

  • 同様に、コネクタの設定パネルのトランザクションタブを使えば、特定のコネクタが処理したすべてのトランザクションにアクセスできます。これらのトランザクションを展開して、verbose ログファイルを表示およびダウンロードします。

  • アプリケーションデータベースは、トランザクションログファイルが保存されている適切なフォルダに手動で移動するのに役立ちます。ユーザーがトランザクションのファイル名を知っていても、内部のMessageId は知らない、ということは頻繁にあります。アクティビティページのメッセージタブは検索できるので、特定のファイル名で検索すると、そのファイル名に紐付けられたトランザクションのMessageId が表示されます。MessageId とコネクタがわかっている場合のログフォルダの見つけ方については、フォルダ階層を参照してください。

メッセージ実装のデザイン判断

アプリケーションデータはユーザーと外部システムにとって透明であってほしいと考えており、そのためメッセージは不透明な内部データチャネル上ではなく、ファイルシステム上のシンプルなデータファイルを使用してやり取りする実装になっています。そのため、Arc は処理中のデータが隠蔽されるブラックボックスではありません。これは、Arc が、ファイルシステム上の特定のフォルダにファイルを取得したり、配置したりするあらゆるシステムに効果的に組み込むことができることを意味します。

また、特別なツールやプログラムなしでメッセージにアクセスできる方が望ましいと考えています。メッセージはRFC2822 準拠のファイルに格納されるので、どんなテキストエディタでもファイルを開くことができます。メッセージには.eml 拡張子が付いているため、ファイルをダブルクリックするとメッセージが開き、その内容がシステムのデフォルトのメールクライアントに表示されます。

メッセージとログが手軽に利用でき透明性を保つよう、トランザクションメタデータの検索可能なデータベースを提供しています。このデータベースはメッセージペイロードとverbose ログファイルへの直接アクセスに使用でき、しかもメモリをあまり使用しません。

コネクタの実装

コネクタはフロー内の1つのステップを表します。複雑なフローは、データ処理の論理的な手順を実行するコネクタの集まりを繋ぐことで作成します。

コネクタは3種類の操作を実行します:

  • データを受信してアウトプットメッセージを書き込む(SFTP 経由でリモートファイルをダウンロードするなど)
  • インプットメッセージを読み込んでデータを外部パーティに送信(AS2 経由でファイルを送信するなど)
  • インプットメッセージを読み込んでローカルで処理して、アウトプットメッセージを書き込む(EDI ファイルをXML に変換するなど)。

多くのコネクタは最初の2つの操作(データのリモートエンドポイントへの送受信)、または最後の操作(データをローカルで変換)のいずれかを実行できます。コネクタが実行するすべての操作は、トランザクション と呼ばれます。

コネクタはトランザクションタブからインプットおよびアウトプットメッセージを読み書きします。コネクタがフロー内で接続されると、Arc は最初のコネクタのトランザクションタブからメッセージを次のコネクタのトランザクションフォルダに移動します。(ディスク上では、インプットフォルダはSend、アウトプットフォルダはReceive という名前になっています。)

コネクタファイルとフォルダ

すべてのコネクタインスタンスは、ConnectorId(フロー内の表示名)という名前の単一のフォルダとしてディスク上に存在します。各コネクタフォルダには次が含まれます:

  • コンフィグ設定を含むport.cfg ファイル
  • Send サブフォルダ内の送信または処理するメッセージ(インプットメッセージなど)
  • Receive サブフォルダ内の受信済みメッセージ(アウトプットメッセージなど)
  • コネクタが処理したメッセージのログファイル
  • マップ、テンプレート、スクリプトといったコネクタに固有のファイル

以下のセクションでは、これらのフォルダの内容がアプリケーション内でどのように機能するかを説明します。フォルダ階層では、コネクタフォルダとサブフォルダの正確な場所を説明しています。

Port.cfg

各コネクタのport.cfg ファイルには、コネクタの動作を制御する設定(コネクタの設定タブと高度な設定タブに表示される設定)が含まれます。ファイルはINI フォーマットであり、コネクタの設定はSettingName = SettingValue 構文で1行1設定としてリスト化されています。UI でコネクタ設定を変更することは、port.cfg ファイルで直接設定を変更することと機能的に同等です。

port.cfg ファイルは 間接値 をサポートしており、設定に文字列リテラルの代わりに参照を使用することができます。これは、アプリケーションの他のセクションで変数を設定し、その変数名をport.cfg ファイルで参照するのと概念的に類似しています。間接値の設定方法の詳細については、データディレクトリを参照してください。

インプットメッセージ

トランザクションフォルダはインプットメッセージ、つまりコネクタが処理するためにキューに入っているメッセージを保持します。

各クロックティック(デフォルトでは0.5秒)毎に、Arc はコネクタのSend フォルダをチェックしてワーカースレッドを利用可能なメッセージを持つすべてのコネクタに割り当てます。メッセージが処理されると、Arc はそのメッセージに処理試行時のタイムスタンプが付いたヘッダーを付加します。

Arc は、より古いファイルが最初に処理されるよう、インプットメッセージを最終変更時間に応じてソートします。Arc は各試行中にヘッダーを付加するので、エラーを起こすメッセージが複数回再試行することで、コネクタを無意味にブロックしてしまうことはありません。

各クロックティックでインプットメッセージを処理するには、コネクタ内で 送信 オートメーションを有効化しておく必要があります。

アウトプットメッセージ

‘Receive’ フォルダはアウトプットメッセージ、つまりコネクタが受信、ダウンロード、および / または処理したメッセージを保持します。

コネクタによっては、インプットメッセージの処理を終えてすぐにアウトプットメッセージを書き込みます(データフォーマットを変換するコネクタなど)。インプットメッセージを読み込まずにアウトプットメッセージを書き込むコネクタもあります。例えば、リモートサーバーをポーリングしてダウンロードするファイルを探すSFTP コネクタや、受信ファイルを受動的にリッスンするAS2 コネクタが挙げられます。

コネクタがフロー内の別のコネクタに接続されている場合、アウトプットメッセージはReceive フォルダに残りません。次のコネクタのSend フォルダに渡されます。

ログファイル

コネクタが処理する各トランザクションは、一連のログファイルを生成します。トランザクションメタデータはログに追加され、verbose ログ情報はディスク上にファイルとして格納されます。ログファイルには常に.eml フォーマットのメッセージとコネクタ固有のログが含まれます。

デフォルトでは、すべてのコネクタのログファイルは次のフォルダ構造に示すように、週単位でフォルダに整理されます:

デフォルトの週単位のフォルダ整理を変更するには、任意のコネクタのログサブフォルダのスキームフィールドを別の時間間隔(例:日単位月単位)に設定してください。これにより、その時間間隔内に生成されたすべてのログが1つのサブフォルダに保持されます。これによって個々のサブフォルダのサイズを減らすことができ、ディスクI/O 性能の向上に繋がります。

メッセージタブを使用して、MessageId を検索するかログをダウンロードを使用することで、適切なログフォルダを見つけることができます。

送信済みファイル

verbose ログファイルに加えて、コネクタは送信・処理に成功したすべてのメッセージのデータペイロードのコピーをSent フォルダに保持します(処理に失敗したメッセージは追加されません)。ファイルは生成された時刻に基づいて命名され、週単位でフォルダに整理されます。デフォルトの週単位のフォルダ整理を変更するには、任意のコネクタのSent フォルダのスキームフィールドを別の時間間隔(例:日単位月単位)に設定してください。これにより、その時間間隔内に生成されたすべてのファイルが1つのサブフォルダに保持されます。これによって個々のサブフォルダのサイズを減らすことができ、ディスクI/O 性能の向上に繋がります。

注意:このSent フォルダはコネクタフォルダの直下にあり、上述のLogs フォルダ内のSent フォルダとは異なります。

追加の設定ファイル

コネクタの種類によっては、コネクタフォルダに追加の設定ファイルが含まれます。追加のファイルには次が含まれます:

  • map.json
  • script.rsb
  • テンプレートXML ファイル

これらのファイルはマッピング関係、カスタムスクリプトの動作、コネクタのインプットとアウトプット構造を保持します。これらのファイルを手動で編集することは、関連するコネクタのUI 設定を編集することと同等です。

重要:これらのファイルを手動で編集するのはリスクを伴う場合があります。レイアウトは理解しやすく透明性が高いですが、これらの設定ファイルを誤って変更すると意図しない結果を招く可能性があります。

コネクタ実装のデザイン判断

フローは完全なモジュラー型を志向しており、各コネクタが予測できる直感的な方法でわかりやすい機能を提供することを目指しています。Arc には任意のコネクタを組み合わせる機能があるため、シンプルなインターフェースでありながら複雑なタスクを実行することができます。コネクタチェーンが個別のステップに分解されているため、複雑なフローも理解しやすい状態を保てます。

コネクタに関連するすべてのデータ(設定データ、アプリケーションデータ、ログデータ、など)に簡単にアクセスできるようにしたいと考えています。すべてのデータはコネクタ固有のフォルダにあるので、フォルダの場所さえわかっていればそのフォルダにアクセスできます。設定データはメッセージデータと同様、透明性の高いINI フォーマットで格納されているため、シンプルなツールで閲覧・編集できます。

フォルダベースのアプローチでコネクタをデザインしているので、コネクタ間でどのようにデータがやり取りされるのかも容易に理解できます。メッセージファイルを移動する操作では、1つのコネクタのアウトプットを別のコネクタのインプットに移動します。Arc にはこうしたファイル移動の関係を自動で構成する組み込みツールが含まれます。

重要:Arc を安定して動作させるために、アプリケーションの実行中は設定ファイルに直接アクセスしないでください。外部プログラムがこれらのファイルをロックすると、パフォーマンスと信頼性の問題が発生する可能性があります。

フローとワークスペースの実装

フローはファイルシステム上で、フローでのコネクタの位置と接続を含むflow.json ファイルとして表されます。このファイルの場所については、フォルダ階層を参照してください。

フロー内のコネクタの位置は純粋に外観上のものであり、UI でフローを設定する際にのみ使用されます。コネクタ間の接続はデータ処理レベルで重要です。コネクタがアウトプットメッセージを書き込むと、アプリケーションエンジンに問い合わせて、そのアウトプットメッセージを別のコネクタのSend フォルダに渡す必要があるかどうかを確認します。本アプリケーションはflow.json ファイルを使って、(もしあれば)どのコネクタがファイルを渡されるか決定します。

同じフローキャンバスに複数のフローを設定することができ、Arc のUI ではキャンバスをドラッグしてフロー間を移動できます。これはGoogle Maps などの地図サービスをナビゲートするのに似ています。

ワークスペースはフロー間を論理的に分離します。各ワークスペースはコネクタの論理フローを設計するための新しいキャンバスとなります。Google Maps のアナロジーを拡張すると、ワークスペースは個別の 惑星 のように機能します。

トレーディングパートナーや統合ごとにワークスペースを分けるのが一般的です。ただし、新しいフローを別のワークスペースに設定するかどうかは好みの問題です。詳細については、ワークスペースにフローを整理するを参照してください。

ファイルシステム上のワークスペース

新しい(デフォルト以外の)ワークスペースを追加すると、Arc はフォルダ階層に新しいフォルダセットを追加します。workspaces ディレクトリには、デフォルトワークスペースで設定したすべてのコネクタのコネクタフォルダが含まれます。workspaces フォルダはデータディレクトリの兄弟です。

フローとワークスペースのデザイン判断

CData では、フロー内のコネクタ間のシンプルでモジュラーな関係を保つ最良の方法は、フローを純粋に論理的な概念として扱うことだと考えています。データ処理の効率的な連鎖を決めるために必要なすべての情報は、すでにコネクタの実装に含まれています。

ワークスペースはコネクタをより根本的なレベルで分離する機能にしたいと考えています。ワークスペースを分けることで、コネクタを保持するフォルダも分かれるため、ファイルシステムレベルの操作(権限やディレクトリリストなど)を特定のワークスペースに簡単に分離できます。

フォルダ階層

すべてのArc リソースはファイルシステム上で利用できるため、低レベルでArc を理解するには、アプリケーションのフォルダ構造と、ファイルやフォルダがディスク上でどのように整理されているかを学ぶ必要があります。

階層を理解するには、Arc のインストール先のディレクトリ構造を知っておくのがよいでしょう。次にフォルダ構造の視覚的な表現を示します。この構造の詳細については以下のセクションで説明します。

Notes:

  • この階層は、フローがデフォルトのワークスペースだけで設定されていることを想定しています。追加のワークスペースの詳細については、フローとワークスペースを参照してください。
  • 設定 > 高度な設定ページのクリーンアップ設定セクションのローカルアーカイブフォルダが空の場合、各コネクタにはArchive フォルダもあります。

ルートインストールディレクトリ

すべてのArc リソースはインストールディレクトリにあり、デフォルトでは以下の場所にあります:

  • WindowsC:\Program Files\CData\CData Arc
  • Linux/opt/arc

Java 版のインストールについては、CData はzip ファイルを提供しており、それを任意のインストールディレクトリ(例えば、/opt/arc)に展開することができます。

Arc のJava 版はTomcat のような外部Java サーブレットにホストされているので、Arc のリソースは~/cdata/arc に配置されます。このパスでは、~ はJava サーブレットをホストするユーザーのホームディレクトリになります。

上記のフォルダ階層では、ルートインストールディレクトリはツリーの最上部にあるArc フォルダです。

データディレクトリ

data ディレクトリには次が含まれます:

Profile.cfg

profile.cfg ファイルには、設定済みローカルプロファイル(例えば、AS2 プロファイル)用のアプリケーション全体の設定が含まれます。このファイルはINI フォーマットであり、アプリケーションの設定はSettingName = SettingValue といった1行1設定の構文でリスト化されています。

profile.cfg の設定は、一般のアプリケーション設定用のApplicationと、各プロファイル(例えば、AS2 プロファイル設定にはAS2 セクション、ローカルSFTP サーバー設定にはSFTPServer セクションがあります)用の専用セクションに分割されています。

UI のプロファイルページでアプリケーション設定を変更することと、profile.cfg ファイル内で直接設定を変更するのは実質的に同じことです。

Flow.json

flow.json ファイルには設定済みのフローの位置と各コネクタインスタンス間の関係が含まれます。フローページでコネクタを移動、再接続することとflow.json を直接変更するのは、実質的に同じことです。

Roles.json

roles.json ファイルにはすべてのカスタムユーザーロールに関する詳細が含まれます。roles.json を直接編集することは、ロールページでロールを追加・設定することと同じ効果があります。

Settings.json

settings.json ファイルには、アプリケーション内で値ではなく参照名を使用することで、別の箇所で参照できる設定の一覧が含まれます。これにより、セキュアな値(パスワードなど)をアプリケーションに表示しない方法で保存することができます。また、参照名を使用して、複数のインスタンスにデプロイされているフローの設定を一元化することもできます。

この統一された参照構文はUI 上で「鍵」アイコンが付いた設定でサポートされており、それをクリックすることでsettings.json ファイルで定義された参照の一覧を閲覧できます。詳しくは、グローバル設定Vault を参照してください。

Users.json

users.json ファイルにはすべてのArc のユーザーに関する詳細が含まれます。users.json を直接編集することは、ユーザーページでユーザーを追加・編集することと同じ効果があります。

証明書

本アプリケーションで作成、またはアップロードされた証明書はすべてdata ディレクトリに保存されます。通常、証明書はパブリックとプライベートの対となっており、プライベートは.pfx、パブリックは.cer と異なる拡張子となっています。アプリケーションにアップロードされた他のフォーマットの証明書はそのまま保存されます。

Arc は、data ディレクトリの証明書を列挙して、UI から証明書を設定する際に利用可能なオプションを決定します。証明書ファイルをdata ディレクトリに追加することは、UI で証明書をアップロードすることと同じ効果があります。

コネクタフォルダ

設定済みの各コネクタインスタンス用に、data ディレクトリに専用のフォルダが設置されています。フォルダ名はフロー内の各コネクタのConnectorId の値(表示名)と一致します。上のフォルダ構造例では、’AS2_Amazon’ と’Database_MySQL’ の2つが設定済みコネクタです。

コネクタフォルダの内容はコネクタファイルとフォルダセクションで説明されています。コネクタフォルダ内のサブフォルダ構造の概要は以下のとおりです:

  • Logs:コネクタが処理した各メッセージのverbose ログファイル
  • Received:コネクタが受信したメッセージのログ。各メッセージはMessageId に一致する独自のフォルダを持っています
  • Sent:コネクタが送信したメッセージのログ。各メッセージはMessageId に一致する独自のフォルダを持っています
  • Receive:コネクタが受信または処理したメッセージ
  • Send:コネクタが送信または処理すべきメッセージ
  • Sent:処理に成功したメッセージのコピー(生データファイル形式)

コネクタの種類によっては、他のサブフォルダを持つ場合があります:

  • Pending:他のパーティからの確認応答を待っている処理済みのメッセージ
  • Public:アプリケーションでパブリックエンドポイントとしてパブリッシュされるべきファイル
  • Schemas:特定のコネクタに固有の(EDI スキーマのような)スキーマファイル
  • Templates:コネクタのインプット、アウトプットデータのXML 表示

フォルダ階層のデザイン判断

Arc のデータは透明性を保ち簡単にアクセスできる状態にしておきたいと考えているため、本アプリケーションの特定のファイルは簡単に見つけられるようになっています。シンプルな階層を持ったフォルダ構造にすることで、ユーザーや外部システムがArc のデータファイルを見つけやすくなっています。

Arc のUI はアプリケーションを設定、使用する上で便利なインターフェースとなっていますが、他のソリューションに完全に組み込むことができるようにもしたいと考えています。Arc のフォルダ構造を理解しさえすれば、他のソリューションはArc に関連するすべてのデータを参照することができます。

オートメーション

Arc のオートメーションサービスは各コネクタのトランザクションフォルダ内でファイルを処理します。オートメーションサービスは0.5秒毎の クロックティック で実行され、メッセージは各ティック毎にフローを1ステップ進みます。

Arc は、複数スレッドを各コネクタに割り当てることで並列処理をサポートし、各スレッドはコネクタで複数ファイルを処理することができます。割り当てられるワーカー数とワーカー毎に処理されるファイル数は、プロファイルのパフォーマンス設定と各コネクタの設定で決まります。

クロックティック

事前定義された間隔(デフォルトでは500ミリ秒)で、Arc はすべての設定済みコネクタのSend フォルダをチェックし、新しいファイルが見つかればワーカースレッドを割り当てて、コネクタ設定に応じてファイルを処理します。

本アプリケーションはどのコネクタのインプットが最初に一覧化されるか保証しません。複数のファイルが単一コネクタのSend フォルダに存在する場合、それらは最終更新時に応じて処理されます(最も古い変更時間のファイルが最初に処理されます)。

Arc がファイルを処理しようとする際には、処理時のタイムスタンプを付加したメッセージヘッダーを追加し、これによってファイルの最終更新時が変わります。ファイルが処理に失敗した場合(エラーが起きた場合)、Send フォルダの他のファイルに対する優先順位は最低になります。これによって1つのファイルが何度もエラーとなって即座に中止され、コネクタの操作をブロックしてしまわないようにします。

並列処理

並列処理を有効化すると、Arc は1度のクロックティック内で複数ワーカースレッドを同じコネクタに分散できます。これらワーカーの数と動作は、設定ページの高度な設定タブ内の3つの設定で決まります(その内いくつかは個々のコネクタの高度な設定タブから上書きできます):

  • ワーカープール:アプリケーションがコネクタ全体に同時に割り当て可能な全体の最大スレッド数を決定します。スレッドが特定のコネクタ内で割り当てを完了したら、プールにリサイクルされます。ホストマシンのハードウェアリソースがこの設定の上限を決定します。
  • コネクタあたりの最大ワーカー数:1つのコネクタに同時に割り当て可能な最大スレッド数を決定します。コネクタに割り当てられた各スレッドはそのコネクタのSend フォルダ内のファイルを、フォルダが空になるまで(またはコネクタあたりの最大ファイル数に達するまで)1つずつ処理します。この条件に達すると、コネクタに割り当てられたスレッドは処理の完了後ワーカープールにリサイクルされます。この設定は個々のコネクタの高度な設定タブで上書きできます。
  • コネクタあたりの最大ファイル数:1回のクロックティック内で1つのコネクタ内で処理されるファイル数の上限を決定します。例えば、この設定を5に指定すると、コネクタのSend フォルダにまだファイルが残っていても、コネクタに割り当てられたスレッドは(合計で)5ファイル処理したあとにワーカープールにリサイクルされます。この設定は個々のコネクタの高度な設定タブで上書きできます。これを0に設定すると、コネクタはスレッドが割り当てられた時点でコネクタに存在するすべてのファイルを処理しようと試みます。

スレッドはラウンドロビン方式でコネクタに割り当てられるので、これらの値を調整することで(全体でも特定のコネクタでも)スループットの問題を軽減したり、コネクタがシステムリソースを占有したりしないようにしたりできます。次の図は、並列処理設定がどのように連携して機能するかを示しています。

パフォーマンスの最大化

コネクタあたりの最大ワーカー数コネクタあたりの最大ファイル数の設定は、あるコネクタが他のものより多い、または少ないリソースを必要とする際に、それに応じて各コネクタで調整することでArc のパフォーマンスを最大化するのに役立ちます。

特定のコネクタのコネクタあたりの最大ワーカー数を増やすと、アプリケーションはそのコネクタのインプットファイルの処理により多くのシステムリソースを割り当てます。特定のコネクタがフローのスループットのボトルネックになっている際には有効です。しかし、スレッドはラウンドロビン方式で割り当てられるため、多くのコネクタでこの設定を増やすとアプリケーションがワーカープール内のスレッドを使い尽くしてしまう可能性があります。その場合、残ったコネクタにスレッドを割り当てるには、アプリケーションは他のスレッドが完了するまで待たなくてはなりません。

特定のコネクタのコネクタあたりの最大ワーカー数を下げることで、ファイルの処理中にコネクタがワーカープールを大きく圧迫するのを避けることができます。これは、ラウンドロビンでの割り当て中にアプリケーションがスレッドを使い尽くしてしまうのを避けるのに役立ちます。しかし、コネクタのSend フォルダに大量のファイルがある場合、スレッド数が小さいとファイルの処理を完了してプールにリサイクルするまでに時間がかかることがあります(次に説明するように、コネクタあたりの最大ファイル数も調整されていない場合)。

特定のコネクタのコネクタあたりの最大ファイル数を上げる(または0 に設定してすべてのファイルを処理する)ことで、複数回クロックティックしてもファイルがコネクタのSend フォルダに残ったままにならないようにすることができます。これは、大容量コネクタのスループットを向上させるのに役立ちます。ただし、これによって大量の処理を行う必要があるコネクタのスループットを向上できますが、コネクタに割り当てられたスレッドが長時間ワーカープールにリサイクルされない(これにより、スレッド不足を引き起こす)可能性も上昇します。

特定のコネクタのコネクタあたりの最大ファイル数を下げることで、そのコネクタに割り当てられたスレッドが時間どおりにプールにリサイクルされます。しかし、Send フォルダ内のファイル数がティック毎の最大処理数を超えた場合、ファイルが1回のクロックティック内で処理されない可能性もあります。

パフォーマンスの最大化は、特定の環境やユースケースに依存します。一般的には、大量のファイルを処理または送信する必要があるコネクタにはより多くのワーカーを割り当て、ワーカーがリサイクル前により多くのファイルを処理できるようにするとよいでしょう。スレッドプールを枯渇させないためには、他のコネクタに割り当てるワーカーと、ワーカーが処理するファイルを減らすのがよいでしょう。

受信オートメーション

Arc では、上記のインプットファイルの自動処理は_送信_ オートメーションと呼ばれます。Arc は 受信 オートメーションもサポートしており、これはコネクタがスケジュールされた間隔に従って、Arc のフローに自動でファイルを入れていく処理を記述します。

受信操作は次の2つのカテゴリに分けられます:

  • リモートホストまたはサーバー(FTP、SFTP、S3 など)からファイルをダウンロード
  • バックエンドシステム(データベース、ERP システム、CRM など)からデータを取得してXML として書き込み

受信オートメーションは、コネクタが外部システムからファイルをダウンロード、またはデータを取得する試行の回数を決定するためのスケジュールされた間隔と常に紐付けられています。

各クロックティックで、オートメーションサービスは受信間隔を経過したコネクタがないか調べます。ある場合、経過したコネクタはすぐに外部接続を確立し、コネクタの設定に従ってデータを取得します。

AS2 コネクタのような一部のコネクタは、受信データを受動的にリッスンします。こうしたコネクタは能動的にデータを外部システムから取得することができないので、受信オートメーションをサポートしません。

このドキュメントの活用方法

Arc を使い始めるのに、基盤となるアーキテクチャを完全に理解する必要はありません。しかし、アプリケーションを構成するさまざまなレイヤーを理解していくことには重要なメリットがあります:

  • Arc のアプローチが技術的な要件を満たすかどうかを評価する
  • より深い理解と制御でアプリケーションを操作、設定する
  • より大規模なデータ処理ソリューションにArc を組み込む方法を理解する

Arc の技術的特性の評価

Arc はメッセージ駆動型の統合フレームワークを軽量で実装します。その基盤を理解することで、エンジニアの方はArc のアプローチがビジネス上のニーズを満たすかどうか決定できます。

デザイン上の原則は本アプリケーションの成長と発展を形作るものですので、このドキュメントを読むことで、Arc のデザイン上の決定を導く原則が明確になることを願っています。アプリケーションデザインの裏にある why を理解することで、本アプリケーションがユーザーの皆さんにとって適切なものかどうか判断を下すのに役立つことと思います。

より高度なArc の操作

Arc のUI はアプリケーションを操作、設定する上で使いやすいインターフェースとなっています。その基盤となっているアーキテクチャをより深く理解することで、ユーザーの皆さんは、特定のフォルダーに対する権限を設定してユーザーアクセスを細かく制御するなど、内部の仕組み にまで踏み込んだより高度な操作を実行できるでしょう:

さらにフローやコネクタ、そしてこうした機能のアプリケーションデータとの関係を理解することで、最適なワークフローを素早く簡単に設定することができます。CData では、ユーザーの皆さんが最小限の設定コストでArc の機能を利用できるよう努めています。

より大規模なソリューションにArc を組み込む

Arc のフォルダ構造を理解すれば、Arc を別のデータ処理システムに組み込むのは簡単です。Arc は明確に定義された一連のディスク上のフォルダを介してシステムとやり取りするので、特定のフォルダに読み書きするアプリケーションはスムーズにArc にデータを渡したり、Arc からデータを取得することができます。CData では、外部システムとの連携にはFile コネクタの使用を推奨しています。設定の詳細については、ローカルファイルシステムとのやり取りを参照してください。

Arc に親しむ

最後に、弊社ではエンジニアの皆さんが、使用するシステムの基盤となっている仕組みを理解したいという共通の願望を持っていると信じています。上記のメリットがどれもお客様の実装に当てはまらない場合でも、このドキュメントがArc を使用して独自のデータ統合ワークフローを構築する際に、さらなる安心感と親しみやすさをもたらす一助となれば幸いです。このドキュメントの内容についてご不明な点がある場合、またはさらなるサポートが必要な場合は、専任のサポートチーム([email protected])までお気軽にご連絡ください。