Write-Through

Базовый System Design
≈ 2 мин чтения

Запись проходит через кэш

В Write-Through приложение отправляет изменение в кэш, а кэширующий слой синхронно обновляет и своё значение, и основное хранилище. Успех возвращается только после выполнения постоянной записи.

application
    |
    v
  cache
    |
    +---- update cached value
    |
    +---- write ----> primary store
                       |
                    success
                       |
                       v
                   response

После записи кэш уже содержит новое значение

Если все изменения проходят через этот путь, следующий читатель не должен сначала увидеть старую копию, оставшуюся после успешной записи. Кэш обновляется как часть операции изменения.

Это удобно для данных, которые после записи почти сразу читают снова: не требуется ждать следующего cache miss, чтобы заполнить кэш новым значением.

Запись становится дороже

Главный компромисс — latency записи. Клиент ждёт не только обновления кэша, но и записи в основное хранилище. Если постоянное хранилище медленное или временно недоступно, это напрямую влияет на операцию.

Также важно, чтобы изменения не обходили Write-Through стороной. Если другой сервис или административный процесс меняет основной источник напрямую, кэш может остаться со старой копией.

Write-Through не делает две системы одной транзакцией автоматически. Реализация должна явно определить, что происходит при частичном сбое и какое состояние считается успешным.