tech.kayac.com

はじめに

早く梅雨が開けないかなと感じる今日この頃。 どうも技術部の@Konboiです。 今日は、先日行った社内勉強会の取り組みを紹介しようかなと思い記事を書いてみましたのでお暇なときに是非読んで見てくださいm(_ _)m

社内勉強会とは?

カヤックでは毎週金曜日に技術部勉強会を行っています。 普段の技術部勉強会では、担当持ち回りで

  • 担当しているサービスの新規機能の紹介と実装の話
  • 最近気になる技術の紹介
  • 各エンジニアの開発環境の見せ合いっこ

と色々な事を発表し合っています。 先日の勉強会では、趣向を変えkoebuのリリースから譲渡までの約7年間運用してきた裏話を、長らく担当していたエンジニア2人(@fujiwara, @takihito)から対話形式で聞くという勉強会を行いました。

スクリーンショット 2015-07-07 14.00.42.png

当日の様子

当日は昔話に花を咲かせるためにはビールが必要だろうと思い人事に交渉したら2つ返事で用意してもらえました。 おかげ様で今回の記事では残念ながら紹介できない、あんな事やこんな事が出てきていつもと違った形式ではありましたが、非常に楽しく充実した勉強会になりました。

スクリーンショット 2015-07-07 14.01.30.png

今回は勉強会で出た話の中で紹介できる物を幾つか紹介しようと思います!

2008年頃からnginxを導入

当時のkoebuは愛のある(ありすぎる?)ユーザーさんの自作ツールにより、一時的にサービスが高負荷状態になりレスポンスが悪化することがあったそうです。

その時、避難方法として目をつけたのが nginxのモジュールの1つだったそうです。 最近ではよく使われるnginxですが、2008年当時から使用し自作ツール対策に効果を発揮していたのには驚きました。

2009年からAmazon S3を利用

最近ではAWSGCPなどのクラウドサービスを使う事はそれほど珍しくなくなりましたが、koebuでは2009年から音声データやアップロードデータをS3を利用してサービスを運用していました。 2009年当時は、日本リージョンがまだ無くアメリカのリージョンを利用していたそうです。

当時はS3のようなストレージサービスはあまり無く、日々サーバーを圧迫するデータファイルに頭を悩ませていたそうです。 本当大変だったなと染み染み語る担当エンジニアからは当時の苦労が垣間見えました。

2011年 はじめてのデータセンター移行

2011年にはじめてデータセンター移行を行いました。 その時実施した際の経緯や、併せてどのようにアプリのチューニングを行ったかの話を聞きました。 この時のデータセンター移行からchefを利用したサーバ構築が導入され、現在の自社サービスやゲームタイトルのサーバ構築の基礎が作られたという話もでて、聞いていたエンジニアは関心して聞き入っていました。

※こちらはYAPC::Asia 2011での @fujiwaraトークの一部になりますので詳しくはスライドをご覧ください。

さいごに

長らく運用されていたサービスを振り返ってみると

  • 蓄積されたノウハウの共有
  • 今や当たり前になっているサービスが無い時にどのように解決していたのか
  • サービス自身の成長と推移

などの話が聞けて非常に面白かったです!!

カヤックでは酒を片手に技術の話がしたいエンジニアを募集中です!

また、 カヤックと合同で勉強会を開催したい!会場を貸してもいいよ!という会社・企業の方がいましたら、是非お声がけください!

新人研修で Chef, Serverspec, TCP, HTTP, MySQL, ISUCON を担当した @tkuchiki です。

研修は 4/9 - 4/16 の 6日間 で実施し、 2013年技術部新卒研修 の内容を一部変更して行いました。
Go の研修については、今年の新人研修はgoでした を、
ISUCON については 新卒研修の最終日に社内ISUCONを開催しました 〜運営死闘てか死亡編〜 を御覧ください。

研修の目的

研修の目的は以下のとおりです。

  • Linux サーバ構築スキルの習得
  • Serverspec の必要性を学ぶ
  • Chef の cookbook を作成できるようになる
  • TCP・HTTP の理解を深める
  • MySQL の基礎を理解する
  • 実践(ISUCON)を通して課題発見・解決能力を養う

研修の内容

Chef, Serverspec

2013年に行った新人研修同様、予め用意しておいた Serverspec のテストを通るように手でサーバ構築してもらいました。
その後、サーバをまっさらな状態にして、手で構築した内容を Chef の recipe に落としこんで Serverspec のテストを通るように作業してもらいました。

TCP, HTTP

こちらも2013年の新人研修と同じくTCP についてざっくり説明した後に、
tcpdump を使いながら、 3 way handshake がどのように行われているか説明しました。
http についても同様に、telnet で HTTP Request を送り、nc で HTTP Response を返す作業をハンズオン形式で行いました。

MySQL

RDB についての話しや、MySQL の歴史、MySQL の index、 MySQL の lock の話しをしました。
lock については、@ichirin2501MySQLのInnoDBのロック挙動調査 をもとに話しをしてもらいました。
よくまとめられていますので、ぜひご一読ください。

ISUCON

ベンチマーカーやベンチマーカーのジョブスケジューラーも Go で実装しました。

良かった点

TCP・HTTP の研修をハンズオン形式で行った

アンケートの結果で最も要望が少なかったのが、TCP・HTTP の研修でした(特筆してよかった点がなかったことは課題だと思います)。
手で HTTP Request, Response を送る例は、書籍ではあまり見かけないと思いますので、
研修を行う意義のある内容だったのではないかと思います。

MySQL のテキストの質を高められた

@ichirin2501 が良い資料を作成してくれたので、
新卒社員以外にも有益な資料を社内に共有することができました。

改善点

それぞれのスキルセットにあった研修内容ではなかった

今回、サーバサイドエンジニア、フロントエンドエンジニアともに同じ内容の研修を受けてもらいましたが、
サーバ構築演習は内容的にサーバ構築を行ったことがある前提の内容になってしまいましたので、
フロントエンドエンジニアの新入社員には一部内容が難しかったようでした。

フロントエンドの研修がなかった

研修担当者が全員サーバサイドエンジニアだったこともあり、フロントエンドエンジニアの業務に関係する研修が一切行えませんでした。
サーバサイドエンジニアもフロントエンドの知識を持っていたほうが良いと思いますので、今後の課題としたいと思います。

まとめ

短い研修期間だったこともあり、基礎的なことしか教えられませんでしたが、
概ね目標は達成できたのではないかと思います。
今後は、研修期間を長くできるように社内調整を行ったり、基礎だけでなく実践的なことを教えられるようにしていきたいです。

明日から、GWでウキウキですね!!!!!!!!!!!

どうも新人研修のisuconを担当したKonboiです。

昨年、一昨年に引き続き新人研修の最終日に社内ISUCONを開催しました。

isucon用問題を自分が作成し、ベンチをtkuchikiが担当する方向で進めていました。

作成指針

まずはどのような問題にするかを考えました。 社内ISUCONでは、一線で業務を行う先輩エンジニアから研修を終えたばかりの新卒エンジニアまで幅広いエンジニアに対して、楽しんでいただけるような問題を作成できればなと思い以下のの方針で問題を作ることになりました。

  • 新卒入社のエンジニアでも挑戦できる問題にする
    • 新卒研修の内容で加点できるy問題にする
  • 通常の業務できちんと行うべきことを行う問題にする
    • 適切なindexを張る
    • 静的ファイルをapache,nginxなどのwebサーバーで返す問題にする

というのを指針に問題の作成を始めました。

問題作成

今年の研修はGoで行われたので、問題ももちろんGoです。 が、最初は使い慣れているRubyでα版を作ってからGoに移植することにしました。

普段ならやばいクエリを気付かずに仕込むことは簡単なのに、 わざとウィークポイントを仕込むとなると、なかなか難しさがありました。

出来上がった問題は、簡易版のtwitterアプリケーションのようなものです。

app.png

機能としては

  • 新規登録
  • ログイン/ログアウト
  • 投稿
  • フォロー
  • アイコン画像を返す
  • 投稿一覧ページ
  • 投稿一覧の情報をjson形式で返すAPI

以上の機能となっております。

この機能をRubyでひと通り作ってからGoに移植しました。

移植の際には ISUCON本戦の第3回大会第4回大会大会のGo言語実装を参考にさせてもらいました。

ありがとうございます。

テスト作成

研修の一貫としてISUCONの問題からアプリケーションのテストコードからソースを作成してもらう時間が研修の一環であったので幾つかテストコードを作成しました。

HTMLの構造のチェックにはgokogiriを使い、PerlのTest::mysqldのGo版であるgo-test-mysqldを使ってテストコードを作成しました。

DB周り以外は過去のISUCON本戦のベンチを参考にしました。

新卒エンジニアにとっては、アプリケーションの概要は分かっているものの、 それをいざテストコードからアプリケーションコードに書き換えるには、非常に手こずっていた印象を受けました。 (正直僕が新卒だったら手も足も出ない可能性しかないです)

そのため、ある程度したらいくつかライブコーディング的に説明しながらアプリケーションのコードを書いたりしました。

新卒エンジニアがみんながコードを書いている時にテストコードを追加するというタイムアタックを隠れてやってました。

とギリギリ進行していた社内ISUCONですがあるところでつまずきました。

そうベンチです。

ベンチが上手く動かないまま色々と試行錯誤を進めました。

社内ISUCON当日

無常にも時間は過ぎていくもので、当日の朝を迎えました。

参加チームは 2人1組で

  • 新卒エンジニアチーム 4組
  • 先輩エンジニアチーム 5組

全9組となりました。

inhouse.png

虚しくもベンチが動かないまま、社内ISUCONが始まりました。

参加者の人はソースコードをみたり、 gitの環境を進めたりとベンチが回らないなりに実装を進めていました。

並行して運用のリアルISUCONが平行で進み。

午後1時ぐらいからベンチが動き始めISUCONが始まりました。

それまではざわざわしていた会場も静かになりだし各チーム、コードと向き合っておりました。

その後は淡々と進んでいき、あっという間に時間は過ぎました。

競技終了の時間を迎え、10分間アプリケーションが動くか何度の確認をしてもらった後に最終ベンチを行いました。

結果新卒氏チームで優勝したのは

clorets : 小坂、森本 チーム

が僅差で優勝しました。

先輩エンジニアは、全チーム新卒チームより高スコアをだし面目を保つことが出来たのではないかと思います。

ベンチが遅れてしまったので参加者には迷惑をかけました。 ですが、社内ISUCON後の新卒エンジニアからアンケートをとってみると

  • 設定を変更することで、処理速度が変わることを実感することができて、とても楽しかった。
  • エンジニア同士で勝負ごとをするのがおもしろかった

など思ったよりも評判が良く、全員が もう1度挑戦してみたい という意見でした。

出題側としては申し訳なさもありつつ、楽しんでもらえて良かったです。

まとめ

  • 新卒エンジニア達が社内ISUCONを通して少しでもチューニングの面白さを感じてもらえた。
  • ISUCONを作るのは本当に難しく大変!!
    • ISUCON本戦出題者の大変さとすごさを改めて感じました。 本当にすごいっす。
  • 社内ISUCONだったのでチャレンジできました。
    • 社内で失敗しないよう努力はしますが、最悪失敗しても大丈夫な環境でチャレンできるの本当によかったです。
  • 主催する方はゆとりと余裕をもって準備することを声を大にして言っておきます!

お疲れ様でした!!!