DynamoDBのマジックナンバー: 簡単な計算でDynamoDBの使用量を最適化する

DynamoDBを節約するための驚くほど簡単なトリックを学びましょう。

DynamoDBは魔法のようです!何千万TPSもの負荷をかけることができ、ただ動くというサービスは他にはありません。中毒性もあります。一度DynamoDBを使い始めると、チームはあらゆることにDynamoDBを使うようになるのです。DynamoDBはとても効果的なので、背景に溶け込み、邪魔にならないので、そこにあることさえ気づかないのです。これは諸刃の剣です。実際、DynamoDBは非常にうまく機能するため、時間が経つにつれて、チームは未開拓の最適化の機会を獲得していきます。

もし、このような最適化の機会があっても、それを行動に移すのは難しいことではないとしたらどうだろう?杖を振るだけで、コストとパフォーマンスのメリットを引き出せるとしたら?まあ、それは可能です。Alex DeBrieの言葉を借りれば、「私がDynamoDBで最も気に入っていることの1つは、物事を理解するために実際に計算ができることです。」そしてそれは単純な数学であり、それはほとんど魔法のように感じられます。

このブログでは、DynamoDBを最大限に活用するための簡単なトリックを紹介します。このブログは、このトピックに関する最初のランチ・アンド・ラーニングで取り上げた内容の内訳であり、コストの最適化に焦点を当てています。

また、2回目のランチ・アンド・ラーニングも開催し、さらに多くの数字について掘り下げました。その模様と対応するブログへのリンクが入手可能になり次第、ここに掲載します。しかし、今のところは……続きを読みましょう。

6.94: DynamoDBはプロビジョンドスループットかオンデマンドか?

DynamoDBには、プロビジョンド・スループットとオンデマンドの2つの課金モードがあります。プロビジョンドスループットでは、事前に必要な容量を指定します。一方、オンデマンドでは、事前に容量を指定することなく、操作ごとに課金されます。

DynamoDBオンデマンドのコストは、プロビジョニングされた容量の6.94倍です。しかし、キャッチがあります!これは、プロビジョニングされた容量を100%消費することを前提としています。実際には、IOPSを100%利用することはほぼ不可能です。タイトなオートスケーリング・ルールや、日周期のような予測可能なトラフィック・パターンであれば、50%より少し高い程度に抑えることができます。しかし、オートスケーリング・ルールに手を出す時間や意欲がない場合、または特に急増するトラフィックがある場合は、オンデマンドIOPSを使用すると、実際にコストを大幅に削減できる可能性があります。

どうやって見分けるのか?CloudWatchにすべて載っているが、ここではそれをまとめる方法を説明します。利用率を知るのに役立つ2つのメトリクスがあります: ConsumedWriteCapacityUnits(CWCU)ProvisionedWriteCapacityUnits(PWCU)です。

残念ながら、これらの数値を単純に割って利用率を求めることはできません。CWCUはある期間に消費したすべての容量の合計であるのに対し、PWCUは5分間のウィンドウでプロビジョニングされた秒あたりのレートです。したがって、100%の利用率で稼働していた場合、PWCU×300(300は一般的な5分間の秒数)を消費する必要があります。

30日間の利用率を決定するには、単純に30日間のPWCUを合計し、それを300倍し、同じ30日間のCWCUの合計で割ります。30日間というスパンは、より長期的なデータが得られ、オートスケーリングの有効性を評価でき、高いピークをぼかすことができるため、良いスパンです。結果が6.94より大きい場合は、オンデマンドの方が良いかもしれません!

これを “私のIOPSの利用率は?”と言い換えることもできる。それを計算するには、上の式の分子と分母を反転させればいいのです。その結果が14.4%以下であれば、オンデマンドに移行する。しかし、これにはグローバル・セカンダリー・インデックス(GSI)が含まれていないことを忘れないでください!

2.4: DynamoDB Infrequent Accessストレージでコスト削減できるかも?

DynamoDBは最近、Infrequent Access(IA)ストレージクラスの提供を開始しました。IAでは、DynamoDBのストレージが$0.25/GBから$0.1/GBに60%割引され、その代わりにIOPSが25%増加します。もしIOPSとストレージに同じコストをかけるのであれば、IAに移行するのは簡単なことです!しかし、IOPSのコストがストレージコストの2.4倍以下であれば、IAへの移行はまだ勝ちパターンかもしれません。

重要な注意点は、多くのテーブルがこのような形でスタートするわけではなく、時間の経過とともにデータを収集するにつれ、2.4のしきい値を超え、IAのほうが有利となる可能性があるということです。

2.4という数字を導き出しましょう。JamieがStandard DynamoDBテーブルを持っていて、毎月の請求がストレージにA、IOPSにBだとします。彼女の毎月のDynamoDBの総請求額は、次のようになります:

もし彼女がIAに移れば、新しい請求書はこうなります:

そしてIAが良い取引となるためには:

IOPSに費やすストレージが2.4倍以下であれば、IAを使う方がよいといえます。

IOPSコストを計算するには、書き込みIOPSと読み取りIOPSのコストを足すだけです。この計算式は、オンデマンド容量でもプロビジョニング容量でもまったく同じです。

マジックショーは始まったばかりです

DynamoDBを最大限に活用するためのシンプルなトリックはまだまだたくさんあります。私たち(AlexKhawaja)はX/Twitterでこれらのトリックについてシェアしていますし、コストの最適化以外にも、このトピックに関する別のランチ&ラーニングでシェアしたトリックがたくさんあります。録画のリンクが利用可能になったら、このブログを更新します。

あなたが最も便利だと感じたマジックナンバーを教えてください!また、DynamoDBをさらに使いこなすために、Momentoがどのような手助けができるのかについても教えてください。