Reliability · 1 июл. 2026 г.
Обновления перевода в реальном времени должны быть полезными, а не обязательными
Статус в реальном времени ценен, но операции перевода должны оставаться корректными, когда инфраструктура реального времени недоступна или намеренно отключена.

Наблюдать, как перевод переходит из очереди в обработку, а затем в готовность, полезно. Команды могут видеть прогресс без обновления страницы, быстро открывать завершенную работу и замечать неудачный запрос, пока релиз еще активен.
Но обновления в реальном времени — это возможность представления. Они не должны быть механизмом, который делает рабочий процесс корректным.
Прежде всего — устойчивое состояние
База данных и система заданий должны владеть состоянием перевода. Каждый переход между этапами должен фиксироваться независимо от того, подключен браузер или нет:
- запрос поставлен в очередь
- перевод начат и завершен
- отправка начата и завершена
- публикация начата и завершена
- события ошибок и повторных попыток
Событие реального времени может сообщать об этом устойчивом изменении. Оно не должно быть единственной записью о том, что изменение произошло.
Это различие защищает пользователей, которые закрывают вкладку, теряют доступ к сети или работают в среде, где инфраструктура websocket отключена.
У реального времени есть операционная цена
Рассылка событий добавляет больше движущихся частей: сервис websocket, авторизацию соединений, конфигурацию каналов, поддержку прокси и поведение повторного подключения в браузере.
Для команд, которым нужна живая координация, эта цена может быть оправданной. Для меньшего развертывания обычный polling может быть проще и полностью достаточным.
Если сделать режим реального времени подключаемым по желанию, каждая среда сможет выбрать тот операционный профиль, который она способна поддерживать, не теряя базового поведения перевода.
Спроектируйте плавный резервный путь
Интерфейс должен приходить к одному и тому же конечному состоянию через события реального времени или периодическое обновление.
Практический подход:
- загрузить текущее устойчивое состояние
- подписаться на релевантные события, когда реальное время включено
- объединять входящие обновления по ID запроса и версии
- выполнять опрос с умеренным интервалом, пока остается активная работа
- остановить частый опрос, когда пакет достигает терминального состояния
Реальное время делает экран отзывчивым и мгновенным. Polling закрывает пробелы после повторных подключений и дает резервный путь.
Эти два пути не должны создавать конкурирующие правила статусов.
Не превращайте обновления в шум
Не каждое внутреннее событие должно попадать в интерфейс. Рассылка каждого токена, heartbeat воркера или промежуточного сохранения может сделать страницу нестабильной и увеличить нагрузку на инфраструктуру.
Пользователям обычно нужны значимые переходы между этапами и обновленные счетчики. Группировка быстрых низкоуровневых изменений в меньший набор устойчивых вех делает взаимодействие спокойным и удобным для просмотра.
Тот же принцип относится к уведомлениям. Завершенный пакет может заслуживать внимания. Каждый завершенный locale, вероятно, нет.
Проверяйте тихий путь
Легко тестировать с включенным реальным временем и предполагать, что резервный путь работает. Надежность требует противоположного упражнения:
- отключить рассылку событий
- запустить пакет для нескольких locale
- уйти со страницы и вернуться
- подтвердить, что прогресс догоняет текущее состояние
- повторить неудачный запрос
- проверить итоговые счетчики и доступные действия
Если этот путь работает, реальное время становится улучшением, а не скрытой зависимостью.
Вывод
Обновления в реальном времени улучшают операции перевода, когда они опираются на устойчивое состояние.
Сначала фиксируйте каждый переход, делайте рассылку настраиваемой и сохраняйте взвешенный резервный polling. Рабочий процесс должен оставаться надежным даже тогда, когда самый быстрый канал доставки недоступен.