読者です 読者をやめる 読者になる 読者になる

四十三庵

蔀の雑記帳

ミドルウェアの役割について

ミドルウェアというのは、実際に自分が使ってみないとよくわからない。
一年くらい働いていて、最近やっとミドルウェアの存在意義を理解した気がする。
研修でApacheTomcatを使ったときは正直よくわからなかった。
というわけで、「ミドルウェアとは何なのか」という、今の自分の理解。

ミドルウェアの位置づけ

ミドルウェアというのを一言で説明するならば、
「アプリケーションとOSの間を仲介するソフトウェア」
のことだ。
下記のような、四段重ねの図がよく使われる。
http://biz.bcnranking.jp/sys_imgs/article/1363_016a.jpg

ハードウェアの上に乗っかってるのは全てソフトウェア。
普通にパソコンを使っていると、ミドルウェアの存在というのはほとんど意識しないだろう。
ハードウェア→OS→アプリケーションの三つで完結している感じがするのではないか。
パソコンを立ち上げる時、物理的な電源ボタン(ハードウェア)を押す。
電源を入れるとWindowsだがなんかが立ち上がる。
OSの起動が終わったら、WEBブラウザ開くなりなんなりして、アプリケーションを動かす。

ミドルウェアが重要となるのは、クライアントサイド(PC側)よりもサーバーサイドだ。
パソコンだったら、ユーザーは一人で、同時に実行するプログラム数もタカが知れている。
ところが、サーバーサイドでは不特定多数のユーザーが利用することになる。

アプリでもなく、OSでもなく

サーバー側も、クライアント側と同じように、
OS→アプリケーションという構成になっていたらどうなるだろうか?
代表的なミドルウェアDBMSがある。
データベースを管理してくれるすごいやつだ。

もしもミドルウェアがなかったら、OSにDBMSのロジックを全て書かなければいけなくなる。
OSにDBMS的なコードが書いてあると、困ることがある。
何かというと、新たな機能が欲しくなったときに、OSごと入れ替えなくてはいけなくなる。
たかがDBの新機能を使いたいだけで、OSを入れ替えなければいけないのは大袈裟過ぎる。

OSがダメなら、アプリケーション側にDBMSのロジックを全て書く、というのも一応考えられる。
しかしそうなると、同じ機能を、アプリケーション作るたびに個別に実装しなくてはいけない。
これはこれで面倒だ。

OSがダメ、アプリがダメなら、「データベースを管理してくれるすごいやつ」として、
独立したソフトウェアとして動かす、というのがスタンダードになった。
(アポロ計画のときにIBMが作ったIMSというミドルウェアが1966年製なので、結構古くからある)

ミドルウェアの主な役割

ミドルウェア - Wikipedia
具体例はこのWikipediaの記事とかを見ればいいと思うけど、ざっくりしたところを。

色んなミドルウェアの分類の仕方はあるけれど、根本的な機能は、
大雑把にわけたら、だいたい以下の4つくらいだと思う。

  1. データの管理
  2. トランザクションの管理
  3. タスクの管理
  4. (アプリ)プログラムの管理

もうちょっと詳しく書くと、

  1. データの管理

 異なった環境間でのデータのやりとりだったり、
 DB機能の実現をしたりする。

  1. トランザクションの管理

 トランザクションというのは、「一連のデータのやりとり」のこと。
 たとえばAさんの銀行口座の10000円が、Bさんの口座に振り込まれるという処理の場合、
 Aさんの口座 -10,000
 Bさんの口座 +10,000
 という二つのデータ処理が必要となるが、片方だけ処理が実行されるとマズイ。
 こういう処理をトランザクションと言う。
 トランザクションというのはあくまで「概念」であって、
 コンピューターの仕組みとして存在するわけではない。
 なので、そのトランザクション機能を実現してくれるようなミドルウェアが求められた。

  1. タスクの管理

 タスクというのは人間から見たプログラムの単位。
 コンピューター側の実行単位は、プロセスやスレッド。
 不特定多数の人間が使うサーバーサイドでは、
 一人のユーザーが重い処理をしたせいで他のユーザーの軽い処理が遅延したりしないように、
 上手いこと調整してやる必要がある。
 たとえばApacheの設定では、プロセス関連が設定できる。

  1. (アプリ)プログラムの管理

 サーバーサイドでは、不特定多数のユーザーが同じプログラムを使うこともある。
 そういうわけで、アプリケーション・プログラムを上手いこと再利用可能なものにしなければいけない。
 (リエントラント構造というやつ)

(了)