blog.bouzuya.net

2013-10-29 Immutable Infrastracture

Twitter でも書いたけれど、 Immutable Infrastracture に興味がある。良い考えかただと思う。インフラをイミュータブルにする。不変にする。状態を変更させない。変更管理ではなく、新規に構築する。ちょうど Java などで言うところのイミュータブルなオブジェクトのように。

ぼくが Java を通じて学んだ大きなことのひとつがイミュータブルなオブジェクトだ。不変オブジェクトは極めて扱いやすい。共有して良し、再利用して良し、なによりシンプルで理解しやすい。なるべく定数に、なるべくイミュータブルなオブジェクトに。これは大原則だ。防御的コピーで支払う実行時コストと、下がるコードの複雑さとを天秤にかけるなら、よほどのことがないかぎり、ぼくは後者をとる。

インフラに話を戻すと、仮想マシン全盛の今の時代、マシンは潤沢に確保できるリソースなので、富豪的に使えばいい。使い捨てることはもったいないことじゃない。GC と同じで、捨てられたマシンの物理リソースは解放されるし、かかるのは構築のコストや乗り換えるコストくらいのものだ。ひとつのマシンをせこせこと状態を変更しながら使うのはトラブルの元でしかない。必要なら新規構築。

ゼロダウンタイムデプロイの技術はある。例えばロードバランサーを使って、新しいマシンを追加、古いマシンを削除するように振り分ける、なんて方法だ。すくなくともそれができる構成にはできなければならないが、それができることは重要だ。

構築のコストを下げること、マシンの切り替えのコストを下げること。考え方は「変更しない。新規に構築して、破棄する。」これだ。

それにしても鼻の上のにきびが痛い。

20 min.