Вопрос «в скольких регионах запускаться» обычно решают интуитивно. Между тем он сводится к арифметике: где находится состояние и сколько раз запрос к нему обращается.

Считаем честно

Пусть приложение в Москве, база — там же, пользователь в Новосибирске. RTT Новосибирск–Москва около 50 мс.

Добавили регион в Новосибирске. Сетевой путь до приложения сократился до 3 мс, но каждый запрос к БД теперь идёт в Москву. При трёх обращениях к базе на запрос итог такой:

СхемаПуть до приложенияЗапросы к БДИтого
Только Москва50 мс3 × 1 мс≈ 53 мс
Москва + Новосибирск3 мс3 × 50 мс≈ 153 мс

Второй регион сделал хуже втрое. Это не редкий случай, а типичный.

Когда регион помогает

  • Приложение не ходит в общее состояние (статика, edge-логика, кеш).
  • Состояние реплицировано и чтение идёт локально.
  • Нужна отказоустойчивость, а не латентность — тогда считать надо иначе.

Порядок действий

Сначала посчитайте, сколько обращений к состоянию приходится на запрос. Инструмент есть в самой платформе:

vlone traces stats --since 24h --group-by span.name
# span.name          вызовов/запрос   p50      доля времени
# db.query                     3.4    1.2ms          8%
# cache.get                    7.1    0.3ms          4%
# http.client.upstream         0.8   82.0ms         71%

В этом примере узкое место — внешний upstream, а не география. Второй регион не поможет; поможет кеш ответов или переход на асинхронную обработку.

Практическое правило

Добавляйте регион, когда доля сетевого пути до приложения в общей латентности превышает 30%, а обращения к общему состоянию — меньше 10%.

Во всех остальных случаях первая реплика для чтения или нормальный кеш дадут больше, чем ещё одна площадка.