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
UZOUにおけるAerospike
Search
muroon
June 08, 2023
Technology
0
260
UZOUにおけるAerospike
2023.6.7 Aerospike セミナーにおける登壇資料
muroon
June 08, 2023
Tweet
Share
More Decks by muroon
See All by muroon
GCにおけるパフォーマンス改善
muroon
0
840
go-athenaの大量データ取得を速くした方法
muroon
1
370
Goの静的解析を使用してAPI Doc Linterをつくる
muroon
0
71
Cloude Spannerの主キーの設計
muroon
0
49
Other Decks in Technology
See All in Technology
I tried making a solo advent calendar!
zzzzico
0
130
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
SES向け、生成AI時代におけるエンジニアリングとセキュリティ
longbowxxx
0
300
わが10年の叡智をぶつけたカオスなクラウドインフラが、なくなるということ。
sogaoh
PRO
1
260
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.1k
産業的変化も組織的変化も乗り越えられるチームへの成長 〜チームの変化から見出す明るい未来〜
kakehashi
PRO
1
310
あの夜、私たちは「人間」に戻った。 ── 災害ユートピア、贈与、そしてアジャイルの再構築 / 20260108 Hiromitsu Akiba
shift_evolve
PRO
0
420
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
410
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
21k
2025年 山梨の技術コミュニティを振り返る
yuukis
0
150
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
2k
テストセンター受験、オンライン受験、どっちなんだい?
yama3133
0
200
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
170
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
78
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
100
Six Lessons from altMBA
skipperchong
29
4.1k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
160
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Context Engineering - Making Every Token Count
addyosmani
9
590
Transcript
UZOUにおけるAerospike
自己紹介 Toyohito Murooka 室岡 豊人 株式会社SpeeeにてUZOUという広告配信システムの開発に従事 https://twitter.com/muroon01 https://github.com/muroon
UZOUとは • メディアに関連する記事や広告を配信するネイティブアド配信プラットフォーム • 2016年からサービスを開始しており7年目のプロダクト(Aerospikeの使用は2017年〜)
UZOの全体構成図
配信サーバーからのアクセス • 事前にデータ更新しておいてランタイム処 理のリソースアクセスはオンメモリと KVSへ のReadのみ ◦ オンメモリ(DBから定期的に取得) ◦ KVS(都度KVSから取得可能)
• Write処理は非同期で実施
Aerospikeに保存している主な内容 • コンバージョン情報 • 広告・記事などの配信候補の情報 • 広告に関する情報(予算・CPCなど) • 配信制御部分 なぜオンメモリではないのか?
• 上記の情報は更新後にすぐに取得できるように配信サーバーから都度取得する必要があるためKVSを使用 • オンメモリデータは一定時間間隔でDBから取得することになる(数百万TPS環境下では差分が大きい)
必要な性能と役割 性能 • read, writeともに数百万TPS以上 UZOUにおけるAerospikeの役割 • クラスタ型KVS • Data型としてはSetsのみ
なぜAerospike? リリース当初はDynamoDBを使用していたが、下記の問題点が発生 • DynamoDBを使用していて、Write性能、Read性能が低いことにより、UZOUのデータ量だとコスト(金銭的、処理的)が高く なってしまう • 局所的にスループット出したい場面で辛くなってきている ◦ DynamoDB Accelerator
(DAX)によりスループットの上では改善することも可能 ◦ ただしコストパフォーマンスに難あり • UZOUのデータ構造を扱うにはクエリの柔軟性が低い ◦ キーベースで取り出すのが厳しい ◦ UZOUのアプリデータのつくり上ではupdateしづらい ◦ 集計がない ◦ 10GBの隠れパーティション ▪ パーティションサイズを10GB以内にしなければならない • キーに対してアプリケーション側で手を加える必要がある • VPCの外にあるので、ネットワークレイテンシーの影響を受けやすい • プロトコルがhttp(もしくはhttps)のためコストが高い ※注意) • あくまでUZOUのデータ構造を扱う上での見解です • 2017年当時の見解ですので変わっている可能性があります
別のKVSを検討 AerospikeかRedis Clusterを検討 Aerospike Redis Cluster スケーリング 自動フェイルオーバー、自動データバランシングなどの機能を 持っており、ホリゾンタルスケーリングが容易。また、 Aerospikeは
データをメモリとSSDの両方に保存できるため、大容量のデータ を扱うことが可能。 ホリゾンタルスケーリングが可能で、データは複数のノード間で自 動的に分散される。ただし、データは主にメモリに保存されるた め、大容量のデータを扱う際にはメモリコストが高くなる。 レイテンシ メモリとSSDの両方でデータを保存でき、 SSDを使用した場合で も非常に高速な読み書き性能を発揮する。また、強力なインデッ クス機能を持っており、高速な検索が可能。 基本的にメモリ上でデータを扱うため、非常に低いレイテンシで高 速な読み書きが可能。ただし、データがメモリに収まらない場合、 パフォーマンスが低下することがある。 コストパフォーマンス メモリとSSDの両方でデータを保存できるため、データ量に応じて コストを抑えることが可能。 データがメモリに収まらない場合、コストが高くなることがある。
別のKVSを検討 最終的にはAerospikeを選択 • メモリとSSDの両方を使用するところが、Redisに比べてメモリ効率が良く、結果コストパフォーマンスが良い • オートシェーディング対応がされている
パフォーマンス • CPU ◦ 45% • メモリ ◦ 50% •
Read ◦ 47000 TPS • Write ◦ 42000 TPS • レイテンシ ◦ Read: 1ms以下 ◦ Write: 1ms以下
インフラ構成詳細 • EC2上にインストールしている • rolling updateではなく新インスタンス追加&旧インスタンス破棄方式 • 独自のUser-Defined Functionsの利用 •
予めconfigファイルも含みAMIを作成しておき、インスタンス作成時に利用 ◦ ノードの追加時も作成済みのAMIを使用する • service_threadsは5×CPUコア数
User-Defined Functions (UDFs) • データローカリティ ◦ UDFsはサーバー側で実行されるため、ネットワークを介さずに処理が可能。データ処理が高速化され、ネットワークト ラフィックが軽減される。 • 原子性
◦ UDFsはレコードレベルでトランザクションを保証し、データの一貫性を確保する。つまり、UDFは全ての操作が成功す るか、または全く操作が行われないかのいずれか。 • 柔軟性 ◦ UDFsはカスタムビジネスロジックを適用でき、通常のデータベース操作では実現できない複雑な操作を可能にする。 UZOUでは広告グループ内の予算データをインクリメントするのにレコードUDFsを使用している
モニタリング項目とアラート発生時の対応 • メモリ使用量が80%を超える場合はノードを追加する、逆に60%を下回るようならノードを削除する • ディスクやCPUなどのアラートを仕掛けているが、基本的に鳴ったことはない(メモリの使用量を起因としてスケールアウトし ているから) ◦ アラート鳴るレベルで負荷が増えてるのならノードを追加する対応を行う
実績 • 導入からAerospike起因の障害もなく運用できている
今後の展望 • バージョンアップ • マルチAZ対応 • Arm対応 • Graviton2と合わせた使用の検討 a.
コストパフォーマンス向上との報告がある b. https://aerospike.com/news/press-release/database-6-on-aws-graviton2/