Go Conference 2019 Spring - 2019年5月18日 参加レポート
https://gocon.connpass.com/event/124530/
こちらに参加してきましたので、ご報告します!
// 場所
リクルートライフスタイル本社
東京都千代田区丸の内1-9-2 グラントーキョーサウスタワー
よかったセッション
H1 (S): Hacking Go Compiler Internals 2
概要
Since the previous talk at Go Con 2014 Autumn, lots of things in the internals have changed. In this talk, I will try to give an overview of Go compiler internals and update the information as much as possible, along with my new hacks.
資料
今回
https://speakerdeck.com/moriyoshi/hacking-go-compiler-internals-2nd-season
前回
https://www.slideshare.net/moriyoshi/hacking-go-compiler-internals-gocon-2014-autumn
感想
このセッションでは、Golang のソースコードが機械語になるまでのステップ、要はコンパイラの動きを紹介されていました。 大きく分類して 11 ステップあり、ざっくり要約すると下記のステップです。
1.コードをトークンに分割
2.構文木に構築
3.型チェック
4.インライン化
5.中間言語(SSA)の生成
6.機械語の生成
正直、高級言語ばかり使っていたので、機械語に近い低級言語の知識が乏しい私ですが、 今回のお話は、そういった初心者でも分かりやすく説明されていました。 この話を聞いて、純粋に疑問に持ったこととして「どこに最も時間がかかるのか」でした。 ちょうど、同じ疑問を持った方が質問されていて、回答として「型チェック」だそうです。 実際に調べるためのツールが、golang の benchmark があるみたいなので、こちらを使って チューニングをすることができます。簡単なコードを書いて、試してみたいなと思いました。
A4 (S): Design considerations for container-based Go applications
概要
Go 言語でのアプリケーション開発で、特にコンテナを前提とする場合の設計考慮点について話します。 例えば、Go 言語で API を開発する場合、コンテナとして動かすことを前提とするケースが多いと感じます。コンテナベースで動かすことを前提とした場合、コンテナイメージ作成・アプリケーション監視において、考慮すべき点が出てくるでしょう。このトークでは、Go 言語での実装にまで踏み込んだ上で、コンテナベースアプリケーションにおける設計の考慮点について話します。
資料
https://speakerdeck.com/hgsgtk/design-considerations-for-container-based-go-application
https://www.redhat.com/ja/resources/cloud-native-container-design-whitepaper
感想
Golang の話というより、コンテナで開発する上での Tips の話でした。 Tips は3つ紹介されていて、「Configuration」「Logging」「Monitering」です。 どれも、資料にあるベストプラクティスに沿った方法で、良い手法だなと勉強になりました。
・Configuration
設定情報をソースコードで管理するのではなく、環境変数を使うこと
→ 本番/検証等でもソースが変わらない
・Logging
ファイルに出力するのではなく、ストリーミングし外部サービスに流す
→ コンテナを使い捨てしやすくなる
・Monitering
ヘルスチェックのエンドポイントを提供する
→ 外部サービスと連携しやすくなる
他にもベストプラクティが資料に載ってあるので、時間があるときに読んでみたいなと思います。
B8 (L): CPU, Memory and Go
概要
基本的な CPU やメモリを簡単に触れ、Go の最適化、コンパイラの最適化、Go で実装したときの CPU やメモリの振る舞いを紹介します。 またこれら最適化の様子やパフォーマンスを実際に Go の標準ツールを使いながら確認していきます。
資料
https://speakerdeck.com/sonatard/cpu-memory-and-go
感想
Golang におけるパフォーマンス・チューニングについて勉強になりました。 Golang だけの話なのかわかりませんが、コーディングする際に気にしたほうが良いと思います。
・動的配列を使うのではなくて、静的配列を使う
→ 動的配列だとメモリ確保のコストが高くなるので、遅くなってしまう
・環境変数を使うのではなくて、定数を使うこと
→ 実行時にならないと処理が決まらず、コンパイラの最適化がされない
・メモリに割り当てる際は 8byte ずつで割り切れるようにすること(64bit の場合)
→ 隙間があった場合、パディングが発生して遅くなる(メモリアライメント)
そもそも低レイヤーについて全くわからない人なので、 CPU と Memory について知れてよかったです。
全体的な感想
Golang のセミナーに初めて参加しました。 スポンサーの話を聞いていると、Golang を採用した理由は、 どの企業も「パフォーマンスの良さと、学習コストの低さ」 という理由が多かった印象があります。 また、Docker や Kubernetes が Golang で作られていたりと、 Golang はドンドンと人気になっていく言語なのかなと期待しています。
また、スポンサーの中で「既存システムを Golang に再構築した」や 「Golang の知識を得るために勉強会を開催した」など、各社 Golang へ 積極的に活動を試みていることをお聞きしました。
反省
Google Team である Katie Hockman の speaking が英語だったために、ほとんど聞き取ることができませんでした。 実にもったいないと感じました。
※ 資料まとめ https://engineer-fumi.hatenablog.com/entry/2019/05/18/172000
シェアしよう
関連するタグ
- GDG DevFest Tokyo 2019に参加したら、Webの未来にワクワクした
- Cloud Native Days Tokyo 2019 -2019年7月22-23日参加レポート
- 【増枠】Frontend de KANPAI! 7 - Going on 令和 - 2019年7月19日参加レポート
- AWS Summit Osaka 2019 2019年6月27日参加レポート
- 【増枠】Mix Leap Study 45 - Google I/O、WWDCまとめて報告会! 2019年6月15日参加レポート
- 【大阪・梅田】Kubernetes Meetup Tokyo 19 大阪サテライト- 2019年5月31日参加レポート
- 【大阪】BMXUG勉強会 -Kubernates体験&Watson Discovery入門- 2019年3月27日参加レポート
- 【大阪】GCPUG Kansai 〜 Cloud Next Extended ~ - 2019年5月14日 参加レポート
- Algolia Community Party in 京都 - 2019年5月10日 参加レポート