Memory Warp
メモリをサーバー間で共有して冗長化するという仕組みを、はじめて実物で見たのはベリタスウェアだった。
当時わたしは大手のインフラ構築支援に売り飛ばされていた。発注元に優秀なプレイングマネージャーがいた。決裁権者なのにスーツ姿でサーバーに繋いでキーボードを叩きまくっている。Veritas Cluster Serverの構築を自ら手を動かしてやっていた。その人のもとでベリタスウェアの冗長化を初めて見た。
共有ディスクを前提に、アプリケーション単位でフェイルオーバーする。片方のサーバーが死んだら、もう片方がサービスを引き継ぐ。それだけなら理解できた。理解できなかったのは、マイクロ秒で書き換わるメモリの中身をサーバー間で同期するという発想だ。正気か、と思った。実際動いていたし、なんとかなっているようには見えた。差分更新などで最適化していたのかもしれないが、仕組みはまるでわからなかった。
時は経ち、某社のクラウド基盤に関わった。内部はvSphereで構築されていた。
VMwareのvMotionという仕組みがある。仮想マシンを稼働中のまま、物理サーバー間で移動させる。メモリの内容を移行先にコピーしながら、差分を追いかけ続け、最後の瞬間だけ一瞬止めて切り替える。共有ストレージの上で仮想マシンが動いているから、ディスクは動かす必要がない。メモリだけが筐体を超えてワープする。
ベリタスはアプリケーション単位のフェイルオーバーだった。vMotionはOS単位だ。仮想マシンごと、メモリごと、丸ごと移動する。スケールが違う。
vMotionにはずいぶん泣かされた。ホストのメンテナンスやリソースバランシングで突然発生するプチ瞬断。ネットワークが一瞬途切れる。アプリケーションがタイムアウトする。原因がvMotionだと気づくまでに時間がかかる。ログを追いかけてようやくvCenterのイベントに辿り着く。
それでも、マイクロ秒で書き換わるメモリの中身をネットワーク越しに同期して、仮想マシンを生きたまま移動させる。あのとき狂気だと思った技術が、いまではクラウドの裏側で当たり前のように動いている。純粋にエンジニアとして、畏敬の念を禁じ得ない。