GREE Tech Talk #06 ご来場ありがとうございました
こんにちは。開発企画室の佐島です。
はじめに
9月24日(水)、グリー主催の技術勉強会GREE Tech Talkが開催されました。
6回目となる今回のテーマは「Practical Go」。
言語をテーマにしたのは今回が初めてでしたが、言語そのものを学ぶというよりも実際の開発や運用で出会った問題を取り扱うという「実践的」な内容でしたので、いつものGREE Tech Talkと同じ感じだったのではないかと思います。
天候の悪い中お越し頂いたみなさま、本当にありがとうございました。
セッション概要
当日行われたセッションの模様をダイジェストでお届けします。
『Lessons Learned While Writing "peco"』牧 大輔(LINE株式会社)
最初にご登壇頂いたのはpecoの開発者であり、上位3%のアクティブGoユーザ牧大輔さん(@lestrrat)によるpeco開発で得られた5つの学びについてです。
ちなみに上位3%というのは、Golangコミッタの一人であるDave Cheneyよりも上とのこと!
まず最初にマーケティングの話。ツールを作成しても説明は誰も読まないので、いかに簡単にわかってもらうか、そしていかに簡単に使ってもらうかが重要。その点Goはバイナリの作成が簡単なので活用すべしというお話でした。そしてなんと発表中にpeco v0.2.10のLive Release!
次に同期の話。pecoのステータスメッセージではまってしまったバグを例に「並行処理の同期は簡単なことであっても油断するとすぐ間違えてしまうぐらい難しい問題なので気をつけるように」と警鐘を鳴らされました。
続いてテストの話。pecoでは必要な関数だけを抜き出してinterfaceを作りテストを実装したとのこと。必要になったタイミングで、必要な関数だけ抜き取ってinterface考えて差し替えれば良いというのがGo的なやり方ということです。
続いてライブラリ。スクリプト言語との最大の違いはコンパイルすること。pecoで必要な機能のライブラリにcontributeするという方向を選ばずpeco専用として取り込むという選択をしたとのこと。reflectionやinterface{}を使うことで多くの場面に対応できるライブラリにできるけれども今回のケースではそこまで必要性を感じなかったとのこと。go1.4で予定されているgo generateではもしかしたらソースコードジェネレータが追加されるかもしれないので今後ここらへんは改善されるかもしれません。
最後にクロスコンパイル。cgo使うとはまるので注意。とは言えgoに同梱されたライブラリを使えばよいかと言うとそれも怪しい。ということでハマったらTwitter等で聞いてみるということを覚えておくと良いですよとのことでした。
スライド:Lessons Learned While Writing "peco"
『Practical Go』田沼 修平(グリー株式会社)
続いて弊社エンジニアの田沼修平(@chobi_e)が登壇しました。
まずGREEでのGoの利用事例として、アプリケーションのボトルネックをモニタリングするために、XHProfを改造し、パフォーマンスデータをInfluxDBにバイナリで突っ込んでいるという紹介がありました。(注: GREEではpatch当てて利用しています)
その流れでモニタリングの重要性、Goでどうやってモニタリングするのか、という話になり、標準パッケージであるexpvarを使っているという説明がありました。
ちなみにPractical Goというタイトルは、Goでサービスをやっているという話はよく聞くものの、実際にモニタリングや運用まわりの話を聞く機会がないので企画したとのこと。
続いてGoでサーバを書く話。会場の半数以上の方がGoでサーバを書かれているということで、注目が集まっていました。
Echoサーバ、Rankingサーバの作り方が簡単に説明された後、本題のGoでMQTTサーバを導入した話へ。
GREEではGoの評価の一環として一部異常値をMQTTで収集しているという事例紹介が行われ、しかも負荷試験を行ったところパフォーマンス的にはCで書かれたMQTTサーバよりは多少時間がかかっているが、今後のチューニングで大きな遜色がないところまで行くだろうとのこと。
ということでGoでミドルウェア作ることはさほど難しくないし、実際に運用でも使え、パフォーマンスもでるが、一方で並行プログラミングはしっかり学ぶ必要がある、というメッセージで締めくくられました。
スライド:Practical Go
『Experiences Building InfluxDB with #golang』Paul Dix(InfluxDB)
最後に、InfluxDBのCEOであるPaulさんが登壇されました。
Goの長所として、まずシンプルであることを挙げられました。コードが読みやすく、理解しやすい、そしてそのことが特に大規模プロジェクトにおいてメンテナンス性の向上に繋がるとのことです。
また、特にWebサーバなどネットワークサービスに置けるパフォーマンス、堅牢性、外部依存なくデプロイできる点を長所として挙げられました。
次に得られた知見として、InfluxDBはgoraftを当初go get経由で利用していたが、しばしばgo getが参照するコミットが違うことにより調査に時間を費やすことがありました。その為重要な外部ライブラリはproject内に取り込むようにした点の説明がありました。またGoは新しい言語なのでChannels of channles等のGoならではの書き方を日々学び続けている点などの説明がありました。
長所の次は短所、ということでGCの話に。InfluxDBは時系列データベースなので特に多くの小さなデータを取り扱っているのですが試験中に2GBほどのheapでさえGCの影響を多く受けてしまうことが分かりました。Go1.4以降にはGCの改善計画がありますが、InfluxDBのように大量の小さなデータを扱うケースだと思ったよりも性能がでないのではと思っているとのこと。対応策は現在検討中のようです。
また、いくらGoが並行プログラミングやネットワークまわりに強いと言っても、やはり一筋縄では行かないという例として対象ノードが高負荷時やGC処理中のnetwork書き込み、読み込み周りのtimeoutをどう扱っていくかという問題の解説がありました。
ライブラリの再発明についても触れられ、raftプロトコル特有の問題を解決するためにInfluxDB向けににstreaming raftのライブラリを作成しているとのこと。Goのライブラリはまだまだ枯れていないものも多く、自分たちのプロダクトを良くするためには再発明を恐れず作るのが良い、というお話でした。
(WIP: Streaming Raft https://github.com/influxdb/influxdb/pull/903)
最後にパフォーマンスTipsとして、pprofは早い段階から何度も使いうこと、ベンチマークはあらゆるレイヤーで書くこと、というメッセージで締めくくられました。
スライド:Experiences Building InfluxDB with #golang
写真撮影
普段ならここから懇親会となるところですが、今回、ニコ生をやるということで、せっかくなので弊社CTOふじもとがPaulさんにインタビューする模様を配信しました。
paul x グリーCTO ニコニコインタビュー
ふじもと(以下、ふ)Paulさんのバックグラウンドとか教えてください。いつからGO始めたとか、好きな言語とか
Paulさん(以下、P)プログラミングは9-10歳ぐらいで始めました。最初はRubyです。Rubyって日本の言語ですよね?だけどもっとハイパフォーマンスなのがやりたくなってscalaをやり始めました。その後Goを書き始めました。
ふ:どうやってGo学んだんです?
P:オンラインドキュメントとかGoの本とか他のgoのサイトとか、あとソース読んだりとか
ふ:おすすめのコードは?
P:やっぱりGo, The Standard Libraryですかね。
ふ:Goは1年前にInfluxDBのために選択したんでしたっけ?
P:いえ、2年前です。InfluxDBのために始めたのが1年前です。
ふ:2年経ってベストな選択だった思います?例えばもっといい言語があったとか。
P:それは、、ずいぶん大きな質問ですね。ただ一つ言えるのはGoはすごい速さで成長しているし、色んな人が助けてくれるし、僕たちのプロダクトに貢献してくれるのはGoで書いてるからだと思います。
ふ:日本ではGoもずいぶんポピュラーになってきましたけどアメリカではどうです?
P:まだアーリーステージですけどサーバサイドではポピュラーになってきてると思います。4月末にGoのカンファレンスがあったので行ったけど700人ぐらいいました。
まだアーリーステージだけどコミュニティもあるし、信じられないスピードで成長してます。Ruby始めた頃もコミュニティ小さかったけど6年たった今では大きくなりましたし。
ふ:Goでも同じことが起こると?
P:Rubyより大きくなると思います。
ふ:キラーアプリってなんだと思います?
P:WebAPIじゃないですかね。WebAPI書くなら、特にSinglePageApplication書くならGoがベストだと思います。
ふ:最後に、日本のエンジニアに向けて何かメッセージを
P:Run Go & Use InfluxDB!
ふ:ありがとうございました!
アンカンファレンス
今回は懇親会中にアンカンファレンスを実施しましたので、発表者のみなさまの写真だけでもお届けしたいと思います。
『Go Learning Challengeの話』Yambeさん |
『ISUCONにGoで参加する話』@matsuuさん |
『golang-jp.orgの話』@atottoさん |
『wtの紹介』@yosuke_furukawaさん |
『GobiesVMの紹介』@Spring_MTさん |
最後に
改めまして、お忙しい中ご来場頂きましたみなさま、並びに快く登壇をして頂きましたスピーカーのみなさま、アンカンファレンスにご参加頂いたみなさま、本当にありがとうございました。
そして今回初めての試みだったニコ生をご視聴頂きましたみなさまも、ありがとうございました。至らぬ点も多かったのではと思っておりますが、多少なりともイベントの雰囲気を感じて頂けたのではと思います。
GREE Tech Talkは今後も活動を続けて参りますので、どうぞよろしくお願いします。
参考
togetter:GREE Techtalk#6 - Practical Go -
公式サイト:GREE Tech Talk #06『Practical Go』
ATND:GREE Tech Talk #06「Practical Go」- #greetech06 -