76
EWD 3 トトトトトト トトト #2 EWD 3 トトト M/Gateway Developments Ltd. Rob Tweed ト : トトトトトトトトトトトトト ト トト GT.M トトト : トト ト ※ トトトトトトトト Cache’ トトトトトトト

EWD 3トレーニング・コース #2 EWD 3 の概要

Embed Size (px)

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 プロ

セス

キュー

キュー・プロセスまたは

ディスパッチャー

05/02/2023 7EWD 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

名前付きグループ

ewd-feder8 の「ダンス」

マスター・プロセス

RESTサーバー

ワーカー・プロセス

Express

NodeM

GT.M

ewd-qoper8-gtm ewd-document-storeewd-

session

REST /Web サービスクライアント

ewd-qoper8

ewd-feder8

RESTサーバー

RESTサーバー

Web サービス

サーバー

Web サービス

サーバー

EWD Sessions は、利用、管理をより簡単にできる可能性がある

05/02/2023 76EWD 3 トレーニング・コース #2