View
52
Download
0
Category
Preview:
Citation preview
EWD 3トレーニング・コース #2
EWD 3 の概要M/Gateway Developments Ltd.
Rob Tweed訳 : 日本ダイナシステム株式会社 嶋 芳成
GT.M 版編集 : 澤田 潔
※ 本稿オリジナルは Cache’ 向けとして編纂
EWD 3 設計の目的• EWD.js 独立した部品にモジュール化するこ
と• 一枚岩的な稼働環境ではない• 部品のビュッフェから、混ぜて組み合わせる
• 他のモジュールと相互運用可能 例えば Express• Caché や GT.M にコアが依存しない
• これらは単に選択可能なデータベースである• そのために、
• 最新の JavaScript 技術を用いるようにコードを書き換える
• 部品の性能を最適化する• API を標準化し、完全にイベント駆動とする
05/02/2023 2EWD 3 トレーニング・コース #2
EWD 3 の核となる部品• ewd-qoper8• 非常に高性能な Node.js メッセージ・キュー• マスター Node.js プロセス :
• キューと配布機構• 永続的なワーカー Node.js プロセスのプール
• これらのプロセスが、キューに置かれた要求を処理する• マスター・プロセスの API
• this.addToQueue(messageObject)• メッセージをキューに置く
• this.on(‘response’, function(responseObject,workerPid){…}• ワーカーからの応答に対するハンドラー
05/02/2023 3EWD 3 トレーニング・コース #2
EWD 3 の核となる部品• ewd-qoper8• ワーカーがメッセージを処理して何をするか、開
発者が決定• 開発者がワーカー・モジュールを自由に定義する
• ワーカー API• this.on(‘message’,function(messageObject,send,finished){…}• send(responseObject)
• オプション• マスター・プロセスに応答を送信• ワーカー・プロセスはそのまま
• finished(responseObject)• 必須• マスター・プロセスに最終結果を送信• ワーカー・プロセスを解放し、利用可能なプールに戻す
05/02/2023 4EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
Node.js ワーカー・プロセス
Node.js ワーカー・プロセス
05/02/2023 5EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
addToQueue(obj)
05/02/2023 6EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
05/02/2023 8EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
カスタムワーカー・プロ
セスewd-qoper8
05/02/2023 9EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
05/02/2023 10EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
メッセージの処理開始
利用不可
05/02/2023 11EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
メッセージの処理開始
利用不可
worker.on(‘message’, function(messageObj) { // メッセージの処理});
05/02/2023 12EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
利用不可/処理中
addToQueue(obj)
05/02/2023 13EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
利用不可/処理中
ewd-qoper8
カスタムワーカー・プロ
セス
ワーカー・プールの size に達していない
Node.js ワーカー・プロセス
05/02/2023 14EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
利用不可/処理中
ewd-qoper8
カスタムワーカー・プロ
セス
ewd-qoper8
カスタムワーカー・プロ
セス
Node.js ワーカー・プロセス
利用不可/処理中
Node.js ワーカー・プロセス
利用不可/処理中
新しいリクエストがまだキューに残っている
ワーカー・プールがすべて処理中で利用不可
05/02/2023 15EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
利用不可/処理中
ewd-qoper8
カスタムワーカー・プロ
セス
ワーカー・プールが再度利用可になるとすぐに、
ewd-qoper8
カスタムワーカー・プロ
セス
Node.js ワーカー・プロセス
利用可
Node.js ワーカー・プロセス
利用不可/処理中
05/02/2023 16EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
利用不可/処理中
ewd-qoper8
カスタムワーカー・プロ
セス
ewd-qoper8
カスタムワーカー・プロ
セス
Node.js ワーカー・プロセス
利用不可/処理中
Node.js ワーカー・プロセス
利用不可/処理中
ワーカー・プールがすべて処理中で利用不可
05/02/2023 17EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
処理終了
Finished(responseObject);
05/02/2023 18EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
処理終了
this.on(‘response’, function(responseObject){ // この応答に対して何かをする});05/02/2023 19EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
利用可能
ワーカーは自動的に利用可能プールに戻される
注 : ワーカーは使用後に廃棄されないこれにより、ワーカー・プロセスを続けて開始するというオーバーヘッドをなくす
05/02/2023 20EWD 3 トレーニング・コース #2
ewd-qoper8マスター Node.js プロ
セス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セス
利用可能
ワーカー・プロセスは一時にひとつのリクエストしか処理しない
完全に他から隔離された処理
ワーカー・プロセスは、処理終了するとただちに、次にキューに入れられたリクエストの処理が可能となる
05/02/2023 21EWD 3 トレーニング・コース #2
ewd-qoper8 は建築用のブロック• それのみでは実際には利用できない• 完全に一般的な、汎用的なメッセージ・
キュー• EWD 3 というインフラの核となる部品
で、 EWD 3 の他のモジュールがその上に乗る• ewd-qoper8 は、他の EWD 3 モジュールとは
独立して用いることができ、 Node.js の他のすべてのモジュールやデータベースと統合して用いることもできる
05/02/2023 22EWD 3 トレーニング・コース #2
Express + ewd-qoper8• Express は、 Node.js の標準的な Web サー
バー• REST 、 Web サービス、対話型アプリケーション• Express は Node.js モジュール• 「ミドルウェア」 を定義することでカスタマイズ
できる• ewd-qoper8 は、 Express のミドルウェアとし
て構成可• クライアントから Express にリクエストを送信する• ewd-qoper8 にルーティングする• ewd-qoper8 がそれらをキューに格納し、処理する• ewd-qoper8 は Express 経由で応答をクライアントに
返す
05/02/2023 23EWD 3 トレーニング・コース #2
ewd-qoper8 + Expressマスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス ewd-qoper8
カスタムワーカー・プロ
セスExpress
HTTP(S)インターフェース
WebSocketSocket.ioインターフェース addToQueue(req)
05/02/2023 24EWD 3 トレーニング・コース #2
ewd-qoper8 + Express+ ewd-qoper8-express
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
ewd-qoper8
カスタムワーカー・プロ
セスExpress
HTTP(S)インターフェース
ewd-qoper8-express
ewd-
qope
r8-e
xpre
ss
Express への HTTP リクエストに、ewd-qoper8 を用いるのを自動化、単純化するExpress に特別なルータ関数を追加
app.use(‘/qoper8’, qx.router());
05/02/2023 25EWD 3 トレーニング・コース #2
ewd-qoper8 + Express+ ewd-qoper8-express
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
ewd-qoper8
カスタムワーカー・プロ
セスExpress
HTTP(S)インターフェース
ewd-qoper8-express
ewd-
qope
r8-e
xpre
ss
Express の req オブジェクトから作られるメッセージには、ワーカーがバックエンドで処理するのに必要な全情報が含まれる- Path- method- headers- query- body- その他
05/02/2023 26EWD 3 トレーニング・コース #2
ewd-qoper8 のデータベース依存性• ewd-qoper8 自身にはデータベース依存性は
ない• キューはメモリー内• マスターとワーカーは、単に Node.js のプロセ
ス
• オプションとして、永続的なキューを追加可能• ewd-qoper8-dbq Caché または GT.M を利用してキューを永続化できる
05/02/2023 27EWD 3 トレーニング・コース #2
ewd-qoper8 を GT.M とを併用する
• 別のモジュールを用いる• ewd-qoper8-gtm
• 通常はワーカープロセスが利用• NodeM インターフェースモジュールを利用できるよう
にする• NodeM は、 David Wicksell により開発された GT.M 用
のモジュール。 https://github.com/dlwicksell/nodem• JavaScript / Node.js から次のものにアクセスできる
• GT.M の外部関数• グローバル・ストレージ• Caché のオブジェクトやメソッド
• JavaScript API は InterSystems 社が定義したもの• 低水準
05/02/2023 28EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-cache
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
カスタムワーカー・プロ
セスewd-qoper8
ewd-qoper8-cache
cahce.node
Caché
cache と併用するための同等モジュールCache.node は InterSystems 社が提供
05/02/2023 29EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
カスタムワーカー・プロ
セスewd-qoper8
ewd-qoper8-gtm
NodeM
GT.M
GT.M と併用するための同等モジュールDavid Wicksell 氏による cache.node をエミュレートする GT.M 用の NodeM モジュールを用いる
05/02/2023 30EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
カスタムワーカー・プロ
セスewd-qoper8
ewd-qoper8-gtm
NodeM
GT.M関数
05/02/2023 31EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
Node.js ワーカー・プロセス
カスタムワーカー・プロ
セスewd-qoper8
ewd-qoper8-gtm
NodeM
GT.Mグローバル
基本的な低レベルの MUMPS 中心の API
05/02/2023 32EWD 3 トレーニング・コース #2
JavaScript 中心のデータベース・アクセス
• ewd-qoper8-cache と ewd-qoper8-gtm は、 ewd-document-store を自動的にインストール• ewd-document-store は、 JavaScript 指向
の、グローバル・ストレージ・データベースの抽象化機能• 「永続的な JavaScript オブジェクト」• ドキュメント・データベース
• JSON の粒度の細かいストレージ
05/02/2023 33EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
05/02/2023 34EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
永続的な JavaScript オブジェクト
かつ粒度の細かいドキュメント・
データベース05/02/2023 35EWD 3 トレーニング・コース #2
ewd-document-storemyDocument = { a: 123, b: { c1: ‘foo’, c2: ‘foo2’ } d: { e1: { f1: ‘bar1’, f2: ‘bar2’ }, e2: { f1: ‘bar1’, f2: ‘bar2’, f3: ‘bar3’ } }}
“a” 123
“b”“c1” “foo”
“c2” “foo2”
“e1”
“f1” “bar1”
“f2” “bar2”
“f1” “bar1”
“f2” “bar2”
“f3” “bar3”
“e1”
“d”
myDocument
05/02/2023 36EWD 3 トレーニング・コース #2
ewd-document-store“a” 123
“b”“c1” “foo”
“c2” “foo2”
“e1”
“f1” “bar1”
“f2” “bar2”
“f1” “bar1”
“f2” “bar2”
“f3” “bar3”
“e1”
“d”
myDocument
var f3node = new this.documentStore.DocumentNode(‘myDocument’, [‘d’, ‘e2’, ‘f3’]);
05/02/2023 37EWD 3 トレーニング・コース #2
ewd-document-store“a” 123
“b”“c1” “foo”
“c2” “foo2”
“e1”
“f1” “bar1”
“f2” “bar2”
“f1” “bar1”
“f2” “bar2”
“f3” “bar3”
“e1”
“d”
myDocument
var value = f3Node.value; // ‘bar3’
05/02/2023 38EWD 3 トレーニング・コース #2
ewd-document-store“a” 123
“b”“c1” “foo”
“c2” “foo2”
“e1”
“f1” “bar1”
“f2” “bar2”
“f1” “bar1”
“f2” “bar2”
“f3” “bar3”
“e1”
“d”
myDocument
var value = f3Node.parent.$(‘f2’).value; //’bar2’
05/02/2023 39EWD 3 トレーニング・コース #2
ewd-document-storemyDocument = { a: 123, b: { c1: ‘foo’, c2: ‘foo2’ } d: { e1: { f1: ‘bar1’, f2: ‘bar2’ }, e2: { f1: ‘bar1’, f2: ‘bar2’, f3: ‘bar3’ } }}
“a” 123
“b”“c1” “foo”
“c2” “foo2”
“e1”
“f1” “bar1”
“f2” “bar2”
“f1” “bar1”
“f2” “bar2”
“f3” “bar3”
“e1”
“d”
myDocument
var docOnDisk = new this.documentStore.DocumentNode(‘myDocument’);var localDoc = docOnDisk.getDocument();
05/02/2023 40EWD 3 トレーニング・コース #2
ewd-document-storemyDocument = { a: 123, b: { c1: ‘foo’, c2: ‘foo2’ } d: { e1: { f1: ‘bar1’, f2: ‘bar2’ }, e2: { f1: ‘bar1’, f2: ‘bar2’, f3: ‘bar3’ } }}
“a” 123
“b”“c1” “foo”
“c2” “foo2”
“e1”
“f1” “bar1”
“f2” “bar2”
“f1” “bar1”
“f2” “bar2”
“f3” “bar3”
“e1”
“d”
myDocument
var docOnDisk = new this.documentStore.DocumentNode(‘myDocument’);docOnDisk.setDocument(localDoc);
05/02/2023 41EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
この強力かつ直感的な抽象化機能のには同期アクセスが必要
従って、 ewd-qoper805/02/2023 42EWD 3 トレーニング・コース #2
データベースの同期アクセスのための ewd-qoper8• ワーカー・プロセスは、一時にひとつのリク
エスト・オブジェクトしか処理しない• データベース ( や他の ) 入出力にブロッキング
が発生しても、他のリクエストの処理には何の影響もない• 各リクエストは独立して処理され、他のワーカー
からは隔離されている
05/02/2023 43EWD 3 トレーニング・コース #2
セッション• EWD 3 による Web アクセスはステートレ
ス・モデルを用いている• クライアントからの各リクエストは別々の
ワーカープロセスによって処理される• クライアントからの一連のリクエストを通し
て、状態情報を維持することが通常必要となる• EWD Session がその機能を提供する• ewd-session によって Session を生成し維持できる• Session は、自動的に DocumentNode オブ
ジェクトに対応づけられる05/02/2023 44EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store + ewd-session
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
05/02/2023 45EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store + ewd-session
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
セッションの格納場所は、 DocumentNode オブジェクトに射影される
05/02/2023 46EWD 3 トレーニング・コース #2
ewd-session の API• sessions.create(applicationName)• 新しいセッションをひとつ作り、指定されたアプ
リケーションと関連づける• セッション・トークンを返す
• ランダムに生成された uuid 文字列• sessions.authenticate(token)• このトークンが有効で、期限切れになっていない
ことをチェック• そのトークンに対応するセッション・オブジェク
トまたはエラーを返す
05/02/2023 47EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store + ewd-session
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
var session = sessions.create(‘vista’)
session.token を送り返す
05/02/2023 48EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store + ewd-session
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
var result = sessions.authenticate(token)
成功すれば result.session を、そうでなれば result.error を返す
05/02/2023 49EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store + ewd-session
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
Session オブジェクトは、 GlobalNode オブジェクトの拡張Session 特有のプロパティとメソッドを持つ
05/02/2023 50EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store + ewd-session+ Express
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
Express
HTTP(S)インターフェース
WebSocketSocket.ioインターフェース
関数
05/02/2023 51EWD 3 トレーニング・コース #2
ewd-qoper8 + ewd-qoper8-gtm+ ewd-document-store + ewd-session+ Express
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
Express
HTTP(S)インターフェース
WebSocketSocket.ioインターフェース
関数
05/02/2023 52EWD 3 トレーニング・コース #2
予めパッケージされた上位モジュール
• ewd-xpress• EWD.js の主機能を提供する• ブラウザ・ベースの対話的なアプリケーション• Web と REST サービスをサポートすることも可能
• ewd-qoper8-vistapc• VistA RPC への REST インターフェース
• ewd-feder8• 連合、統合プラットフォーム
• ewd-express の拡張• 軽量の企業規模のサービス・バス機能
05/02/2023 53EWD 3 トレーニング・コース #2
ewd-xpress
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8
Node.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
Express
HTTP(S)インターフェース
WebSocketSocket.ioインターフェース
関数
ブラウザ
ewd-
clie
nt
05/02/2023 54EWD 3 トレーニング・コース #2
ewd-qoper8-vistarpc
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスewd-qoper8Node.js ワーカー・プロセス
NodeM
GT.M 及び VistA
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
Express
HTTP(S)インターフェース
インターフェース関
数
REST ewd-qoper8-vistapc
シンボル・テーブル関数
シンボル・テーブル
RPCs05/02/2023 55EWD 3 トレーニング・コース #2
ewd-qoper8-vistarpc• ログイン : (POST)• アクセスし、コードを検定する• XUS サインオン・セットアップ• XUS AV CODE• エラーまたは “挨拶” オブジェクトを返す• もし成功したら:
• 新しい Session を生成する• シンボル・テーブルを Session に保存する
• DUZ などを含む• REST クライアントからの直接アクセスはない• Authorization トークン経由での間接アクセスのみ
• Session トークンと VistA の “挨拶” を返す
05/02/2023 56EWD 3 トレーニング・コース #2
ewd-qoper8-vistarpc• ログインしたら、 runRPC:• Authorization ヘッダー内の Session トークン
を用いる• POST:
• RPC 名• RPC 引数オブジェクト
• Session からシンボル・テーブルをリストア• DUZ などを含む• ユーザーが RPC を実行できるかどうかを決定する
• 標準の MUMPS側の “通常のビジネス” ロジック
• RPC の結果を返す• シンボル・テーブルを Session に保存する
05/02/2023 57EWD 3 トレーニング・コース #2
ewd-feder8
マスター Node.js プロセス
キュー
キュー・プロセスまたは
ディスパッチャー
カスタムワーカー・プロ
セスNode.js ワーカー・プロセス
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
Express
HTTP(S)インターフェース
関数
REST /Web サービスクライアント
ewd-qoper8ewd-xpressewd-feder8
05/02/2023 58EWD 3 トレーニング・コース #2
ewd-feder8
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
関数
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
05/02/2023 59EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
関数
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
05/02/2023 60EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
関数
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
05/02/2023 61EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
関数
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
リクエストのコピーが、このグループの全サーバに送信される
05/02/2023 62EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
関数
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
応答は非同期で受信する
05/02/2023 63EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
関数
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
最後の応答を受信する応答を集めてオブジェクトを生成する
05/02/2023 64EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-store
グローバル
ewd-session
関数
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
応答を集めマスター・プロセス経由でクライアントに返す
05/02/2023 65EWD 3 トレーニング・コース #2
応答の集積
{ server_1_name: {responseObject}, server_2_name: {errorObject}, server_3_name: {responseObject}}
05/02/2023 66EWD 3 トレーニング・コース #2
インターセプトとカスタマイズ• ewd-feder8 はイベントを発行する• クライアントからのリクエストをひとつ受信した
とき• 末端のサーバーのひとつから応答ひとつを受信し
たとき• 応答を集積して、クライアントに返す準備ができ
たとき
• これらを用いて、• ewd-feder8 を通した流れをインターセプトでき
る• ewd-feder8 の振る舞いをカスタマイズできる
05/02/2023 67EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
05/02/2023 68EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
応答をインターセプトする多分、応答を修正し、そして / または応答に応じたアクションを決定する
05/02/2023 69EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
新しいリクエストをサーバーのグループに転送する
05/02/2023 70EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
集積した応答をインターセプトし、何をするかを決定する
05/02/2023 71EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
新しいリクエストを送信する
05/02/2023 72EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
応答をインターセプトし、最終応答を生成する
05/02/2023 73EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
最終応答をクライアントに返す
05/02/2023 74EWD 3 トレーニング・コース #2
名前付きグループ
ewd-feder8 の「ダンス」
マスター・プロセス
RESTサーバー
ワーカー・プロセス
Express
NodeM
GT.M
ewd-qoper8-gtm ewd-document-storeewd-
session
REST /Web サービスクライアント
ewd-qoper8
ewd-feder8
RESTサーバー
RESTサーバー
Web サービス
サーバー
Web サービス
サーバー
GT.M は、「ダンス」の間、応答を格納し、最終応答をデータを作るのに利用できる
05/02/2023 75EWD 3 トレーニング・コース #2
Recommended