Azure Cosmos DB (DocumentDB)のRU/mについて

2017.9.7追記
この記事で紹介した「RU/m」(プレビュー)は、現時点で利用ができなくなっているようです。今後利用が再開されるかどうかもわかりません。公式アナウンスを待ちましょう。


Build2017ではさまざまな新製品やソリューションが発表されていますが、個人的に最も気になったのは、Azure Cosmos DB(DocumentDBが拡張されたサービスの新名称)で、スループットの予約単位「RU/m」が追加になったことです。

RU(Request Unit)おさらい

Azure Cosmos DB (DocumentDB)では、秒あたり要求ユニット(RU/s)という単位で消費するスループットを予約しておく必要があります。コストはこのRUでほぼ決まります。従来は秒単位で予想される消費RUを決めて(10,000RU/secなど)プロビジョニングしていました。

そのため急なスパイクが発生すると、そのスパイクが数秒であっても予約RUをオーバーしてしまうと、429エラーが発生してしまうという残念な仕様になっていました(SDKを使うとある程度リトライされるが)。

この制約があるために、予約RUは余裕を持って見積をせざるを得ず、どうしても割高なコストになる傾向にありました。DocumentDBが割高だと言われやすかった理由のひとつになっていたと思います。

第2のRU登場

しかしこの度、第2のスループット予約単位である、RU/m(分あたりの要求ユニット)が登場しました。しかも、これは従来のRU/sに加えて保険のように追加できるオプションです。

たとえば、普段は1,000RU/sしか消費しないようなシステムで、たまに8,000RU/sくらいに達してしまうために余裕を持って10,000RU/sの契約をしていたとします(もったいないですが、よくあることでした)。しかし、今後はRU/sは1,000に設定しておき、追加でRU/mを購入しておけば、たまに発生するスパイクの1分あたりの合計がRU/sの10倍に収まっていれば、429エラーは発生しなくなります。なお、RU/sの10倍という設定は現在は固定のようです。

RU/mを設定した場合の追加コストは約3割増しなので、これまでのようにスパイクのために多めのRUを購入するよりはコストが削減できる可能性が高まるはずです。

RU/mの設定

設定は非常に簡単で、既にポータルから有効化できるようになっています。

ポータルでのスケール設定画面

スクリーンショットの通り、Azure Cosmos DBの[スケール]設定画面で新設された[RUPM]をONにするだけです。
なお、RUPMの設定とあわせて、RU/秒の値を現実的な値に縮小することもお忘れなく。

詳細は、公式ドキュメントを参照して下さい。