Immutable Infrastructureはアプリケーションのアーキテクチャを変えていく、伊藤直也氏(前編)

2014年4月2日

仮想化やクラウドを基盤とした新しいインフラの考え方である「Immutable Infrastructure」が注目されています。3月25日、このImmutable Infrastructureをテーマに渋谷のDeNAオフィス大会議室で開催された勉強会「Immutable Infrastructure Conference #1」は、150人の定員に400人以上が申し込む人気ぶりでした。

これまでのImmutable Infrastructureに関する議論はおもにデプロイなど運用とインフラ周りの話題が中心でしたが、最初のセッションで登壇した伊藤直也氏は、Immutable Infrastructureが結果的にアプリケーションアーキテクチャにも大きな影響を与えるため、アプリケーション開発者もこの技術に注目すべきだと解説しています。

伊藤氏のセッションの内容をまとめました。

Immutable Infrastructureは実際には廃棄可能なコンポーネント

伊藤直也氏。DeNAで話すときが来たとは感慨深い(伊藤氏は元GREE)。

fig

Immutable Infrastructureとは「不変のインフラ」ということなのですが、実際にはDisposable Components、廃棄可能なコンポーネントと言った方が現実を表しているかなと思います。

Immutableって言うと、サーバをセットアップしたら手を付けないという意味になりますけど、それよりも必要になったらサーバを作って、いらなくなったら捨ててしまうというのがImmutable Infrastructureの特徴です。

ただ「Disposable Components」っていうのはバズワード感が足りない(笑)。たぶん「Disposable Components勉強会」という名前だとこんなに人が集まったりしないと思うので(笑)、まあImmutable Infrastructureって言っといた方がかっこいい気がします。

そもそもなんでDisposableとかImmutableなのかっていうと、こういうこと、ありますよね。ある日、Railsサーバが納品されて、設定をいろいろ加えていって、そこに半年ぶりにRailsアプリをデプロイしようとするとき、果たしてちゃんとできるのか。ちょっとそのサーバ、動いてるんだから触るなよ、という状況になってるような。

fig

つまり普通、サーバにはどんな設定が行われていて、いまどういう状態になっているのか、管理をしなければならない。

これまでは、例えば手順書を書いておいて、新しくサーバを導入して同じ状態にしたかったら手順書に従って手で実行するか、シェルスクリプト書いて実行するとか、工夫してきたところに、ChefやPuppetといったツールが出てきて、サーバの状態をコードで書けるようになった、というのが去年のホットなトピックでした。

でも、そもそも状態管理をするという前提ではなく、状態管理しなくてもいいじゃん、というコロンブスの卵みたいな発想が出てきて、それがImmutable Infrastructureの始まりだったと。

fig

毎回サーバを新しくすればすっきりするよね

これは「情熱プログラマー」という本を書いた有名なプログラマのチャド・ファウラーさんがImmutable InfrastructureとDisposable Componentsについて書いたものですが、サーバを捨てろと(Trash Your Servers)、そこにコードを焼き付けろと(Burn Your Code)、そう書いてますね。

fig

ただこれだと抽象的でまだよく分からないのですが、この文脈でよく語られるのがBlue-Green Deploymentというデプロイメントの手法で、これは2012年の「AWS re:Invent」というイベントでAmazonが1時間に1000回もデプロイしている方法を説明している図です。Publickeyの記事で詳しく書かれているので、ぜひ読んでみてもらいたいのですが。

fig

これまでデプロイと言えば、いま動いているサーバのソフトウェアをアップデートして、リスタートするといったことをしていましたが、それだとよく事故るじゃないですか。

よくあるのはGem(Rubyのライブラリ)の依存関係がコンフリクトを起こして、リスタートしたら起動しなかったとか、あるいはサーバの適当な状態に依存していて、リスタートでその状態が失われてしまって動かなくなるとか。

そういうことがよくあるので、この図では何かをデプロイするときに、動いている既存のサーバとは別に、まったく新しいサーバ群を立ち上げて、新しいシステムが立ち上がったらロードバランサーを切り替える、そういう考え方がBlue-Green Deploymentです。

これを実施するには、クラウドというか仮想環境が前提になっていて、なぜかというとデプロイするために毎回何十台もサーバを調達するわけにもいかないですから、オンデマンドにサーバを立ち上げて環境を作れなければいけません。

そしてオンデマンドでサーバを立ち上げて環境を作るためには自動化とかが必須になって、そういう環境が整ってくると、こういうドラスティックなことができるよ、というのがImmutable Infrastructureなんです。

Immutable Infrastructureを難しく言うとそういうことですが、ざっくり言えばWindowsって調子が悪くなると再インストールしてすっきりさせるじゃないですか。OSにいろんなソフトウェアをインストールしたりカスタマイズしたりすると調子が悪くなりますが、再インストールすれば戻ります。

だったら、そもそも毎回作り直せばシステムはすっきりするよね、というのが簡単なImmutable Infrastructureの説明です。

Herokuはgit pushのたびに新しいコンテナを立ち上げる

これはそんなに新しい話じゃなくて、例えばHerokuは、git pushのタイミングでいま動いているアプリを上書きしているように見えるけれど、実際にはLinuxコンテナを使っていて、git pushされたコードは新しいコンテナで立ち上がって、古い環境は捨てられる、ということをしています。

これはまさに、Blue-Green Deploymentをやっているのに等しいです。

fig

継続的インテグレーションのTravis CIなんかも、アプリのコードを送り込むとそのたびにLinuxコンテナを立ち上げて、テストをクリーンな環境で実行してくれるので、テストが変な状態に依存して落ちる、といったことがないようにできている例です。

fig

そんな感じでImmutable Infrastructureでは、いままで固定的だったことが動的にできるので、例えばAmazonがやっているみたいに1時間に1000回デプロイすることも可能です。1000回はかなりすごいですけど。

もちろんAmazonはImmutable Infrastructureだけでこれを実現しているわけではなくて、SOAでコンポーネントの独立性を高めたりしていることもあるわけですが。

fig

Immutableであることはアプリケーションアーキテクチャに影響を与える

次に、Immutable Infrastructureが、実際にアプリを作っている人や開発を回している人にどういう影響があるのか、というのを見ていきたいと思います。

先に結論を言ってしまうと、Immutable Infrastructureの影響はかなりあって、特にサーバがImmutableであるという制約はアプリケーションアーキテクチャに大きな影響を与えるだろうということ。

fig

その結果、再現可能なアプリケーションとか、テストがしやすくなるとか、さっき説明したような上書きデプロイではなくコンテナデプロイが当たり前になっていくようなことが、これから起こるかもしれない。

Immutable Infrastructureと(インフラストラクチャと)言ってますけど、これによってアプリケーション開発者も無視できない設計や開発プロセスの変化が議論され始めているというのが昨今起きていることだと思います。

≫後編に続きます。後編では、Immutableの制約を受け入れることがアプリケーションに良い影響を与える、ということについて。

Immutable Infrastructure関連記事

あわせて読みたい

クラウド Immutable Infrastructure




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本