ErlangとIntersystems Cacheの相互作用のために、次の機能が実装されています。
- キャッシュ内のErlangからのメッセージを処理し、Erlangタプル(Erlangの内部ツリーデータ形式)をCacheグローバルに変換します。
- CacheグローバルをErlangタプルに変換して、CacheからErlangプロセスにメッセージを送信します。
開発されたMCAは、3つの主要なコンポーネントで構成されています。
- Message Dispatcher(MD) -異なるErlangノード(EN)とCache-processes間の競合環境でメッセージングを管理し、特定のルールに従ってメッセージキャッシングを提供します。 対応するENで実行されます。
- Cノード -C / C ++ライブラリのロードとそれらの間のメッセージ交換、共有メモリ、EN、CallIn / CallOut(C言語のキャッシュに実装された機能)とのシステム相互作用などを提供します。 現時点では、Webアプリケーション用のライブラリをCノードに接続し、Cacheを使用して、XSLT変換、正規表現処理をサポートしています。
- Porte -MD for Cacheを備えたメッセージングゲートウェイ。 Porte-job(PJ)と呼ばれる別のバックグラウンドジョブとして開始されます。
MD
MDはyaws Webサーバーからリクエストを受信します(yawsもErlangで記述されています)。 MDは、現在処理中のキューまたは応答キャッシュにそのような要求があるかどうかを確認します。 どこも空の場合、リクエストはキューに追加されます。 回答の準備ができると、MDはこの時間内にそれを要求したすべての人にそれを返します。 MD設定では、このレベルで応答キャッシュを保存できます。memekeshはより高いレベルで使用されます。 公平に-MDレベルでキャッシュを使用しないと言いますが、そのような可能性があります。 同時に処理されるMD要求の数-yaws Webサーバーから受信した要求の数に等しい-値はランダムです。
Cノード
C-Nodeは、ENからのメッセージの待機、接続されたライブラリとキャッシュへのリクエストの送信、リクエストの結果の返信を提供します。 実行中のC-Nodeごとに、実行中のPJ(要求を処理するキャッシュ内のプロセス)が1つあります。 PJでは、要求データは一意のグローバルノードに入力されます(CallInを使用)。 この場合、Erlang-tuplovの形式のリクエストパラメータはグローバルブランチに変換されます。 グローバルへの書き込みが完了した直後に、要求の処理が開始されます。 実際、C-Nodeが存在するため、Erlangに関連する各PJは、通常のEN(Erlang-node)のセットのように見えます。 また、特にCノードを使用して、キャッシュで生成されたXMLファイルのXSLT変換が呼び出されます。 XSLTを実行すると、MDに戻り、Webサーバーに戻るHTMLの準備ができました。
ポルト
Porteは、キャッシュで直接実行されるプロセスです。 要求は、単純化された論理出力マシンとして処理されます。 グローバルなリクエストとグローバルなルールがあります-グローバルなリクエストに基づいて、特定のルールが選択されます-特定のアクションがキャッシュで実行されます。 また、このレベルでは、キャッシュ内での処理後に実行する必要がある一連の変換が決定されます(原則として、これはXSLT変換の選択です)。
なぜ必要なのか
ミドルウェアは、Cacheを外部からのリクエストと通信するために使用されます。 これにより、システムは、限られたコンピューティングリソースまたはPJの不足の条件下で、重い負荷に対処できます。 組み込みCacheツールcsp / zenだけでなく、インターフェースを実装する他のすべての方法(この場合、これはxml-xslt-htmlチェーン)のインターフェースの開発に使用する便利な機会もあります。 Erlangが選択された理由は、Cacheのような内部データ形式がツリーに似ており、ツリーの交換に深刻な中間変換が必要ないためです。 YawsもErlangで作成されているため、Yawsが選択されています。したがって、システム全体の高度な均質性を実現しています。
キャッシュに実装されているデータウェアハウス自体は、ルールグローバルルールに基づいています。 つまり、外部の世界と直接対話しない内部プロセスでさえ、入力でグローバルデータ(「事実」)を受け取り、グローバルルールに基づいて、必要なアクションと変換のセットを選択します。
PS:記事のいくつかの部分は、私たちの内部文書からコピーされたもので、リンクは私には提供できません。 私はミドルウェアの開発には直接参加しませんでしたが、発生するすべての質問に答えようとします。その場合は、上級の仲間にアドバイスを求めます。 データウェアハウスの設計と実装に参加しました。つまり、データがPorteに到着してから応答がENに返されるまでのすべてのことです。 興味深い場合は、リポジトリの実装方法、リポジトリで使用されるサブシステム(辞書、インデックス作成、出力)などを詳細に説明できます。