亀山さん: Web API と管理画面というかたちで提供しています。API については、まずお客様の EC サイトで注文が入ります、そのエンドユーザーが、コンビニ後払いやクレジットカードを選択し、注文となった際に、その注文の情報と Javascript 経由で取得したブラウザの情報を送信してもらい、その情報から過去の傾向や統計解析した検知モデル、それに外部データを用いて、その決済の未回収のリスクを算出し、危ないかどうかのレスポンスを返すものです。審査は数秒程度で、クレジットカードの与信審査と同じくらいです。そこで、OK, NG 白黒つくものもありますが、お客様のポリシーによって、グレーゾーンを設けることができ、グレーゾーンの注文は、管理画面でお客様の担当者の方に白黒つけてもらう、というような仕組みになっています。
O-PLUX の構築をはじめたとき、はじめから Google Cloud Platform を使うことを決めていたんですか? 亀山さん: 元々 Google App Engine が出たころにさわったことがあったんです。
グルーヴノーツの Google Cloud Platform 活用事例前半では MAGELLAN を作成するに至った理由や、そのアーキテクチャーについて、また、なぜ Google を Google Cloud Platform を選んだのかについてお聞きしました。
後半では、グルーヴノーツでの開発方法や社内の雰囲気を中心に聞いていきます。
では最後に、今回 Google Cloud Platform を使っていただいた感想と、今後どう使っていきたいか教えてください。
最首さん: Google とちゃんと付き合うということによって、これから何をしようとしているのかということを知ることができる。これは僕らのようなサービスカンパニーにとってはとても重要なことです。自分で頑張ってこれからどうしようと考えるのと、もう一つベンチマークとして Google のような巨大な企業が、いろいろな情報に対するアプローチを持ってる会社が今何を考えているのか知れますから。時々、びっくりするようなものが出てくるので、僕らが抱えているニーズにハマったりすると、破壊的なことが起きる。最近、そういうことが多くて恐れ入ってるんですけどね。これが他のベンダーだったら、さっき言ったようにサーバの値段が安くなりましたとか、SSD がついて、早くなりましたとか、それは何のイノベーションでもない気がするんです。
佐々木さん: 見てると、どこもかしこもどんな企業も IT 部門がないと駄目な状況になってるんですけど Google の仕組みを使うとあまり必要がない。例えば、データセンター選んで、というのもいらないし、Google Apps を入れてみたいな話から、Google Cloud Platform を使えば直ぐにサービスを作り始められる利便性、BigQuery があればデータをとりあえず投げ込んで SQL をたたけばいい。それをしようとデータベースを何にしようかと考える必要もなく、専門性のある人を連れてこなくてもいいという導入のしやすさ。今までのビジネスを変えずに取り組めるという状況に近くになってきているので、選択肢としてはそういう考え方の方がいいのかなと。
他のベンダーだと結局インフラ エンジニアがいるし、データベースエンジニアいるしと、エンジニアもいないし、人集める方が大変。ゲームがわかりやすくて、今までフロントばかり作ってた人が、ネットワークが必要なゲーム、運用が必要なゲームという流れの中で、その継続していく仕組みを自分たちが持たなければならないという時代におもむろに放り出されたのがゲーム業界の人たちなんですよね。それをやるには人を探さなきゃいけないんですけど、それが IT の人なのかなんなのか、ゲーム会社の人たちはまだ漠然とわかってないんです。そういう人たちに対しては、やっぱり今までフロントに注力できてたんだが、もっと注力できる仕組みとして、他のベンダーより Google の方がいい。
さらに MAGELLAN であったら。
佐々木さん: その通りです。今ゲーム会社さんも、Ruby on Rails はできないけど、Javascript ならできるということで Node.js で書いてもらっているお客様もいるんですよ。そこだけ今までやってきたことを、ちょっとだけ毛が生えた程度でも学べば、実際に直ぐに導入してもらえて、もう明日から使えるって。それをデータセンター借りてとなると、明日からは使えない。そのスピード感をどれだけ持てるか、という選び方は重要なのではないかと思います。
最首さん: 根っこにあるのは、ゲームの凄まじいトランザクションを従来の発想で乗り越えるのがとても大変だったということ。それは普通に Web サーバや、アプリケーションサーバ、DB サーバなどを置いていくだけでは済まない、もっと高いレベルでの対応が必要だったんです。もちろん Google 以外のクラウド ベンダーを知らないわけじゃないですけど、ぼくらが直面していたことからすると、違和感を感じざるを得なかった。そんな中、Google の人達と話をすると、考えているのは安いコンピューターとか性能の良いサーバとかそういう話じゃなくて、何か本質的なことを考えている気がして…
それが Google と同じインフラストラクチャーで動かせるということ、最首さんたちの経験が MAGELLAN に還元されたように、Google のサービス提供者としての経験がそのまま Google Cloud Platform に還元されているということなのかもしれません。
最首さん: プログラム モジュールをコンポーネント化し、再利用性を高めていくということは、うまく言った部分もあったかもしれませんが、考える粒度が小さすぎたのは問題だったのかなと。それにロジックがビューと切り離しにくく、結局うまく再利用ということろまでは踏み込めませんでした。その後出てきた流れ、SOA や、Web API、RESTful インターフェイスだとかのように、機能を比較的大きな単位で分割し、疎結合にして再利用を図るという流れは、うまくいったとは思うのですが、あの当時、やはりネットワークがボトルネックになりやすく、通信に冗長性を持たせることはなかなかできなかった。とはいえ今や、ある企業で使っている機能や、あるサービスで使っている機能を API 化することによって、機能分割して再利用性を高めるということは、当たり前のようになってきています。もっと時間をかけて考えていくべきテーマだったんでしょうね。
コンテナに関していうなら、VM で頑張る必要がなかった、ハードウェアレベルまで完全にエミュレーションする必要はなかったということだと思います。結局上位層で使っている部分というのはハードウェア I/O しているわけでもないし、もっと抽象化されているので、コンテナのような発想で十分だといえば確かにそうだと。昔 Google は VM を使ってないと聞いたんですけど、それは当たってたたわけですよね。全部ハードでやってるらしいと、それは嘘だったわけですね(笑)。
ライブ マイグレーションによって Google が目指したのは、VM を再起動することなく、すべてのデータセンターにあるハードウェアやソフトウェアを最新の状態に保つことです。こういったメンテナンスは、ホストマシンの再起動が必要となるため、透過的なメンテナンスがないのなら、当然 VM にも影響がでます。
バグのあるアップデートが稼働マシンに紛れ込んだ : ロールアウトを停止しましたが、稼働マシンには達してしまいました(Canary 環境では出現せず)。バギーなソフトウェアであれば 1 週間もせずに VM 群をクラッシュさせていたと思います。ここでは、影響を受けたマシンの VM 群をバギーではない他のマシンにマイグレートしました。
予期しないホストのメモリ消費 : バックエンドのコンポーネントの 1 つはアロケートされた以上のメモリを消費し、VM で OOM(out of memory:メモリ不足)の兆候を示していました。過負荷のマシンから VM をいくつかマイグレードして OOM を回避すると同時に、バックエンドのシステムにパッチを当ててメモリの割り当てを超えないようにしました。
トランスペアレント メンテナンスの実施
導入後、マイグレーションは数十万回実施されてきています。多くの VM はマイグレーション導入後に立ち上げられて、すべて複数回マイグレートされました。反応は非常に好意的です。初期のマイグレーションのテスト期間中は、Rightscale でマイグレーションの効果を調べました。対象の VM をすべて 2 回マイグレートした後、次のようなレポートが得られました。
「ログファイルを調べましたが、データベースの中の全データは…まったく異常ありません。もしインスタンスがマイグレートされていたことを Google が教えてくれていなかったとしたら、まったくわかりませんでした。すべてのログとデータは正常ですし、RightScale のクラウド管理 ダッシュボードには、ゾーン、インスタンスのサイズ、IP アドレス、リソースなど、いずれも変化はありませんでした」。
ServerDensity の David Mytton 氏と協働で、レプリケートした MongoDB をライブ マイグレーションしたところ、マイグレーション終了後に David はツイートしました。
実際 Google は、ホストへのカーネルのアップグレードと全 VM にセキュリティ パッチ当てを、どの VM も欠けることなく行っています。そこに含まれる大量のコンポーネント、さらにその依存関係までが、どの時点においても 1 つとして障害を起こしたり、失うことがなかったことを考えると驚異的なことだと思いませんか? マイグレーションの間、VM を構成する多くのコンポーネント(ディスク、ネットワーク、管理ソフトウェアなど)は、元のホスト マシンとマイグレート先となるマシンにデュプリケートされます。マイグレーション中のどこかで、その 1 つでも障害を起こせば、それがアクティブ(クラッシュなど)なものであれパッシブ(消失など)なものであれ、実行中の VM に影響を与えずにマイグレーションを完全に取り消します。
どのように動作しているのか
実行中の VM をあるホストから別のホストへマイグレーションするとき、ゲスト VM と、それと通信している全てに対して透過的な方法で、マイグレーション元から先へすべての状態を移す必要があります。これをシームレスに行うには、多くのコンポーネントが関与してくるのですが、ここでは、大まかなステップを見ていきます:
Google のクラスター マネージメント ソフトウェアは、データセンターやジョブを制御するポリシー(た(例えば、データセンターの最大稼働率や、ジョブにおいて 1 ユーザーのために 1 度にマイグレーションできる VM の数であるとか)に従って、こうしたイベントやメンテナンス スケジュールを監視しています。
マイグレーションの対象となる VM を選択されたら、マイグレーションが差し迫っていることをゲスト VM に通知します。一定期間経過した後、マイグレーション先となるホストが選ばれ、そのホストでマイグレーション元の VM を受け入れる先となる新しい空の VM をセットアップするように依頼します。図の中の認証(Authentication)は、マイグレーション元と先との接続を確立するためです。
VM のマイグレーションには次の 3 つのステージがあります:
予定されたマイグレーションが行われるまでの間、ほとんどの状態をマイグレーション先へと送信しながら VM はマイグレーション元で動作します。この期間に、例えばすべてのゲスト VM のメモリをマイグレーション先へコピーすると同時に、再度変更されたページがないか追跡しています。この状態がどれだけ続くかは、ゲスト VM のメモリー サイズや、そのページが変更される率(ダーティ状態の率)によります。
停止している間、VM が完全に実行を止める時間はほんの短い間ですが、一瞬停止し、マイグレーション先で VM が動作を始めるために必要な残りの状態が送信されます。停止状態に入るのは、マイグレート前の準備期間中の状態の送信が、動作状況に対して増えなくなったポイントに達したときです。ここでは特に、送られるメモリのバイト数とゲスト VM がページを変更する率とのバランスをとるアルゴリズムを採用しています。
マイグレート後の一定期間、VM はマイグレーション先で実行されていますが、マイグレーション元の VM もそのままマイグレーション先をサポートする機能を提供していることがあります。例えば、ネットワーク ファブリックが VM の新しいローケーションで用意できるまで、マイグレーション元の VM は、マイグレーション先の VM が送受信するパケットの転送サービスを提供します。
最終的にマイグレーションが完了すると、システムはマイグレーション元の VM を削除します。マイグレーションが実行されたことは、ログからわかります。
全てにおいて透過的にメンテナンスしていくことには、たった 1 つの VM でさえも犠牲にしないという目標があります。これを達成するため、超高レベルの厳格なテストをライブ マイグレーションに対して実施してきました。マイグレーション アルゴリズムの中で注意すべきポイントの全てで、障害を引き起こすためにフォールト インジェクションを使い、それぞれのコンポーネントごとにアクティブとパッシブの障害の両方を生成します。デベロップメント テスト(数か月にわたる)のピーク時には、毎日数万回のマイグレーション テストを実施してきました。
ライブ マイグレーション テクノロジーによって、ゲスト VM への影響なくインフラストラクチャーを最高の状態に維持することができます。Google が VM を不老不死にしたと主張するレビュワーもいました。定期的、非計画的メンテナンスが要求される中、物理マシンの再起動が必要な数多くの問題がありながらも、長期間 VM を実行し続けることが可能となっています。
最近発生した、他のクラウド プロバイダに影響を与えたセキュリティ上の問題のいくつかが、私たちに影響がなかったように、今後発生しうる新たな脆弱性に対しても、Google は VM への影響なくCompute Engine を保護できるようにしていきます。
-Posted by Miche Baker-Harvey, Tech Lead/Manager, VM Migration