インフラ開発合宿を6月20(金)・21(土)に開催しました

こんにちは、開発企画室の佐島です。
少し時間が経ってしまいましたが、6月半ばに開催したインフラ開発合宿についてご紹介したいと思います。

インフラ開発合宿とは

一泊二日、いつもとは違う環境に身を置き「仮想化、自動化」をテーマに何か開発しようという試みです。
テーマと言いつつもゆるい感じで、実際は開発したい or 試してみたいものを自由にやる場になりました。
GREEのインフラを支えているエンジニアは、新しいインフラを開発する部隊と、稼働中のインフラを安定運用するための部隊にざっくり分けることができるのですが、今回の開発合宿は開発部隊を中心に企画しました。

事前準備

何を開発するか決める

参加者には事前に開発するものを公開してもらいました。
自分がやりたいものより面白そうなものがあればチーム開発もあり、という狙いでしたが、結果的にはみんな自分のが一番ということで全員ソロとなりました。

以下、いくつかピックアップさせて頂きますが、結構バラエティーにとんだ内容になっていることが伺えると思います。

  • 線形計画法やヒューリスティックなどを使ってサーバの最適配置を求めるツール
  • distributedな何か (haskell+distributed-process or akka あたりを使う)
  • オンプレ (OpenStack 環境) とパブリッククラウド (AWS) のマルチクラウドオーケストレーション (仮)
  • ペンシルパズルのsolverツール
  • Serfを利用してなんかする
  • 非同期 worker プロセスを Docker で使い捨てにしてみる
  • (OpenWRT 化したルータなど)ネットワーク機器に対して設定を自動デプロイする仕組みのモック作り
  • Scala + Play2 (+ chef or docker) を使ってサーバの構築(not オーケストレーション)ツール
  • ブラウザゲームにおける不正なツール使用をアクセスログから検出するツール
  • Kontiki (Haskell の Raft library) を over distributed-process でつかってみる
  • OpenStack nova で lxc か Docker virt driver & CoreOS を試す、余裕があれば Kubernetes 触ってみる

どこで開発するか決める

開発合宿はホテル一宮シーサイドオーツカという場所をお借りして開催しました。
IMG_0378
このホテルはには「セミナー・会議プラン」というものがあり、宿泊と会議室利用がセットになっているのですが、最大の特徴は部屋を11時にチェックアウトしても、会議室が継続して利用できるというところです。今回はそのシステムを最大限利用させて頂き、翌日もたっぷりと開発時間を取ることができました。
ネットワークや電源まわりも完備しているのでPCだけ持っていけば大丈夫という開発合宿に適したホテルだと思います。(Wi-Fiがないので、Wi-Fiルータの持参をお勧めします。)

開発環境を調達する

色々実験的な試みも想定されたため、合宿専用のAWSアカウントを準備し参加者全員で共用しました。

合宿の模様

初日

13:30 移動開始。
IMG_0366
東京駅から特急で1時間、その後ホテルのバスで移動しました。

15:30 開発開始
IMG_0377
LANケーブル、HUB、OAタップはホテルの備品をお借りし開発できる環境を整え、いざ開発開始。

19:30 夕食
IMG_0409
ホテル内のレストランで夕食です。

20:00 部屋での開発
IMG_0426
こちらのホテル、12畳の和室がついてネット環境が整っている広い部屋が1部屋だけあったので、夜の開発部屋として確保しておきました。
みんなでこの部屋へ集まり開発続行です。ちなみに22名で利用したのですが、大部屋含め6部屋確保しました。部屋割りは行わず、眠くなった人から順番に空いてる部屋へ行く方式。
参加者の中にはCTOもいたのですが、全く同じルールを適用させて頂きました。

2日目

8:00 朝食
写真撮り忘れましたがビュッフェでした。

9:00 開発再開
IMG_0380
ホテルの中庭に椅子とテーブルが置いてあり、そこで開発する人も。

12:00 昼食
IMG_0436
昼食もプランに含まれています。1泊3食という聞き慣れないプランですがお得です。

16:00 発表会
いよいよ成果発表会です。
ゆるいとは言え「仮想化、自動化」というテーマがあったのでDocker、オーケストレーションツールなどテーマに即した発表が続きます。
中でも参加者の興味を特に引いた取り組みを2つほど紹介させて頂きます。

1つめは限られた制約のもと、必要なラックの数が最小になるよう自動的にサーバを割り当てるツール。
IMG_0458
線形計画問題を解くためのソルバー、GLPK(Gnu Linear Programming Kit)を利用して解を導くというチャレンジです。ところが式は非常に簡単に書けるもののサイズが40以上になると解けなくなるという問題に直面します。そのため近似解を使う方法に変更し再度チャレンジ。うまく行きそうな兆しが見えたので実際のデータを利用して解析した結果、なんとラックを空けることに成功!(しかも解析は10秒以下)

論理的な制約条件下での実験ではありますが、実データでラックを空ける余地があることを示せたというのはすごい成果だったと思います。

そして2つめはWeb上でマルチトラックレコーディングを行うというもの。
IMG_0479
USBマイク経由で入力された音声データをSocket.IOを利用してAWS上へ保存し、保存したデータを再生させながら別トラックを録音、それぞれのトラックをWeb上でmixできるというWebサービスでした。
4分という短いプレゼン時間で、この日のためにわざわざ持参したギターでデモをするという、やや詰め込みすぎな内容もあいまってプレゼンは非常に盛り上がりました。(実際には4分を軽くオーバーしたわけですが)

最後に

ということで無事にインフラ開発合宿は終了したのですが、この2日間のチャレンジを参加者だけの知見にしてしまうのはもったいないということで、グリーで毎週金曜日のお昼に開催されている社内勉強会「Mini Tech Talk」の場をお借りして、そこでも成果発表を行いました。さすがに全部というわけにはいきませんので、いくつかピックアップしての発表ではありましたが、参加できなかったエンジニアへも共有できたのは良かったなと思います。

今年の4月に入社した新卒エンジニアからCTOまで、なんとも幅広い参加者で開催された今回の合宿ですが、今後のGREEを支える「種」がいくつも生まれとても有意義な2日間でした。また開催される機会がありましたらレポートさせて頂きます!