仮想化と抽象化と標準化

利便性を高める方法として、サーバ仮想化は重要なシフトチェンジであったことは間違いない。物理サーバの有り余るリソースを活用するとともに物理サーバ台数を抑制し、しかもスピーディにサーバリソースを用意する方法として、サーバ仮想化は広く受け入れられた。同時に重要であったポイントは、あくまでもサーバ仮想化はサーバリソースの仮想化であって、OSから上は基本的にそのまま移行することができた点。それまでのOS、そしてなによりもそれらの上で稼働するアプリケーションとデータ、さらには導入や運用に関するノウハウやナレッジを引き続き使用することができる技術であったからこそ、サーバ仮想化は広く普及したといえる。次第にズレが明確になりつつあった、ハードウェアのライフサイクルとアプリケーションのライフサイクルを分離する手法として、タイミングよく登場した点も重要なポイントであったといえるだろう。最近はやりのContainer技術もある程度普及する可能性を秘めていると思うけれども、仕組みの継続性という面ではちょっと敷居は高いかもしれず、サーバ仮想化の方式を覆すところにまで行けるかどうかはまだまだ未知数だろう。それでも、標準化を指向するインフラリソースを必要とする目的には、サーバ仮想化よりもコンテナ型のほうが適していることは確かで、一定の普及はするだろう。
仮想化もコンテナ技術も抽象化のための手段の1つといえる。サーバ仮想化はサーバハードウェアを、コンテナ技術はOSを抽象化する。さらにその上で動作するアプリケーションにとっては、その下回りが仮想マシンなのかコンテナなのかは結構どうでもいい。アプリケーションに関しては、ThinAppなどのアプリケーション仮想化技術もありますね。
これらはいずれも、新たなレイヤーを追加することになる技術であり、つまりは新たな管理対象を増やしてしまう技術ではあるのだけれども、それによるデメリットを上回るメリットが得られるからこそ、こうした技術は広く受け入れられてきた。元々はOSもまた、アプリケーションから見たリソースを抽象化するために生まれたレイヤーだ。
そんなわけで、仮想化はあくまでも抽象化のための1手法に過ぎない。そして抽象化自体もまた、アプリケーションからみた環境の標準化のための手段に過ぎない。サーバ仮想化は大きなインパクトがあった最近の出来事なので、多くの人が仮想化=抽象化=標準化と考えてしまっている気がするけれども、それだけにとらわれてしまっていると幅広い視点を見失ってしまいかねないので注意が必要だと思う。