Immutable InfrastructureとかDisposable ComponentsとかBlue-Green Deploymentが話題になってるみたいで。
Immutable Infrastructureはアプリケーションのアーキテクチャを変えていく、伊藤直也氏(前編) - Publickey
Immutable Infrastructureはアプリケーションのアーキテクチャを変えていく、伊藤直也氏(後編) - Publickey
詳しくは記事を。「不変のインフラ」つまり、一度動くようになったサーバーには手を触れず、なにか変更が発生したら新たなサーバーを別途構築し、丸ごと入れ替えることでシンプルな管理が可能になるというもの。「インフラ設定を自動化する」という流れとして見ると非常に面白い。
言いかえれば「アプリからインフラまでを一貫して構成管理する」ということになると思います。ソフトウェアの動的な状態を「サービス」という言葉で表現するなら、「サービスの構成管理」といっても良いでしょう。
とはいえ、エンタープライズの人間としてはモジュラリティの管理ができないと、Immutable Infrastructureにも限界があるなと思うわけです。
ある一つのサービスが構成管理されることは良いのですが、そのサービスを利用するサービスとの関係はどうするのですか?と。
単体のサービスを単体としてバージョンアップすることは、言ってしまえばそんなに難しくない。ただ、ソーシャル系はエンタープライズに比べてリリース頻度が多いので、毎回の作業が大変だから自動化するのはよくわかります。
(ちなみにエンタープライズのリリース頻度が少ないのは関係各部署との調整が多いからであって、いわゆる文化の問題ではありません。エンタープライズは安定していることが価値であり、それが社会基盤としての役目です。文化は現象であって原因ではないのです)
でもサービス同士の関係性が強い場合、単体のサービスの変更は周辺のサービスに影響を与えます。そうすると、そこだけ自動化されていてメリットは少ないのです。
じゃ、サービス間に関係性があるもの全部、たとえば企業システム全体を巨大な一つのサービスとすればいいじゃんと言っても、じゃ、取引先はいいんですかとか、言い始めればきりがありません。そもそも、他人様のものですし。
つまり、エンタープライズの場合は、単体をきちんと管理するというだけではなくて、単体同士の関係性や全体としての整合性という別の次元をきちんと管理する必要性がある。
そうなるとエンタープライズからみたときにImmutable Infrastructureに投資するメリットって何だろうなと思います。
いつも通りの話です。Immutable Infrastructureは有益な概念ですが銀の弾丸じゃない。
エンタープライズでは「システム全体におけるサービス間の変化の差異をどのように管理するか」というテーマを考えないといけません。モジュラリティ管理ですね。
Immutable Infrastructureのような概念の登場は本当にワクワクしますが、それをさらに応用して、よりスピード感のあるエンタープライズシステムを構築するにはどうしたらいいか、まだまだ考えるべきことは多いのです。