Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TIPSTARを支えるGoとGoogle Cloud
Search
flatfisher
April 25, 2022
Programming
1
500
TIPSTARを支えるGoとGoogle Cloud
ミクシィにおける Go 活用事例 〜 #gocon 2022 Spring 前夜祭(非公式)〜
https://mixi.connpass.com/event/245232/
の発表資料です
flatfisher
April 25, 2022
Tweet
Share
More Decks by flatfisher
See All by flatfisher
DialogflowとCloud Functions で作る Google アシスタント アクション
flatfisher
5
1.5k
Other Decks in Programming
See All in Programming
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
240
rails newと同時に型を書く
aki19035vc
5
710
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
940
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
26
6k
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.2k
20241217 競争力強化とビジネス価値創出への挑戦:モノタロウのシステムモダナイズ、開発組織の進化と今後の展望
monotaro
PRO
0
290
カンファレンス動画鑑賞会のススメ / Osaka.swift #1
hironytic
0
170
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
240
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1.3k
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
190
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
300
watsonx.ai Dojo #6 継続的なAIアプリ開発と展開
oniak3ibm
PRO
0
170
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Statistics for Hackers
jakevdp
797
220k
Facilitating Awesome Meetings
lara
51
6.2k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Raft: Consensus for Rubyists
vanstee
137
6.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
Designing for humans not robots
tammielis
250
25k
Bash Introduction
62gerente
610
210k
Side Projects
sachag
452
42k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
Transcript
©TIPSTAR TIPSTARを⽀えるGoとGoogle Cloud
©TIPSTAR TIPSTARとは TIPSTAR TIPSTARとは、365日配信されるライブ動画と、 競輪・新KEIRIN PIST6・オートレースのネット投票を、 基本無料で、友達と一緒に楽しむことができるサービスです。 ※2022年4月現在
©TIPSTAR TIPSTAR 各場の映像 AI による 映像編集 ユーザ・決済基盤 競輪・オートレース 認証・認可・決済 etc.
レース情報取得・投票 レース情報取得・投票 ユーザ
©TIPSTAR TIPSTARの使⽤技術
Go
©TIPSTAR 使⽤技術 Web Typescript React Redux Next.js styled-components iOS Swift
RxSwift RxFlow Analytics Google Analytics Looker Public Cloud AWS - MediaServices Google Cloud - GKE - GAE - Cloud Spanner - Memorystore - Pub/Sub - Cloud Run - Cloud Functions - Cloud Storage - Cloud Logging - BigQuery Firebase - Authentication - Cloud Messaging - Remote Config - Firestore CI/CD CircleCI Bitrise CloudBuild Protocol gRPC FTP HTTPS IDL OpenAPI Protocol Buffers Android Kotlin Coroutines/Navigation Components MotionLayout ExoPlayer Go echo Ruby on Rails Server Unity Unity as a Library
©TIPSTAR アーキテクチャ Load Balancer Cloud Load Balancing TIPSTAR API Kubernetes
Engine レース情報API Kubernetes Engine レース情報API Kubernetes Engine レース情報API Kubernetes Engine レース情報取り込み Kubernetes Engine レース情報取り込み Kubernetes Engine レース情報取り込み Kubernetes Engine Cloud Spanner Monitoring Logging Error Reporting Workers Kubernetes Engine Functions Cloud Functions webhook Cloud Run Messages Pub/Sub Resource Cloud Storage Scheduler Cloud Scheduler BigQuery Dataflow 外部サービス CircleCI GitHub アプリケーション デプロイ
©TIPSTAR 求められる要件 • メンテナンスは基本なし ◦ 過去のメンテナンス歴は障害時と決済基盤入れ替え時の2回のみ • 競技の結果を素早くユーザーに届ける ◦ 払戻金周りなど正確に早く届ける必要がある
◦ 無料メダルで購入されている物もあるので数が多い • ミッション達成やボーナス付与など多くの書き込みトランザクションがある ので設計時に負荷懸念がないかなど、考慮する必要がある
©TIPSTAR Goの採⽤背景 • Goを使ってみたいというメンバーのモチベーションが高かった • 会社としてもGoの採用事例にもつながる • Google Cloudを使う前提だったため、Go製のクライアントライブラリが豊 富などメリットが大きかった
©TIPSTAR Goを使って良かったなと思うこと • 言語仕様がシンプルなのでGoの業務経験がないメンバーも比較的早くプロジ ェクトのキャッチアップができている • コード量が多くなることがあるが読みやすい ◦ Goは筋肉で書く言語 •
Google Cloudのクライアントライブラリや参考コードが多い
©TIPSTAR TIPSTARリリース後に⼊れたGoの新しめの機能 • Go 1.16からリリースされたgo:embed ◦ ファイル読み込みと変数へのセットが2行のコードでセット可能 ◦ BigQueryにデータをエクスポートする際のschemeファイルの取り込み に使用
• Go 1.17からリリースされたtesting T.Setenv ◦ 環境変数をmockできる機能 ◦ テスト終了後に定義した環境変数が破棄される、環境変数を汚さない
©TIPSTAR GoとGoogle Cloud
©TIPSTAR レース結果反映の話 • レースの勝ち負けや払戻金返金処理など素早く届ける必要がある • 無料購入分を含めると1レースで処理する車券の量はとても多い • さらに車券の結果だけではなく、ボーナス付与、ミッション達成、通知など 多くの機能が車券反映後に処理する •
処理をユーザー単位で分散し、数分で全ての処理を終わらせる • 処理の途中でエラーが起きても自動でリトライする仕組みが必要
©TIPSTAR 複数で処理 レース結果取得 ⾞券反映のアーキテクチャ レース情報 外部サービス レース情報API Kubernetes Engine Trigger
Pub/Sub 複数で処理 未反映ID Pub/Sub 車券反映 Kubernetes Engine 未反映車券を検索 Cloud Functions 車券反映 Kubernetes Engine 車券反映 Kubernetes Engine 複数で処理 ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine 未反映ID Pub/Sub
©TIPSTAR 複数で処理 レース結果取得 ⾞券反映までの流れ① レース情報 外部サービス レース情報API Kubernetes Engine Trigger
Pub/Sub 複数で処理 未反映ID Pub/Sub 車券反映 Kubernetes Engine 未反映車券を検索 Cloud Functions 車券反映 Kubernetes Engine 車券反映 Kubernetes Engine 複数で処理 ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine 未反映ID Pub/Sub
©TIPSTAR ⾞券反映までの流れ① • レース結果がきた時に専用のPub/Subトピックに対象のレースIDをPublish
©TIPSTAR 複数で処理 レース結果取得 ⾞券反映までの流れ② レース情報 外部サービス レース情報API Kubernetes Engine Trigger
Pub/Sub 複数で処理 未反映ID Pub/Sub 車券反映 Kubernetes Engine 未反映車券を検索 Cloud Functions 車券反映 Kubernetes Engine 車券反映 Kubernetes Engine 複数で処理 ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine 未反映ID Pub/Sub
©TIPSTAR ⾞券反映までの流れ② • Cloud Functionsが起動し、そのレースで車券反映が済んでいないUserIDを 抽出 ◦ Cloud Spanner全ノード検索になるが専用のINDEXがあるのと呼び出し 頻度は少なめなので負荷の懸念はない
• 抽出後RaceIDとUserIDを別の専用Pub/SubトピックにPublish
©TIPSTAR 複数で処理 レース結果取得 ⾞券反映までの流れ③ レース情報 外部サービス レース情報API Kubernetes Engine Trigger
Pub/Sub 複数で処理 未反映ID Pub/Sub 車券反映 Kubernetes Engine 未反映車券を検索 Cloud Functions 車券反映 Kubernetes Engine 車券反映 Kubernetes Engine 複数で処理 ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine ボーナス付与や通知 Kubernetes Engine 未反映ID Pub/Sub
©TIPSTAR ⾞券反映までの流れ③ • RaceIDとUserIDを受け取ったWorkerがユーザー毎の車券反映を行う ◦ このWorkerは複数ありこの時点で分散されている • ボーナス付与や通知は別Workerがあり、さらにUserIDとRaceIDをPublish ◦ 別Workerの理由は他Userの車券反映に依存している処理が含まれるため
©TIPSTAR Cloud Pub/Subのメリット • 途中どこかの処理でエラーが起きたとしても何度もリトライできる • Pub/SubへのPublishはコマンドラインからもでき、強制的にどこかの Workerを発動させることも可能
©TIPSTAR 本⽇のまとめ • TIPSTARは24時間 365日稼働する基本メンテナンス無しのサービス • TIPSTARのサーバーサイドではGo言語とGoogle Cloudを採用している • Go言語はキャッチアップが比較的容易でGoogle
Cloudとも相性がいい • レース結果の反映は正確に素早く終わらせる必要があり、分散して処理を実 行するためにGoogle Cloudのプロダクトを活用している ※2022年4月現在