OSのコアを共有にすることで仮想マシンのフットプリントを軽くするのが最初の主旨だったはずだが、その後そのコアを極限まで小さくするCoreOSが出てきた。すると、個々のコンテナには多くのミドルを載せなければならず、フットプリントが小さくならないという本末転倒が起きる。
もう一つの問題は、ミドルは一つではないということだ。あるミドルの前提ミドルにもバージョン違いがあるなど、ミドルの組み合わせは網羅すると爆発する。このため、それ毎に独立したメモリ空間が必要となり、もうDockerの意味は何なのだろう、となってしまう。
OS、ミドル各々にバージョン毎のサポート期限があり、その数が多ければその度に確認やバージョンアップ、そして動作確認が必要。最上位のアプリは溜まったものではない。
提案するのは、Dockerのような共通コアを持つ仮想マシン上に特定のミドルウェアを搭載したものを、改めて共通コアとみなすものだ。スナップショットにも似ているが、ストレージの差分ではなく動いている実体としての差分である点が異なる。ミドルのインストール順やバージョン、組み合わせによってそれは枝葉のように分かれ、その上にアプリケーションが乗る。
ミドルのバージョンアップがあったときは、オリジナルを書き換えるのではなく、新しい枝葉を作ってアプリを移植し、動作確認する。これで不具合があれば何時でも元に戻せる。根元の方でバージョンアップがあると枝葉の作りが大変だから、その辺の管理ツールもあることが望ましい。
但し、これは望ましい未来とは言えない。ではどうすべきかと言えば、ミドルの機能は単体のマシン(オブジェクト、ノード、何でも良いが、ソフトから見て計算機として独立した存在)にすることだ。こうすれば通信先を切り替えるだけでバージョンアップが可能になる。
もちろん今まで出来て来なかったことだから、簡単ではないことは理解している。ただ近い将来、このような構築方法が新たに出てきて、いわゆる「イノベーションのジレンマ」が発生する可能性については指摘しておきたい。
0 件のコメント:
コメントを投稿