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関連記事

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

タグ : Immutable Infrastructure , クラウド

≫次の記事
Immutable Infrastructureはアプリケーションのアーキテクチャを変えていく、伊藤直也氏(後編)
≪前の記事
JavaScriptでOfficeやPDF文書をWebページに埋め込む「BoxView」をBoxが発表

Loading...

Blogger in Chief

photo of jniino Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求しています。
詳しいプロフィール


新サイト「Publickey Topics」始めました!


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





アクセスランキング - 過去7日間

  1. マイクロソフト、「MS-DOS」と「Word for Windows」のソースコード公開。コンピュータ歴史博物館への寄贈で
  2. [速報]Google、AWS対抗をあらわにした値下げと新価格体系を発表。継続利用で自動値引き
  3. Amazonクラウドの仮想デスクトップサービス「Amazon WorkSpaces」が今日から一般公開。Windows 7が月額約3500円から。iPad、Androidタブレット、Kindleも利用可
  4. [速報]Google、「Managed Virtual Machines」発表。Google App Engine内で仮想マシンを管理
  5. クラウド自身が競争力としてのシステムインテグレータを必要としている
  6. [速報]Google Compute EngineがWindows Server、SUSE、Red Hat対応。Cloud DNS機能も
  7. [PR] C++BuilderがAndroidネイティブアプリ開発対応。Androidエミュレータ搭載、異なる画面サイズも自動レイアウト、モバイルBaaSにも対応。エンバカデロから
  8. JavaScriptでOfficeやPDF文書をWebページに埋め込む「BoxView」をBoxが発表
  9. 「データサイエンティスト」の認定プログラムを開始、米クラウデラ
  10. マイクロソフト、「Windows Azure」の名称を「Microsoft Azure」に変更。正式発表
  11. [速報]Java 8が正式公開。ラムダ式、新しい日時API、JavaFX8など。NetBeans 8.0も登場
  12. Excel方眼紙をアプリ化する「Forguncy」のプレビュー版が無料公開
  13. Gmail、2013年の可用性は稼働率99.978%、年間ダウンタイム2時間以内だったとGoogleが明らかに
  14. シスコ「InterCloud」発表、OpenStackベースのクラウド基盤。1000億円を投資しパートナーとパブリッククラウド提供へ
  15. インテル、過去最大のデータセンター戦略投資でクラウデラの筆頭株主に。Hadoopとインテルアーキテクチャをビッグデータ時代のプラットフォームにすべく

Publickey 最新記事 10本

Publickey Topics 最新記事 10本


PR - Books


fig

fig

fig

fig



blog comments powered by Disqus