MERYサーバーサイドエンジニアのgamiです。2019/10/28(月)に墨田区みどりコミュニティセンターで開催されたGo Conference 2019 Autumnへ参加してきました。聴講した中から、いくつか印象にのこったセッションについて、感想をまとめていきたいと思います。
Go GC algorithm 101
Wantedly内定者の@taxio_techさんの発表です。GCについて40分語れる学生は強いなと感じました。Goで使われているConcurrent Mark & Sweep GCについて、歴史から実装の詳細まで押さえつつ、とてもわかりやすくまとめられていました。
最初に実装されたMark & Sweep GCでは、GC中にオブジェクトを生成/更新できないため、実行時の遅延が発生しやすくなっていました(これをStop the Worldというそうです。かっこいい)。並列してMark & Sweepできる仕組みを導入することで、Go1.5ではそれまで数秒かかることがあったGCがほぼ一瞬で終わるようになったとのことです。今後は世代別GCの導入も検討されているそうです。
Goで活用されている並列化を支える仕組みとして3色markingやWrite barrierなどが紹介されましたが、これらの詳細は知らなかったので、勉強になりました。
OSS Performance Tuning Tips
@orisanoさんによるOSSツールを使っていてパフォーマンスに課題を感じた時にどのようなパッチを送ればよいかというセッションです。orisanoさんはコンテナ系の勉強会でよく登壇されている方で、いつも濃い話をされています。
利用しているOSSツールに対して改善してコントリビュートするというのは、自分にとってこれまでなかなか敷居が高かったため、今回のセッションはとても刺激を受けました。行動していく中で知見が深められていくこともあると思うので、チャレンジしていきたいと感じました。冒頭でまずは不満を認識することが行動に繋げていく上でのきっかけであると述べられており、まずはここを意識していきたいと思います。
Go で”超高速”な経路探索エンジンをつくる
DeNAでタクシー配車サービスMovを担当されている井本さんによる、経路探索の話です。ダイクストラ法による経路探索の基本的な話から、Priority Queueなどを実装してダイクストラを高速化していく話に発展していきます。Priority Queueを具体的に実装していくところが詳細に解説されており、ためになりました。
実際にチューニングしていく部分の話ではsliceやmapなどのよく知っている世界のチューニングに帰ってきてくれていて、興味深く感じました。基本が重要なのだなと思いました。
Schema first approach to GraphQL server development in Go
MonotaROのYouichi FUJIMOTOさんによるGoでGraphQLサーバーを構築した話です。MonotaROは工具や工業用資材のECサイトですが、GoやGraphQLを使っていたとは知らなかったので、驚きました。GraphQL部分の解説もよかったのですが、GraphQLスキーマからgo generateを使ってResoloverやModelを自動生成するというところがとてもよかったです。
MERYでもGoを活用してgRPC APIを構築していますが、Protocol Buffersのスキーマを修正したあとで、同じような修正を複数箇所で行わないといけないケースが多く同じような課題を感じていました。ちょうどgo generateを活用していきたいと考えていたところだったので非常に参考になりました。
Write Container Runtime in Go
@towocyさんによるGoでシンプルなコンテナランタイムを実装してみて、コンテナを理解しようというセッションです。towocyさんも学生で、Wantedlyのスカラシップを利用してGo Conferenceに参加されたそうです。
OCI Runtimeの標準仕様に沿った挙動をさせることでコンテナとしての振る舞いが可能になります。作ったコンテナをDockerで動作させることも可能ではあるが、Docker独自仕様の部分を実装する必要があるとのことでした。そのためデモは少し地味にはなっていましたが、中身はとても濃かったです。
最後に

参加者にはアイコン付きの名札が提供されました。会場内ではみんなこの名札をつけて歩き回っていて楽しい空間でした。このまま家まで帰ったところ、ちょうど幼稚園のプレ保育に通っている次男(たまに名札をつけるのを嫌がる)がとても喜んでくれたので、参加してよかったなと思いました。
機会があれば、今後もブログでカンファレンスのレポートを上げていきたいと思います。貴重なお話を聞かせていただいた登壇者の皆様や、運営の皆様に感謝します。