JAWS DAYS 2015で発表してきました
JAWS DAYS 2015でData Engineering at VOYAGE GROUPという題で発表してきました。運営の皆様、聴きに来てくださった皆様、どうもありがとうございました。
内容としては行動ターゲティング基盤をどのようにAWSを利用して実現しているのか、という話です。以下の課題に対して、どのような技術選択をして、運用をしているかというのがメインの話でした。
- なるべく速く書き込みたい。ユーザが何かをみたら、すぐにターゲティング可能な状態にしてほしい。反映が速ければ速いほどいい。
- 案件や対象ユーザが増えても、システム全体が問題なくスケールすること
- 読み込みが安定して低レイテンシであること。できれば5ms以内。
なかでもDynamoDBの運用、バッチとストリームの使い分け、といったところについて重点をおいています。スライドには乗っておらず、口頭で補足した部分もいろいろとあったので、ここにメモ程度に書いておきます。
DynamoDBのパーティションの話
最近、AWS Black Belt TechシリーズのDynamoDBの資料が更新されました。
www.slideshare.net
54枚目のスライドで、パーティションとCapacityの関係についての資料があります。DynamoDBの内部ではデータはそれぞれパーティションに分割されて保存されています。hash keyによってどのパーティションにデータが割り振られるかが決定されます。データ量に応じてパーティションの数が変動するようになっています。ここで、プロビジョンドスループットは各パーティションに均等に割り振られるようになっています。したがって、パーティションの数が増えている状態で、プロビジョンドスループットを落としてしまうと、1つ1つのパーティションのスループットが低い状態になってしまい、エラーが起こりやすい状態になります。というのが上のスライドです。したがって、
ということを気をつける必要があります。このあたりはdynamic-dynamodbの設定で、例えばスループットの最小値を決めておいたり、現状のキャパシティの3割増しのスループットを維持するようにする、などの工夫をするとよいでしょう。アプリケーションによってこのスループットの波というのは異なると思いますので、それぞれの環境に応じてこの辺りは調整するとよいです。ちなみにパーティション数の計算式は テーブルの操作のガイドライン - Amazon DynamoDB にあるので、自分のテーブルがいくつのパーティションの分割されていて、スループットが変わるとパーティション数がどう変わるのか、といったあたりを把握しておくとより振る舞いを理解しやすいです。その他DynamoDBのモデリングとパフォーマンスについてはre:Invent 2014の
(SDD407) Amazon DynamoDB: Data Modeling and Scaling Best Practices | … が参考になります。
近況と所感
実はJAWS DAYS初めての参加だったのですが、色んな方に会えて楽しめた一日でした。去年から業務ではマネージャーっぽい仕事をしていたのですが、もっとコードを書きたいですという話をしてまたコードを書く仕事をメインでやることにしました。*1なので、今年はより一層コードを書く時間を増やしてばりばりと手を動かしていく予定です。
それと、 今年度もお疲れ様でしたの会 on Zusaar というのを3/31にAJITOでやります!ビールを冷やしてお待ちしておりますので、お気軽に遊びに来てください。
*1:端的にいうとマネージャーをやめました