golang.tokyo #5 にブログ参加枠で参加
〜 GCPUG Tokyo さんとの共同開催です 〜
遅くなってすみません…
時間経ってしまった割に単なるメモ書きです
訂正箇所がありましたらご連絡いただけますと幸いです
吉海 将太 / 株式会社カブク
ナラトドン 鹿
GAE とは
- Google のインフラを使えるのがメリット
- なぜ GAE なのか?
- インスタンススピンアップが早い
- Go は圧倒的に早い
- GAE の種類
- Standard Environment
- Flexible Environment
- Flexible は若干遅い
- Flexible は出来る事が多いけどデメリットが多い
- Standard Environment (SE)
- 基本的にオートスケール
- モニタリング
- バージョン管理
- TaskQueue
- SDK
- Flexible Environment (FE)
- Standard Enveronment
- Flexible Environment
- カブク社での構成例
- 3D を利用したプロダクトが多い
- SE, FE 両方利用
- SE は 60 秒でタイムアウトしてしまう
- TQ 挟んでも同じ
- FE は TQ が使えない
- FE は LB として利用
- dispatch を利用している
- 辛かったこと
- class がない
- 不要な import で動かない
- mock がやりにくい
- SE で FE 向けの package が動かない
- 良かったこと
- 資産があれば FE でも良さそう
- gofmt
- 型定義いいね
- goroutine いいね
- gophaer かわいい
- kabuku 開発ブログ Developers' Blog | 株式会社カブク
GAE/Go の勘どころ
- GAE/Go の勘どころ // Speaker Deck
- GCPUG の Slack に入ってね
- heroku と同じ感覚で触るとげっそりする
- SE が基本
- ネットワークの制約等がある際は FE (NAT gateway とか)
- 一時ファイルも FE を使う
- 1.8 来るかも
- Cloud Datastore
- KVS
- 設計力が試される…
- Cloud SQL
- Managed MySQL/PostgreSQL
- 東京リージョンの latency 問題も解決済み
- Think Web【技術書典2新刊】 - TechBooster - BOOTH(同人誌通販・ダウンロード)
- Cloud SQL
- 同時接続数が最大 12 個
- Vendoring について
- プロジェクトベースになる
- GB を使う
- Configuration について
- The Twelve-Factor App https://12factor.net/
- Test のときは、direnv を使おう
- わかめ@TypeScript味 on Twitter: “僕はappengineの場合現在のAppIDが取得できるのでそれがunittestだったら処理分岐するみたいなコード書いちゃってる(良いとも悪いとも言い難い #golangtokyo”
- Deploy
- Traffic migration
- LB の向き先を変えるようなもの
- 10% 振り分けるとかも出来る
- Traffic migration
- Monitoring
- Stackdriver が一通りやってくれる
- 1.8 早く来い!
- Goroutine どのくらい使ってる?
- Koki Ide on Twitter: “GCPUG内でも歩くドキュメントと呼ばれている@sinmetal さん「GoもGAEも詳しくないんですが〜」#golangtokyo”
- taskqueue を投げる部分でだけ使っている
- spombe on Twitter: “SEはCPUが1つだけど、Goroutinはどのくらい使っているの? ANS:データストア、タスクキューのときくらい。下手に使っても早くならない。遅くなる可能性。 #golangtokyo”
- kiyo on Twitter: “SEでゴルーチンが効果的に使われているかと言うのを確認するときにはStackdriver Traceでみるとzipkinみたいに細かく見れるので便利。 #golangtokyo”
- cron.yaml でスケジューリングしてタイムアウトを避けている
LT
- https://www.slideshare.net/pospome/datastorego-struct
- Datastore のデータ構造の設計やレビューでは Kind に持たせる値ではなく、値が持つ振る舞いと特性も一緒に考えた方がいい
- わかめ@TypeScript味 on Twitter: “Scopeに併せてstruct切るのは確かに良さそうかもしんない #golangtokyo”
- わかめ@TypeScript味 on Twitter: “Datastoreを使う上でネストしたstructは自動生成系ツールとの相性が悪い可能性があるのでバッドプラクティスだよ論者です #golangtokyo”
- timakin on Twitter: “DataStoreは保存するときにそれ用のEntity定義してるから、完全にそのpackage以外のstructからは区別して使ってる #golangtokyo”
- 菊練りが得意なエンジニャー on Twitter: “srcとtypeで保存しちゃうかも #golangtokyo”
- pospome on Twitter: “自動生成は考えてなかった。たしかに、相性悪そう。 https://t.co/rSX5qNLdo9”
- Context アンチパターン
- Contextアンチパターン // Speaker Deck
- 俺がアンチパターンだ!
- 実例
- struct に custom context
- repository in context
- わかめ@TypeScript味 on Twitter: “contextが辛そうという話の前にechoが辛そうという印象になった…(今は改善されてるのかもしれないけど #golangtokyo”
- GoDoc context - GoDoc
- GoDoc の教えを守れ!
- わかめ@TypeScript味 on Twitter: “requestにContext入ってないけどrequestからContext出せると思うんだけどそこなんか区別してるのなんでやろ? #golangtokyo”
- そな太 on Twitter: “何故Contextを構造体に含めてはいけないかはGoogleの @Sajma 氏が答えてます https://t.co/lb1mTLCQUa #golangtokyo”
- timakin on Twitter: “辛いです…前は標準のcontext使ってたのにいつの間にかecho独自のcontextに変わった今は特に… https://t.co/CT4b5DTirv”
- ライブコーディング by tenntenn
- AST の話しかしていない
- 変数の使用箇所を調べたい
- ast.Inspect
- ast.Ident
- ast.Node