Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SpoLiveの爆速開発を支えるGAE/Goノウハウ / Practice of GAE&Go supporting SpoLive super fast development

Df3136f800e7ed9931ed5f9f1afad935?s=47 mtskhs
September 17, 2019

SpoLiveの爆速開発を支えるGAE/Goノウハウ / Practice of GAE&Go supporting SpoLive super fast development

NTTグループ内の勉強会である、NTT Engineers’ Festa #3におけるLT資料。
スマートフォン向けのスポーツ解説アプリSpoLive(https://spo.live/)の開発で、バックエンドを担っている筆者による、GAEやGoによるノウハウの共有
GAEで開発・運用していて便利な機能として、スケールアウト・ミドル・監視・カスタムドメインやSSLについて紹介し、
Goのpackage構成や、拡張性・テスト容易性を考慮した実装、APIサーバーのloggingミドルウェアについて紹介する。

Df3136f800e7ed9931ed5f9f1afad935?s=128

mtskhs

September 17, 2019
Tweet

Transcript

  1. SpoLiveの爆速開発を支える GAE/Goノウハウ NTT Engineers Festa #3 Hisayuki Matsuki   Twitter:

    @matskhs
  2. about me • 松木久幸(@mtskhs) ◦ Backend Engineer / Gopher ◦

    NTT Resonant / NTT Communications ◦ EC => スポーツAI解説サービス(SpoLive) ◦ Agile (シリコンバレーで3ヶ月働いて体感した自立型組織のススメ) ▪ https://speakerdeck.com/matsu0228/organizationtheory-of-engineering ◦ Agile Testing Days 2018 レポート ▪ https://speakerdeck.com/matsu0228/report-of-agiletestingdays2018 2
  3. 3

  4. SpoLive ラグビー国際試合にも対応しました 4

  5. SpoLive Architecture • expo / Firebase / GCP+Go Go Compute

    Engine (GCE) App Engine (GAE) 5
  6. Contents • 話すこと ◦ #1 GAE について ◦ #2 実装パターン

    6
  7. #1 about GAE • 対応言語: Java, Node.js, Python, C#, .Net,

    Ruby, Go • StandardとFlexibleの2種類あるが、Standardについて触れる ◦ スケールアウト ◦ ミドルの運用不要 ◦ 監視まで提供されている ◦ カスタムドメイン+SSL 7 https://cloud.google.com/appengine/docs/whatisgoogleappengine?hl=ja
  8. #1 about GAE • サーバレス・スケーリング(瞬間スケールアウト) 8 https://speakerdeck.com/googlecloudjapan/deep-dive-into-google-cloud-technology?slide=31

  9. #1 about GAE • ミドルの運用不要 ◦ log: google.golang.org/appengine/log ◦ memcache:

    google.golang.org/appengine/memcache 9
  10. #1 about GAE • ミドルの運用不要 ◦ log: google.golang.org/appengine/log 10

  11. #1 about GAE • ミドルの運用不要 ◦ memcache: google.golang.org/appengine/memcache 11

  12. #1 about GAE • 監視もStackDriverで ◦ ログの監視 ◦ エンドポイントの監視 ◦

    (GCE) プロセス監視 / メトリクス監視 • Alert送信も選択肢豊富 12
  13. #1 about GAE • GAEだとサイト移転時のRedirectも楽々 ◦ カスタムドメイン+SSL ◦ Redirect Server

    by Go 13
  14. #2 implement pattern of Go • データ連携バッチ ◦ スポーツごとのデータソースからfirebaseへ保存する ◦

    optionでデータソースを指定できる ◦ firebase側のスキーマや、一般的なビジネスロジックは共通 化 14 . ├── main.go ├── Makefile ├── cmd/ # サブコマンド毎のmain処理 │ ├── root.go │ ├── rugby_**source1**.go │ └── rugby_worldcup.go ├── infrastructure/ # datasorce毎の具体処理 / firebase保存処 理 │ ├── firebase.go │ └── rugby_**source1**.go ├── usecase/ # ビジネスロジック / スキーマ │ └── rugby_entity.go └── testdata/ Clean Architecture 達人に学ぶソフト ウェアの構造と設計 https://www.amazon.co.jp/dp/B07FSBHS2V/ref=cm_sw_e m_r_mt_dp_U_89xFDbZSR01SJ
  15. #2 implement pattern of Go • 拡張性・テストコストを低くする実装を心がける 15

  16. #2 implement pattern of Go • logging ミドルウェア ◦ リクエスト毎のクエリ・処理時間のロギング

    16
  17. Summary • GAEだと、いろいろ楽 ◦ スケールアウト、ミドルの運用不要、監視、カスタムドメイ ン+SSL • 実装パターンの紹介 ◦ package構成

    ◦ 拡張性・テスト容易性を考慮した実装 ◦ loggingミドルウェア 17