激安クソVPSとプロビジョニングツール
クソVPSの話
少し前まではいろいろな怪しい VPS サービスに突っ込んで、サービス改悪や閉鎖などの地雷を踏みまくってるクソ VPS ハンターだったのだが、 CloudAtCost という激安 VPS サービスがあり、半年ほど使い続けている。
この VPS サービスは、基本的に異常に安いという特徴を持っている。1コア0.5Gのメモリで35ドル、CPUとメモリ増やすごとにほぼ比例して料金が上がるのだが、これは月額ではなく払いきりである。一度料金を支払えばサービスか自分が死ぬまでは無限に使えるのだ。さらに言うと、表示されている価格に対して、ほぼ常時4割引のセールを行っており、たまに6-10割引のクーポンを Twitter やサイト上で配っている。
なぜこんなに安いかという疑問はある。FAQ - How can you do this for this price?にある程度説明があって
- ネットワークは国営インフラと提携
- 電気代が安い
- データセンターの用地やハードウェアを既に調達済み
らしい。日本とはだいぶ事情が違うらしいが、良くわからない。
購入するのはインスタンスではなくサーバープランであることも大きな特徴だ。契約したプランの範囲内で、自由にインスタンスを立ち上げることができる。たとえば、4コアのプランを2つ契約すれば
- 8コア x 1
- 2コア + 6コア
- 2コア x 4
などの分配が可能だ。メモリやストレージについても、同様に分配可能である。
ここまでだと非常に良い印象だが、そこまで旨い話はやはりないのだ。
良くないところとして
- CPU がしょぼい(6年くらい前のやつ)
- CPU / 回線帯域の継続的な使いすぎで無断停止する可能性がある
- 初期設定だと7日で止まる罠がある
- インスタンスの生成が遅い、失敗する可能性がある
- インスタンスに IP がアタッチされても、外からアクセス可能になるまでが遅い
- 遅いだけなら良いがいつまでもネットワークからアクセスできない場合もある
- IP を静的にアタッチする( AWS だと EIP みたいな)機能がない
- ping が遅い(RTT が 160-200ms 程度)
という点が挙がる。インスタンスが正常にセットアップされ、ネットワークに繋がるという当たり前のことに、低くはない一定の確率で失敗し、その後も常に突然死し得るという要素は、クラウドサービスを標榜するものとして大変なマイナスである。そして何よりまずいのは、
というところである。極めて厳しい。
さて、この「RTT が長くレスポンスが悪い、いつ吹っ飛ぶか分からない」というサービスをいかに使っていくかというところで、サーバーのプロビジョニングツールの出番となる。
プロビジョニングツールの話
chef などのプロビジョニングツールの良いところは
- あるべき状態を記述すれば自動的にパッチを当ててその状態にする
- 羃等性の担保(いつでも何回でも同じ作業を繰り返すことができる)
ということで、これはサーバー内の state (ログとか保存の必要性があるファイル)さえ管理しておけば、いつでもそのサーバーを使い捨てにできる (disposable) という事である。逆に言えば、state なんて捨ててもいいという使い方に限定すれば、人間がやることはどうあるべきか、という完成形を記述して push するだけでよいのである。 ssh でログインしてミドルの設定ファイルを手で弄ったりする作業を jQuery 的と例えるならば、プロビジョニングツールのアプローチは仮想 DOM に近いものだろう。
クソ VPS サービスの歩き方
というわけで、いつ dispose されるか分からないクソ VPS では
- state を捨てても良い使い方しかしない (サーバーを disposable にする)
- そのための手段がプロビジョニングツール
というのが今の自分の考え方だ。実際、本当にどうでも良いインスタンスを除く、webやゲームサーバーのホストなどは chef のレシピを書いて管理している。コンテンツに付いても、消えたら困るものに付いては github で管理しつつ、それを使うサーバーが fetch するようにしている。
回線が細かったり CPU がしょぼかったりするので、おすすめの使い方は
- 時間かかっても良いような定期ジョブやCIを回す
- クローラ(通信遅くても別に良い)
- Webサーバーにするけど無料のCDNで高速化する
- ゲームサーバーとかならCPUをたくさん割り当てて、CPUバウンドな処理でも使用率が上がらないようにする
くらいだろうか。どのみちあまり信用していないので、復旧可能にできない、かつクリティカルな用途には使わない方が良い。仕事で使うとかありえない。