YAPC::Asia Tokyo 2015に行ってきました!#yapcasia

投稿おそくなりました。ブログを書くまでがYAPCです!

最初はYAPCの存在すらよく知らなかったのですがかるぱねぎらさん(@karupanerura)にチケットを譲っていただき行ってきました。

めっちゃPerl, Perlしているのかなーと思いきやそんなことはなく、IT系の人たちが集まるお祭りって感じでした。 以下気になったセッションの感想を書いていきます。

Managing Containers at Scale with CoreOS and Kubernetes

Kubernetesとは何者なのか? デモとともに紹介していくというセッション。 個人的に最近Dockerに興味を持っていてそろそろ複数のコンテナを扱いたいなーって思っていたので、 ちょうどタイミングのいいセッションでした。

ポイントとしてはKubernetesはスケジューラでありレプリケーションコントローラでPod(同一ホストで起動しなくてはならないDocker群)の数を一定に保つようにするということですかね。 死活監視をしているので、ホストサーバが死んだ場合自動的に最適な別ホストにDockerを立ち上げてくれます。 また、スケールアウトや逐次アップデート、いくつかだけアップデートなどもコマンドをひとつ叩くだけでよしなにやってくれます。 ただ、逆に突然別ホストに移動する可能性があり、死んだDockerは削除されてしまうのでKubernetesで管理するものは基本的にステートレスなDockerクラスタに適応する感じで、永続化したいものはnfsマウントするなりAWSだったらS3に預けるなりしないとダメとのこと。

うっかりをなくす技術

インフラエンジニアとしてお仕事をさせていただいてもらっているので、ミスを出来る限り減らしたいという理由からとてもためになるセッションでした。

人間だからミスをしてしまう。そのミスをいかに減らし、またミスっても大事に至らないようにするかというお話。 まず、意識レベルを高めるということ。指差し確認などが有効なよう。 また、ミスは勘違いから生まれるので、勘違いしないような設計が大事で、そのためにはどうするかというと人の視点にたって手順を作ったりコードを書くとよい。読みやすいコードについてはリーダブルコード読みましょう!というお話でした。また、どうしてもトリッキーな実装になってしまう時はコメントに残す、コメントと実装の乖離をなくすにはみんなでコードレビューが有効。

また、ハインリッヒの法則からnear missを減らせば重大なミスは減らせるが、そもそもnear missは気づきにくいのでどうやって見つけるかが重要。具体的にはGitHubのIssueにヒヤリハットの要因を集めてまとめておくと良いとのこと。

最後にコーディングする上で言語による制約をうまく使いましょうという話。副作用を閉じ込める関数型言語はつよい。

ISUCONの勝ち方

ISUCONで勝つために聞いてきました!

まず、そもそもなぜ早くしなくてはいけないのか? ユーザ的な面だと遅いとUXが下がり、また検索順位に影響するとのこと。 そして、お金的な面で当然速いほどサーバ台数を減らせるのではやいとコスト削減になる。

方針として紹介されていた最初の1時間は問題把握・方針の決定、最後の30分は再起動テストにあてるってのは、去年やっていたのであとはのこりの6:30でいかにチューニングするかですね... また、参考になったのは「決まったことはメモとして書き出す」というの。 計測した情報とかは書き出すようにしてましたが、することに関しては今からします宣言して作業程度だったので、これは実践しようと思いました。 また、レギュレーションを読めというのこれ大事ですね...しなくていいチューニングをしないように。  技術的な面だとまずMySQLでは「コストの高いクエリより実行回数がおおいクエリが効いてくることもある」というの。とりあえずスロークエリにすべて吐き出す設定でベンチまわすのもありかもですね。long_query_time=0でそれが実現できるらしいです。あとは「いつもB+木を」。secondery indexのリーフにはprimary keyがいて、そこからprimary keyの探索が走るというの知らなかったので意識していきたいです。あとはそもそもoffsetがなくなるようにKVSとかとの連携も重要ですね。 Frontだとh2oはやいというはなし聞いたのでちょっと試してみます。