普段はRailsとかPHPでウェブサービスを作ったり保守してます。
パフォーマンスを求める処理とかWebAPIなどをミドルウェアのチューニングやキャッシュでやるのもやっぱり辛いよねって話が社内で上がってたのでようやく重い腰を上げまして、Goの勉強を本格的に始めようと思っていた矢先カンファレンスが開催されるっつーんで突撃したというわけです。
正直なところキャンセル待ちが出るほどのイベントなのにこんな素人が当選してしまったので懺悔も込めて資料とかまとめました。
キーノート
発表者 [Andrew Gerrand](Andrew Gerrand "https://twitter.com/enneff")
x/mobile gaming
ライブコーティングでランゲー作り始めた。
通常セッション
Goが支えるインフラストラクチャーサービス
発表者 @yosida95
Goで作ったサービス
-
Gehirn RS2 Plus
仮想マシンに常駐し、設定ファイル編集 コマンド実行 ユーザの環境をアップデートを行う箇所をGoで作成 -
Gehirn MTA
SMTPサーバをGoでフルスクラッチで作成
なぜGoを使うのか
- 標準ライブラリが充実している
- 並列処理を用意に記述出来る
- 複数の返り値 / exceptionがない
- そのため例外をつまみ損なうことがないので、エラーを必ず処理出来る
- バイナリファイル一つだけ配布するだけでユーザに配布しやすいし、デプロイするときもS3に配置してサーバがDLして完了
- スケールしやすい。
- デプロイしやすい、ネットワークサーバを書きやすい
- memberlist
- raft
Goはインフラサービスで生きる
-
大量のデーモン
配布・デプロイが用意 -
膨大な処理やリソース分散コンピューティング
クラスタリング -
ネットワークサービス
SMTP DNSが堅牢にかける
gomobileでピアノの作り方
発表者 @nobonobo
発表資料 [HOW TO MAKE THE PIANO](HOW TO MAKE THE PIANO "http://golang.rdy.jp/gomobile-piano/#/")
gomobileへの不満はアイコン付けたい、iOSへのビルドめんどい!
ビルドツール作った!
Middlewares for log-collection in Go
発表者 cubicdaiya
発表資料 [Introduce log collector in Go into production](Introduce log collector in Go into production "https://speakerdeck.com/cubicdaiya/introduce-log-collector-in-go-into-production")
Introduction to golang.org
発表者 @qt_luigi
告知
GDG Shikokuで講師募集中
golang.orgの紹介
https://golang.org
http://golang-jp.org
http://blog.golang.org
とかとかとか
Webフレームワーク比較
発表者 @najeira
フレームワーク
- Gin
- Echo
- Kami
- Goji
- Vibe
- Gocraft
- Gorrilla
- Martini
ベンチマークしてみた
Get/gopherを送ってHelo Gopeherを返す
(ns/op)
- Gin 734
- Echo
- Kami
- Goji
- Vibe
- http(標準モジュール)
- Gocraft
- Gorrilla
- Martini 5823
allocの値も計測していたけどやはりGinが一番だった。
まとめるとGinとEchoがパフォーマンス良いけど、結果は全部nsなのでGoすげぇ早い。
Ginは3年近く開発されているので、だいぶ枯れてきた印象。
おすすめのフレームワークを聞かれたらとりあえずGin使っとけ。
ISUCON戦記
発表者 @y_matsuwitter
発表資料
基本チューニング
GOMAXPAROCS
GOGC
text/template削除
UnixDomainSocket化
プロセスキャッシュ
初期データはdumpして起動時にデータ構造を非正規化を行いメモリ上へキャッシュ
データ長が大きいデータはメモリにのっけられないので、Redisに乗っけた
Go => MySQL間のシリアライズコスト削減
ISUCONに勝つために
サーバのチューニングはパズルみたいなもの
メモリやCPUを誰にどれだけ割り当てて計算コストを削るか
どの行為が一番スコア高いのかを判断しスコアの低い処理に対応時間を減らす
FINAL FANTASY Record Keeperを支えたGolang
発表者 @shibu_jp
発表資料
ゲーム内のマスターデータ(アイテムや必殺技やテキストなど)をGoogleDrive上のスプレッドシートで管理していて、これらをゲームサーバが使えるフォーマットに変換するツールをGoで作成している。
文字列のdiffを抽出してうまいことマージしてくれるモジュール面白そう。
GoライブラリAPIの変更を知る (Diff'ing Go library API changes)
発表者 @motemen
発表資料
メソッドの引数変更などを検知して、バージョンアップに対応出来るかチェックしてくれるツール、gompatibleを作った
go/typesを使って実装している
今後はgo/typesを使って実装しているとWebインターフェースを作りたい
個人的にRubyで同じ機能を満たす物がほしい...スクリプト言語だと引数の数くらいしか検知出来ないから難しいか...
実戦へのGo導入
発表者 @songmu
発表資料
資料を見れば全てわかる。すごい。
Goのレガシーコードと戦った話
発表者 @k_yokomi
レガシーコードとは理解できず、変更の難しいコードを指す俗語
レガシーコードの紹介
Goが悪いってわけじゃないよ
-
テストコードが無い
コードを変えるよりもまずテストコード書く -
ローカルファイルを読みまくる
ローカルファイルをS3にアップロード
保険としてローカルファイルは消さずにS3のファイル読めなかった場合に使う -
例外をにぎり潰す
ログに出そうぜ -
goroutineの乱用
パフォーマンス要求された上でのgoroutineなのか?
そもそも要求仕様から確認しなおして本当に必要なのか見直す。 -
社内共通ライブラリ的な共通パッケージ
API依存しているものはinternalに移動
改善のためにやったこと
金曜日をリファクタリングDayとする
CircleCIで自動テスト
Coverailsでカバレッジを可視化
gomockを導入
まとめ
Goでもレガシーコードが生まれる、ちゃんとテスト書こうぜ
GoBGP : yet another BGP implementation written in Go!
発表者 石田 渉
Border Gateway Protocolって何?
インターネットを動かすためのルーティングプロトコル
もともとインターネットで使われているプロトコルだったが、VM上やデータセンターのルーティングでもつかわれるようになっている。
なぜGoで書き直すか
GoBGP
ネットワークの運用が時代錯誤
APIが不順分のためネットワークを運用自動化を行おうとするとtelnetとexpectで頑張らなければならない。
http://www.slideshare.net/taijitsuchiya5
まとめ
今まで泥臭い運用が多かったネットワークの世界にビックウェーブが来る予感