Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TIPSTARを支えるCloud Spanner
Search
MIXI ENGINEERS
PRO
October 18, 2025
Technology
1
40
TIPSTARを支えるCloud Spanner
会津大学の学生団体「Zli」が主催するLT大会に参加し、MIXIのエンジニア職採用・技術文化に関する企業PRを実施した時の資料です。
MIXI ENGINEERS
PRO
October 18, 2025
Tweet
Share
More Decks by MIXI ENGINEERS
See All by MIXI ENGINEERS
競輪・オートレース配信を支える画音監視 - 長距離伝送・配信におけるIPベースMultiview活用事例
mixi_engineers
PRO
0
44
インフラ室事例集
mixi_engineers
PRO
2
480
価格だけじゃない、トランジット調達先の選定基準を語るBoF
mixi_engineers
PRO
1
19
モンストを支えるインフラ技術
mixi_engineers
PRO
1
750
ルールベースからMLへ みてね写真プリント自動提案の活用事例
mixi_engineers
PRO
1
130
SoccerNet GSRの紹介と技術応用:選手視点映像を提供するサッカー作戦盤ツール
mixi_engineers
PRO
1
350
2つのフロントエンドと状態管理
mixi_engineers
PRO
5
300
月間4億メディアの画像解析を救え!みてね発・オンデバイスMLで挑む圧倒的コストカット作戦
mixi_engineers
PRO
2
340
Google Agentspaceを実際に導入した効果と今後の展望
mixi_engineers
PRO
4
1.8k
Other Decks in Technology
See All in Technology
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
0
190
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
160
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
990
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
660
New Relic 1 年生の振り返りと Cloud Cost Intelligence について #NRUG
play_inc
0
230
フィッシュボウルのやり方 / How to do a fishbowl
pauli
2
380
アラフォーおじさん、はじめてre:Inventに行く / A 40-Something Guy’s First re:Invent Adventure
kaminashi
0
140
SREが取り組むデプロイ高速化 ─ Docker Buildを最適化した話
capytan
0
140
20251203_AIxIoTビジネス共創ラボ_第4回勉強会_BP山崎.pdf
iotcomjpadmin
0
140
TED_modeki_共創ラボ_20251203.pdf
iotcomjpadmin
0
150
Amazon Connect アップデート! AIエージェントにMCPツールを設定してみた!
ysuzuki
0
140
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
230
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
310
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
410
Are puppies a ranking factor?
jonoalderson
0
2.4k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
31
Designing for Performance
lara
610
69k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Raft: Consensus for Rubyists
vanstee
141
7.3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
0
63
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
99
Highjacked: Video Game Concept Design
rkendrick25
PRO
0
250
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
120
Transcript
©MIXI TIPSTARを支える Cloud Spanner 2025/10/18 株式会社MIXI 若松丈人
©MIXI 2 自己紹介 2023年度に新卒として入社。 入社から2025年8月まで TIPSTAR のバックエンド開発・運用に携わる。 2025年8月から mixi2 のバックエンド開発
若松丈人 登録してね ->
©MIXI 会津若松
©MIXI 僕と親和性が高そうな土地ですね
©MIXI 5 今回お話しすること TIPSTAR を支える Cloud Spanner
©MIXI 6 TIPSTAR とは 全国の公営競技(競輪/オートレース)にネット投票できるサービス
©MIXI 7 Cloud Spanner とは NewSQL
©MIXI 8 New SQL とは RDB のトランザクション特性(ACID特性)を持ちながら NoSQL のように水平スケール可能なDB
©MIXI 9 なぜCloud Spannerが必要だったのか リリース前(開発初期)は Cloud SQL で開発されていたが、大量の r/w が予想されCloud
Spanner へ 1. 定常的なユーザーアクセスに伴う r/w(read メイン) 2. レースの度に数万〜数十万件のデータの r/w(write メイン) 朝のレース(8時30分ごろ)から深夜のレース(0時前後)まで 10〜20 分間隔で発生
©MIXI 10 なぜCloud Spannerが必要だったのか リリース前(開発初期)は Cloud SQL で開発されていたが、大量の r/w が予想されCloud
Spanner へ 1. 定常的なユーザーアクセスに伴う r/w(read メイン) 2. レースの度に数万〜数十万件のデータの r/w(write メイン) 朝のレース(8時30分ごろ)から深夜のレース(0時前後)まで 10〜20 分間隔で発生 2024年末に開催された競輪グランプリ(1年で1番大きいレース) - 発生したデータ書き込み:100万件以上 - 車券データ - ミッションデータ - ボーナスデータ - etc…
©MIXI Cloud Spanner すごい
©MIXI 12 なぜRDB だと水平スケールが難しい? RDB ・読み込み負荷:リードレプリカを増やして分散可能 ・書き込み負荷:マスター1台に集中
©MIXI 13 なぜRDB だと水平スケールが難しい? RDB ・読み込み負荷:リードレプリカを増やして分散可能 ・書き込み負荷:マスター1台に集中 書き込み用のノードを追加すると整合性を担保するための課題が発生 ・どの更新が最新なのか ・どのノードを正とするのか
©MIXI 14 なぜRDB だと水平スケールが難しい? RDB ・読み込み負荷:リードレプリカを増やして分散可能 ・書き込み負荷:マスター1台に集中 書き込み用のノードを追加すると整合性を担保するための課題が発生 ・どの更新が最新なのか ・どのノードを正とするのか
分散トランザクションなどで解決することも可能だが、運用が複雑に -> データの整合性の担保と水平スケールはトレードオフ
©MIXI 15 Spannerの仕組み Split ・テーブル全体をキー範囲で自動的に分割したもの ・各 Split 単位でディスク上に配置され、レプリカを持つ ・Split 単位で読み書き可能
CREATE TABLE Singers( SingerId INT64 NOT NULL PRIMARY KEY, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ); 図引用元: Google Cloud 公式ドキュメント『Schema and Data Model』
©MIXI 16 Spannerの仕組み UPDATE Singers SET FirstName = “xxx” WHERE
SingerId = 1 Split A Zone A (Key 1–3) Application Spanner Server Split B Zone A (Key 4–5) Split A Zone B Split A Zone C Split B Zone B Split C Zone C
©MIXI 17 Spannerの仕組み UPDATE Singers SET FirstName = “xxx” WHERE
SingerId = 1 Split A Zone A (Key 1–3) Application Spanner Server Split A Zone B Split A Zone C 1. Leader が対象キー範囲にロックを取得 2. Leader が更新を follower にブロードキャスト 3. follower はロックを取得できたかをリーダーに返す 4. 全体で過半数のロックが取得できた場合、 Leader がコミット可能と判断
©MIXI 18 Spannerの仕組み TrueTime API 「現在時刻の不確実性( ±ε)」を含む時間範囲を返す Spanner は全てノード間で時間のズレが ±7ms
の範囲内に抑えられている。 → リーダーの Split が動作しているノードで取得した時刻 ±7ms の範囲内に、クラスタ内すべてのノードの実際 の時刻が収まっていることが保証されている ノードAの現在時刻 時間軸 ノードA ノードB ノードC ±7ms 以内 ノードBの現在時刻 ノードCの現在時刻
©MIXI 19 Spannerの仕組み TrueTime API で取得した時間範囲のうち最も未来の時間が経過してからコミットすることで どのノードから見ても「すでに確定済み」として見える → ノード間の整合性問題を解決 ノードAの現在時刻
時間軸 ノードA ノードB ノードC ±7ms 以内 ノードBの現在時刻 ノードCの現在時刻 コミット
©MIXI Cloud Spanner 面白そう https://techbookfest.org/product/2URkJbKFnJ9axX3vmmqNvK?productVariantID=8rXyaFRiBNwt9StPJFTk7c
©MIXI 興味を惹かれた方は直接見に来てください Welcome Dive into MIXI