Go Conferenceに参加してき話
参加した経緯
wantedlyさんが応募していたスカラシップで参加しました!お金がない僕にとってありがたすぎました!笑
今回は僕が聞いたセッションのみですが特に面白いと感じたものを書いていこうと思います。
Microservices実装ガイド in Go at Mercari
メルカリとMicriservices
どのようにMicroservicesを実装しているのか
- Protocol Buffersの定義をしてサービスを実装する
- Protocol Buffersとは
- スキーマ言語のことでgRPCにおけるインタフェース定義に使用できる。
- メルカリではサービス間通信にgRPCを採用しているそう。
- Protocol Buffer定義
それぞれの開発者がProtocolBufferを作成した別リポジトリに自動生成する事で、自分の開発に専念できるのか!
- サービス実装の流れ
- テンプレートプロジェクトをcloneして名前をつける
- rm -rf .git
- git init
- サービスを頑張って作る
これに関しては僕はやったことないからわからないけど、それぞれ開発者が同じリポジトリでブランチ切るってのもいいんじゃないかと思いました。
- テンプレートプロジェクトについて
初めて聞いたOSSだったのでとても勉強になった。今度読んでみよう、、
作ってみていいところ、GOのよさ
- ネットワーク/ミドルウェアとの相性がいい
- 静的解析ツールで書き方を強制できる
- gofmt, go vet, golint, misspellなどなど
- シングルバイナリが動く
- チューニングしやすい(並列実行)
goにはgoroutineとかchannelとかがあるから並列実行が比較的簡単にできていい!
OpenCensus による APM の実現と、未来
なぜアプリケーションのパフォーマンスを測る必要があるか
- ユーザの体験がサービスの成長に大きく影響するから
- ユーザの体験とアプリケーションのパフォーマンスは密接に関係している
これは確かにそうだなーって思った。自分がサービス使っててレスポンス遅かったら使う気が...ってなる笑
APM
- アプリケーションパフォーマンス管理のこと
APMの実現のために必要なこと
- パフォーマンスおよびその改善に必要なデータの取得
- 取得したデータを可視化、活用できる基盤の構築
APMで取り扱う代表的なデータ
- Tracing
- response time
- Metrics
- RPM / resource usage
- Logging
- Error reporting
OpenCensusとは
またまたOpenCensusだ!流行ってるのかな笑
APM実装共通化
- データの収集(collector)と、変換 / 送信(exporter)の分離
- Cloud Providerはexporterだけ実装する。
- アプリケーションはデータを収集する部分を実装する
- 送信するデータを作成するwrapper libraryの利用
- 手動でデータの作成を行う
実際にデータを収集しての調査の大切さとかが改めてわかった。APMっていう概念の理解もできたのが大満足!
Practical Go Concurrency Design Patterns
プロセス
- いくつかの順序だった操作の集合体
- 循環して同じ処理をするものをプロセスでまとめれる
リソース
- Goでいうところの構造体やstructの中の変数
- os上のファイルシステムを表すオブジェクト
シリアライズ
- もしかしたら重なるかもしれないオペレーションを一列に並べる
Lock
- あるプロセスがロックを持っていたら、それに関連する他のプロセスがロックを持てない。
mutex
- ロックの所有権を表している。
goにはgoroutineというものがありますが、それを使って説明すると抽象的なものになってしまうということで、プロセスの部分からConcurrencyの概念を資料で解説してあるので理解が深まる!自分で並行処理書くときもお約束のようにしか書いていなくて実際に中でどういう処理が動いていたりするのかをあまり理解せずに使っていたけど、とてもわかりやすくて理解が深まった! ちなみに、先日Go言語による並行処理という本が出版されたのでそれを読んでもっと並行処理を理解したい!(本が積まれてるからまずはそれから読む、、、)
最後に
今回、初めてgo conferenceに参加して得られたものが大きかったです。改めてwantedlyさん、ありがとうございました!!