aerospike deep dive 資料
TRANSCRIPT
![Page 1: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/1.jpg)
Aerospikeを導入してみた話 ~ 他KVSとの違いアレコレ ~
1
株式会社インティメート・マージャー 松田和樹
![Page 2: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/2.jpg)
自己紹介
松田 和樹
株式会社インティメート・マージャー(社員数9名)
開発本部
• パブリックDMP「AudienceSearch」の開発
• 主にインフラ周りを担当
2
![Page 3: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/3.jpg)
アジェンダ
• IMでの使われ方(導入事例)
• 導入時に検討した他のKVS
• 導入して気づいたこと
3
![Page 4: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/4.jpg)
IMでの使われ方
4
![Page 5: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/5.jpg)
IMでの使われ方
• IDSyncサービス
• 自社IDと他社IDのマッピングテーブルのホスティング
• 属性データの加工
• 様々なデータソースからの更新とジョイン
5
![Page 6: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/6.jpg)
IDSyncサービス
6
![Page 7: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/7.jpg)
IDSyncサービス
IDSyncサービスとは
• 自社IDと他社IDのマッピングテーブルを生成、保持
• APIから更新、参照を行うことが可能
• 現在、50社以上のパートナーとID連携
7
![Page 8: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/8.jpg)
IDSyncサービス
連携パートナー(一部)
8
![Page 9: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/9.jpg)
例:アンケートで特定の回答をした人に広告配信
IDSyncサービス
IMIDアンケートパネルID DoubleClick ID
例:自社サイト(アプリ)に訪れた人にメール広告を配信
9
IMID1st Party Cookie (IDFA)
![Page 10: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/10.jpg)
IDSyncサービス
ELB
API
Aerospike
システム
• フロントは ELB + Nginx + uWSGI
• バックエンドにAerospikeを採用
• 平均応答速度は1ms
• ピーク時で1000req/s程度
10
![Page 11: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/11.jpg)
IDSyncサービス
応答速度(ELB)
11
![Page 12: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/12.jpg)
IDSyncサービス
• 主キーが自社ID、他社IDそれぞれのテーブルを生成
ELB
API
{A社: hoge}
A社 IM
hoge 1001
piyo 1002
IM A社
1001 hoge
1002 piyo
Aerospike
Set: A_to_IM Set: IM_to_A
※ Set: RDBMSのテーブルにあたる
12
![Page 13: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/13.jpg)
属性データの加工
13
![Page 14: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/14.jpg)
属性データの加工
14
Join Server
• 様々な属性情報を、異なるソースから取得 • IMで保持している属性情報を人が利用できる形に加工する基板にAerospikeを採用
• 加工したデータは検索エンジンから利用
![Page 15: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/15.jpg)
属性データの加工
Cookie IDを主キーに様々な属性情報を保持
• 閲覧履歴に基づく「キーワード」
• 各メディアより提供される「セグメント」
• 「User Agent」
• アクセス元IPに基づく「住所」や「企業情報」
• etc…
15
![Page 16: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/16.jpg)
属性データの加工
様々な属性情報を個別のSetで保持 それぞれ独立して更新を行うことが可能
ID セグメント
1001 234, 542
1002 2, 34, 112
ID アクセス元IP
1001 73.53.54.122
1002 59.3.66.32
ID ユーザーエージェント
1001 Mac Safari
1002 Win7 Chrome
IP 都道府県
73.53.54.122 東京都
59.3.66.32 北海道
IP 企業
73.53.54.122 IM
59.3.66.32 -
ID キーワード
1001 沖縄旅行
1002 引っ越し
Set: segmentSet: ua Set: keywords
Set: ip Set: address Set: company
16
![Page 17: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/17.jpg)
属性データの加工
様々な属性情報を個別のSetで保持 それぞれ独立して更新を行うことが可能
ID アクセス元IP
1001 73.53.54.122
1002 59.3.66.32
ID ユーザーエージェント
1001 Mac Safari
1002 Win7 Chrome
Set: ua
Set: ip
17
アクセスログ
![Page 18: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/18.jpg)
属性データの加工
様々な属性情報を個別のSetで保持 それぞれ独立して更新を行うことが可能
IP 都道府県
73.53.54.122 東京都
59.3.66.32 北海道
IP 企業
73.53.54.122 IM
59.3.66.32 -
Set: address Set: company
18
サイバーエリアリサーチ株式会社
![Page 19: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/19.jpg)
属性データの加工
様々な属性情報を個別のSetで保持 それぞれ独立して更新を行うことが可能
ID キーワード
1001 沖縄旅行
1002 引っ越し
Set: keywords
19
提携メディア
![Page 20: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/20.jpg)
属性データの加工
ジョインして検索エンジンに投入して活用
ID セグメント ユーザーエージェント キーワード 都道府県 企業
1001 234, 542 Mac Safari 沖縄旅行 東京都 IM
1002 2, 34, 112 Win7 Chrome 引っ越し 北海道 -
20
Join Server
![Page 21: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/21.jpg)
導入時に検討した他のKVS
21
![Page 22: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/22.jpg)
他のKVSとの比較検討
• DynamoDB (AWS)
• Redis
• Cloud Bigtable (Google) ※ 検討時、未リリース
22
![Page 23: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/23.jpg)
DynamoDB (AWS)
• 費用が高い(非リザーブド)
• 10万read/sで、130万円/月
• 10万write/sで、650万円/月
• キャパシティを超えたリクエストはロストする
• 通常は手前でキューイングして対応するらしい
23
![Page 24: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/24.jpg)
Redis (ElastiCache)
用途ごとにRedisを分けて、複数台並べることを想定
• 容量制限あり(最大で240GB)
• 到達した場合に代替手段がない
• 都度構築が必要になり、スケールしない
• 50社とID連携するのに50インスタンス必要
24
![Page 25: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/25.jpg)
Cloud Bigtable (Google)
• 他のサーバもGoogle Cloud Platformに移さないと、ネットワークレイテンシが発生する
• 応答速度が対Aerospike比で約10倍(らしい)
• Aerospike: 1ms以下
• Cloud Bigtable: 5~10ms
25
![Page 26: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/26.jpg)
導入して気づいたこと
26
![Page 27: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/27.jpg)
Clientが高機能
• レコードがどのノードに配置されているか把握している
• 主キーのハッシュ値を利用
• コネクション確立時に、マッピングテーブルを取得する
• マッピングテーブルは、ノードの追加や削除時に再計算される
Client
27
![Page 28: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/28.jpg)
Clientもパワーが必要
• Aerospikeのパフォーマンスを出し切るには、高多重度でリクエストを行うことが必要
• 1リクエスト1msで3.6億レコード取り出す場合
36万秒 = 6000分 = 100時間
• IMでは16~32coreのサーバを用い、数百多重で処理を回しています
28
![Page 29: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/29.jpg)
意外とメモリの使用量が大きい
SSDのみの利用でも意外とメモリを使用する
• インデックスがメモリ展開される
• 1レコードにつき64バイト
AWSではメモリとSSDの比率がほぼ固定なので、一部インメモリのNamespaceを使い、リソースの無駄を無くしました。
29
![Page 30: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/30.jpg)
Namespaceは分割しにくい
• RDBMSでいうデータベース
• SSDを使用する場合、ブロックデバイス単位でしかNamespaceを分けることが出来ない
• インメモリの場合は自由に分割可能
30
![Page 31: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/31.jpg)
Queryの制約
SQLライクな記述でレコードを参照することも可能
• 指定したサーバで処理が走る
(クライアント側ではない)
• 並列実行が出来ない
• 指定するサーバを変えあれば実行可
• バックアップもQuery扱い
31
Client
×
![Page 32: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/32.jpg)
バックアップ
• mysqldumpの様なコマンドがある
• ほぼ平文なので、データ量が大きい
• 取得、復元に時間が掛かる
• Query扱いなので、実行ノードに注意(前述)
32
![Page 33: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/33.jpg)
その他 雑感
• インメモリだと特に速い(比較してないけど)
• 設定項目がほぼ無いので、構築が楽
(逆にブラックボックスでもありますが。。)
• ドキュメントに無い機能がライブラリにある
(ソースコードを見ましょう!)
• リソースの見積が難しく、想定より高くなる。。
33
![Page 34: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/34.jpg)
まとめ(これから始める方へ)
• 本当にAerospikeが必要なケースはあまり多くなさそう。 <マッチしそうなケース>
• データ量の見積が難しい場合(事業のスケールなど) • 時間あたりのリクエスト数が膨大な場合
• Javascript経由で不特定多数からAPIをコールされる
• バッチ処理などで瞬間的に負荷をかける(億件単位のジョイン)
• サーバ、クライアント共に必要とされるリソースの見積が難しいので、クラウド環境で試してみることをオススメします。
• Queryをメインにサービスを設計してはいけない。
34
![Page 35: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/35.jpg)
エンジニア募集
最新の技術に興味のある新メンバーを募集中です!
採用技術 開発基盤
35
![Page 36: Aerospike Deep Dive 資料](https://reader034.vdocuments.site/reader034/viewer/2022050723/55c577edbb61eb220a8b45b2/html5/thumbnails/36.jpg)
ありがとうございました
36