Skip to content

Multi-region edge performance

A CDN is worth having because it serves users from nearby. A user in Frankfurt should get responses from a Frankfurt edge node, not one in Virginia. A load test from a single cloud region cannot check this. If your Virginia-based test shows 15 ms TTFB, you still know nothing about what a user in Sydney sees. MaxoPerf multi-region load tests send traffic from several geographic locations at once. You measure edge latency as each region sees it, and you catch routing or caching problems that only appear when traffic comes from a particular geography.

  • Confirm your MaxoPerf workspace has access to at least two cloud load locations. Check the Locations dropdown in the Configuration tab of any test.
  • Run a smoke test from a single region first. It validates the test file and confirms the CDN URL is reachable.
  • Review Cache hit/miss testing to learn how to assert on cache state. Add cache-header assertions to multi-region tests so you can see whether edge nodes in each region serve from cache.

What to expect from per-region edge latency

Section titled “What to expect from per-region edge latency”

CDN edge latency depends on:

  • Geographic distance to the nearest edge node: a user 50 km from the edge sees < 5 ms RTT, and one 5,000 km away may see 50–80 ms.
  • Cache state: a cache miss from any location adds origin RTT on top of edge RTT.
  • HTTP version: HTTP/2 and HTTP/3 connection reuse cuts per-request overhead for later requests from the same VU.
  • Asset size: large assets (> 1 MB) vary more in TTFB across regions because bandwidth differs.

Typical healthy CDN TTFB by region pair (cached, small assets):

Region to edge distanceExpected TTFB
Same continent, major metro5–20 ms
Cross-continent (e.g. EU → North America)30–80 ms
Transcontinental (e.g. EU → Asia Pacific)60–150 ms

If your measured TTFB is well above these ranges, the nearest edge is not serving the traffic. Investigate DNS routing or CDN PoP configuration.

  1. Upload a test file that targets your CDN URL. The test file does not need to specify locations. MaxoPerf sets the location at the runner level, not at the scenario level.

    execution:
    - concurrency: 100
    ramp-up: 1m
    hold-for: 5m
    scenario: cdn-edge-test
    scenarios:
    cdn-edge-test:
    default-address: https://cdn.example.com
    requests:
    - label: js-bundle
    url: /static/app.js
    method: GET
    assert:
    - equals:
    subject: http-code
    value: '200'
    - label: hero-image
    url: /static/hero.webp
    method: GET
    assert:
    - equals:
    subject: http-code
    value: '200'
  2. Open the Configuration tab of the test. Under Locations, click Add location to add a second and third region.

    Common multi-region setups for CDN testing:

    • us-east-1 + eu-west-1: transatlantic coverage
    • us-east-1 + ap-southeast-1: Americas + Asia Pacific
    • eu-west-1 + ap-southeast-1 + us-east-1: three-continent coverage

    Set the weight (percentage of total VUs) for each location. For a symmetric comparison, use equal weights. To match the user distribution of your real traffic, weight by region share.

  3. Save and run the test. The run starts runners in each region at the same time. Open the run detail.

  1. Use the Locations filter in the run overview to view per-region metrics. Select one region at a time to see throughput and latency for that region alone.

  2. Compare p95 TTFB across regions. Investigate any difference greater than 20 % between regions. Check:

    • Whether both regions resolve to nearby edge nodes (use dig or nslookup from each region’s IP range).
    • Whether one region produces more cache misses (higher Age: 0 rate, assertion failures on X-Cache: HIT).
    • Whether one region has consistently higher error rates. That may point to a CDN PoP issue or a firewall rule blocking that source IP range.
  3. Check the Runners tab to confirm that runners in all regions are active and carry proportional VU counts.

Sometimes a CDN serves a cache hit in one region and a miss in another. Common causes:

  • Edge node isolation: each geographic PoP keeps its own cache. An asset popular in Europe may be warm in Frankfurt but cold in Singapore.
  • DNS failover routing: if your CDN has routing rules, traffic from one region may go to a farther PoP than expected.
  • Shield configuration per region: if your CDN’s origin shield covers only some regions, the other regions may see higher miss rates.

To detect this, add X-Cache header assertions to your test and use the MaxoPerf Log tab to see which regions produce assertion failures:

scenarios:
cdn-edge-test:
requests:
- label: js-bundle
url: /static/app.js
method: GET
assert:
- contains:
subject: headers
value: 'HIT' # fails for cold-cache regions

Filter assertion failures by runner location in the Log tab to find the region with cache misses.

Before drawing conclusions, confirm:

  • All expected regions appear in the Runners tab with Running status.
  • VU counts in the Runners tab are proportional to the configured weights.
  • The Locations filter in the Overview tab shows distinct per-region charts.
  • p95 latency differs between regions by an amount that fits the geographic distance (for a properly distributed CDN, intercontinental pairs differ by at least 20–40 ms).

If two distant regions show identical TTFB values, both may resolve to the same CDN PoP. Investigate DNS geo-routing.

Do:

  • Use equal VU weights when your goal is a fair per-region latency comparison.
  • Warm the cache from all regions before measuring steady-state edge performance.
  • Check the Runners tab to confirm all regions are active before the test ends.

Don’t:

  • Infer global CDN performance from a single-region test. It only tells you about that one PoP.
  • Run multi-region tests against an origin before you verify its capacity. If the CDN is cold in several regions at once, you are in effect running an origin load test.
  • Chase inter-region latency differences below 10 ms for cached small assets. They are normal PoP variation and need no action.