Struggling with DynamoDB Capacity Planning? Here's How to Handle Unpredictable Traffic Like a Pro

Shahin HemmatiShahin Hemmati
4 min read

Estimating the exact number of reads and writes that your customers will generate can be really challenging in a real-world scenario because website traffic is often unpredictable and can fluctuate throughout the day. Let's walk through how you can approach this practically, especially when using Amazon DynamoDB.

Understanding the Unpredictability of Real-World Traffic

In a real-world scenario, it is often impossible to predict exactly how many visitors your site will have or how many reads and writes they will generate. Traffic could spike unexpectedly (e.g., due to a sale or a social media promotion), and trying to predict that traffic precisely can be like guessing the weather weeks in advance.

1. Estimating Capacity with Assumptions

To help you plan your read and write capacity, you can make some initial assumptions based on your website's expected usage. Here’s how you can think about it:

Example Scenario: Online Product Store

Let's say you are building an e-commerce site and using DynamoDB to store information about products and customer orders. You need to think about both reads and writes to estimate the capacity:

  • Reads: Customers browsing products are generating read requests.

  • Writes: When a customer places an order, or a new product is added, that is a write request.

Estimating Reads:

  • You estimate that there will be 1,000 unique visitors to your website per day.

  • On average, each visitor views 10 product pages. This means you would have:1,000 visitors * 10 reads per visitor = 10,000 reads per day.

Now let’s estimate reads per second:

  • Divide 10,000 reads per day by the number of seconds in a day (86400 seconds).

  • 10,000 / 86,400 ≈ 0.12 reads per second. You can round this up to 1 read per second to be safe.

Estimating Writes:

  • Assume that 10% of visitors place an order.

  • This means you would have:1,000 visitors * 10% = 100 orders per day.

Now let’s estimate writes per second:

  • Divide 100 writes per day by the number of seconds in a day (86400 seconds).

  • 100 / 86,400 ≈ 0.001 writes per second. Again, round up to 1 write per second for safety.

Based on this, you could initially configure your DynamoDB table for:

  • 1 Read Capacity Unit (RCU) per second.

  • 1 Write Capacity Unit (WCU) per second.

2. Capacity Modes in DynamoDB

Instead of having to estimate exactly, DynamoDB offers two capacity modes that are helpful in dealing with unpredictable workloads:

Provisioned Capacity Mode:

  • This is where you set a fixed number of RCUs and WCUs based on your estimates, as described above.

  • Pros: If you have relatively predictable traffic, it allows you to control costs by paying only for what you need.

  • Cons: If your traffic spikes suddenly and goes beyond your provisioned capacity, you may experience throttling (i.e., some requests may fail).

On-Demand Capacity Mode:

  • On-Demand Mode means you don't need to specify the number of RCUs or WCUs upfront. DynamoDB will automatically handle scaling based on incoming traffic.

  • Pros: This is ideal for unpredictable workloads where you might get spikes in traffic.

  • Cons: It's more expensive per operation compared to provisioned capacity, but it prevents throttling during spikes.

Real-World Strategies for Handling Capacity

Since predicting exact traffic is challenging, many companies use a combination of the following:

  1. Start with On-Demand Mode:
  • If your workload is unpredictable, it’s better to start with on-demand capacity mode. This ensures that DynamoDB can scale automatically to handle whatever traffic comes to your website, and you won’t have to deal with capacity planning initially.

  • This is useful during initial launches, product promotions, or campaigns when it's unclear how much traffic to expect.

2. Monitor Usage Patterns:

  • Use AWS CloudWatch to monitor the number of reads and writes on your DynamoDB table.

  • Once you have a better understanding of your traffic patterns (e.g., after a few weeks or months), you could potentially switch to provisioned capacity if your traffic becomes more predictable, which helps lower your costs.

3. DynamoDB Autoscaling (Provisioned Capacity):

  • If you choose provisioned capacity mode, you can also enable autoscaling. This allows DynamoDB to automatically adjust the RCUs and WCUs up or down based on the traffic.

  • You set a minimum and maximum threshold so that capacity scales within a defined range, avoiding both under-provisioning (which causes throttling) and over-provisioning (which increases cost).

Summary

Predicting Traffic: It’s nearly impossible to predict exact traffic in the real world, especially at launch. You can start by estimating based on assumptions, but this is just an approximation.

Capacity Planning Modes:

  • Use on-demand capacity if you have unpredictable traffic or expect spikes.

  • Use provisioned capacity if your workload is predictable, and consider autoscaling to adjust as needed.

Real-World Approach: Many people start with on-demand capacity to avoid worrying about underestimating traffic. Once they understand their traffic patterns and the average number of reads and writes, they may switch to provisioned capacity with autoscaling to optimize for cost.

In simple terms, managing read and write capacity units in DynamoDB is all about making sure your table can handle your expected traffic without throttling, and the key is to balance cost with availability by choosing the right capacity mode based on your application's needs.

10
Subscribe to my newsletter

Read articles from Shahin Hemmati directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Shahin Hemmati
Shahin Hemmati

I'm a curious Geek with an insatiable thirst to learn new technologies and enjoy the process every day. I aim to deliver high-quality services with the highest standards and cutting-edge DevOps technologies to make people's lives easier.