【DeNA.go #3】Go活用事例やパフォーマンスチューニングの話聞いてきた
DeNAさん主催のGo勉強会
DeNA.go #3
初参加です!
ビールとお弁当もらいました。
そしてなんとなんと
k8sの技術書をいただいちゃいました!!!
もちろんステッカーもありましたよ👍
1. [Go活用事例]安全運転支援サービスを支える運用サイト
登壇者:@suhirotaka さん
オートモーティブ事業本部スマートドライビング部システム開発グループ
主題
管理画面をGoで作成
Railsで作ってるものをGoで作る理由
- 実証実験時はスピード重視でRails
- 本サービスはパフォーマンス重視でGo
順次Goに書き換えていく
Goのフレームワーク
GoのWAF(Web Application Framework)には
- フルスタック・MVC
- ミニマル・高速
の2種類がある
この辺の話は、僕の旧ブログ にもいろいろ書いているのでどうぞー
DeNAではフルスタック・MVCを選択
GoにおけるフルスタックなWAF
- Beego:採用!
- Revel:開発が止まってきている
- Iris:プロジェクトの運用がうまくいっていないようだった
Beego
- フルスタックのMVCフレームワーク
- ORMまでついてる
- セッション管理、ロガー、キャッシュなどのライブラリがいろいろついてるけど、全てモジュール化されていて、部分的に他のライブラリを使うことができる
- Railsライクなフレームワーク
- Railsのbefore/after_actionに相当するものもある(Prepare(), Finish())
ライブラリ
使用ライブラリはこちら
こういうの教えてくれるのめっちゃ嬉しい
- ORM:GORM
- ロガー:logrus
- PDF生成:gopdf → 日本語もきれいにでるので最高にクール
- 画像生成:gg
- バーコード生成:Barcode
2. WebシステムのパフォーマンスとGo
(写真撮り忘れた…)
登壇者:(@karupanerura) ゲーム・エンターテインメント事業本部ゲーム事業部Publish統括部共通基盤部アライアンスシステムグループ
Webシステムにおけるパフォーマンスとは
たくさんリクエスト処理できる かつ リソース消費が少ないのが
システム全体で見たときの理想的なパフォーマンス
パフォーマンスチューニングのいろいろ
詳しいチューニング方法はこちら
この中で初めて知ったものをピックアップ↓
◎ Server Sent Events
- HTTPコネクションを持続させる
- WebSocketより扱いが簡単らしい
バファリングの諸注意
結局リソースを消費していることに違わないので、メモリ管理はちゃんとしないといけない
Q&A
Q. sync.Pool でメモリ効率は良いがメモリは消費していくとは?(該当スライドページ )
A. Poolが居続けるからメモリ消費するよって話
Q. SetMaxOpenConnsの数ってどうやって決めるのがいい?
A. DBへのコネクションがどれくらいかとかを可視化して、そのデータに基づいて大きすぎず、小さすぎずの数を探していく(最終的には手探り)
Q. バッファリングの使い所
A. バッファリングよりシャーディングで対応できることが多い
シャーディングで対応した場合、アプリケーション(実装)がシンプルになる