諸々の事情で DolphORCA では、三層クライアントサーバーシステムを採用したのだが、とりわけ医療関係者でピンとくる人はそう多くはないようだ。
ただ、「3 tier client server architecture」あたりでググるとそれこそ山のように情報が出てくる。
YouTube あたりにも解説動画が上がっていたのでチラリと試聴。
視覚的にはこの図がわかりやすいだろうか。
大抵の場合、
Presentation tier – Application tier – Database tier
の三層からなると説明されているが、上のようにショッピングサイトで示してもらうと理解が早い。
Presentation tier は、ブラウザ画面などを通じて直接ユーザーとの情報のやり取りを行う。
Database tier は、最終的に処理された記録などを保管する。
Application tier は、Presentation tier と Database tier の間にあって両者を仲立ちし、各種情報の処理を行う。
通常のウェブアプリならば、これらの機能はなんらかの形で備えているがはずだが、個々の機能を分離し、それらを独立したプログラムとして構成している点が 3 tier と言われる所以なのだろう。
なお、三「層」というと layer を思い浮かべてしまいがちだが、英語表記は three tier になる。そちら方面の専門の人に言わせれば、tier と layer は違うそうだ。
だが、日本語では三「層」という言い方の方が定着しているようにも思えるし、「機能的に3つに分けた」という意味なら両者を厳密に区別する意味はなさそうなので、ここでは三層という言い方にする。
ユーザーから見ると、サーバーは一つのように見えなくもないので、従来のクライアントサーバーシステムとどこが違うのかと言われそうだが、運用上のメリットは多い。
特に医療を関連づけていうと
・データベース tier は原則どこに置いてもいいので、安全な場所に設置すれば、それだけセキュリティ的に強化される。
もちろん、アプリケーション層とデータベース層を同じ物理的マシンに置いてもいいのだが、これだけでもセキュリティ的にはメリットがある。
ユーザーからは、データベース層は遮蔽されているので、直接データにアクセスするということができないからだ。
悪意のあるクラッカーが、このシステムから情報を抜き取ろうとしても、database tier が配備されたマシンを直接操作するでもしない限り、保管された情報を直接は触れることすらできない。
さらに、データベースを分散化して異なる場所に設置しておけば、たとえ、一台のマシンがクラッシュしても、システム全体が停止するということは理屈の上ではなくなる。
これは OpenDolphin などの従来のクライアントサーバシステムと比較すると、わかりやすいだろう。
ドルフィンでもデータベースとアプリケーションサーバは別物だが、データを読み書きするときは両者が連動して一体として動く。データベースがアプリケーションサーバに内包されているようなイメージでしょうか。
確かに OpenDolphin HTML/PDF Viewer でやったように、データベースに直接アクセスしてデータの読み出すだけならできるが、医療情報の素に近いデータを投げたところで、データベース自体はそれを解釈して適当に処理することはできない。だから、アプリケーションサーバが何らかの事情でコケてしまうと、従来のクラサバシステムでは、データのストレージ関係も同時に使い物にならなくなる。
そういう意味で Database tier を Application tier と独立させる意義は大きいわけです。
診療所などでスタンドアローンで使用していれば、伝統的な従来のクラサバシステムでも大きな問題になることはなさそうだが、多施設で利用するような場合は、あまりいただけないですね。
さらに、これはあまり言われてないようなのだが
・アプリケーション tier は複数設置してもいい
点はかなりメリットあると思う。
何らかの事情で、データの処理は自施設内で完結させたいといった場合、アプリケーション tier の一つをその施設で設置すればいいわけだから。
これだとこの施設のアプリケーション tier に不具合がおきても、データベースと連動している他のアプリケーション tier には影響を与えません。
全国統一カルテみたいな話が出るたびに、みんな何か単一のモノシリックなシステムのようなものを思い浮かべるようですが、あんなのメンテやセキュリティ的に現実的ではないでしょう。
以上、三層クラサバシステムのメリットに関して、簡単に述べてみました。
猪股弘明
精神科医(精神保健指定医)
OpenDolphin-2.7m, Ver6
DolphORCA 開発者