ABEMAの広告配信では、生放送番組中にCMが挿入されると全視聴者からのCM取得や視聴計測のリクエストが同時多発的に発生し、特に人気番組ではトラフィックが数十万rps規模でスパイクします。こうした負荷に対応しながら、様々な条件をリアルタイムに判定し、広告配信制御を行っています。ユーザごとのCMの視聴状況や広告予算は時々刻々と変化するため、発生したイベントをニアリアルタイムにカウントし把握できるスケーラブルなカウンタの存在が不可欠です。
これをKubernetes上のGoで実装したアプリケーションとValkey Cluster、Cloud Spanner、BigQuery等を用いて分散カウンタとして実装しました。
当初はすべてオンメモリで実現する予定でしたが、事業要件を検討する過程でカウンタのキー数が10億個程度であることがわかり、読み書き性能とストレージ容量を両立すべくNewSQLとのハイブリット構成にしました。
本セッションでは、この分散カウンタの設計の工夫や実際の実装例についてや、さらなるスケーラビリティを見据えた結果整合性のある分散データ構造の導入の構想などをお話しします。