В чем разница между выделенным и размещенным кэшем? Как будет работать размещенный кэш?

#caching #architecture #distributed-system

Вопрос:

Согласно следующему видео, выделенный кэш — это процесс кэширования, размещенный на отдельном сервере, в то время как размещенный кэш — это процесс кэширования, размещенный непосредственно на хостах службы. Это стандартное определение? Я не могу найти больше по этой теме в Интернете.

В сценарии с размещенным кэшем служба всегда будет ссылаться на кеш, который находится на этом конкретном хосте, или ей также потребуется запрашивать другие хосты? Можно ли направлять запросы только на хосты, у которых есть размещенный кэш для этого раздела данных, чтобы избежать дополнительного сетевого перехода на сервер кэша, который потребуется для извлечения данных в сценарии выделенного хоста кэша?

Ответ №1:

В размещенном кеше запрос только к экземпляру службы, в котором хранятся данные, может быть выполнен путем сегментирования данных (обычно с помощью некоторого ключа). Получив ключ, запрашивающая сторона может определить, какому сегменту принадлежат данные, затем определить, какому экземпляру принадлежит сегмент, и направить запрос в этот экземпляр. Пока все согласны с обоими уровнями владения, это работает очень хорошо. Также возможно, чтобы каждый экземпляр службы мог пересылать запросы, так что даже если запрос будет перенаправлен неправильно, он с некоторой вероятностью в конечном итоге достигнет правильного экземпляра.

Adya (2019) описывает широкий подход, называя его хранилищем ссылок, который может использовать подход встраивания кэша в фактический сервис (который даже не требует локального взаимодействия между процессами). Когда это сделано, между вашей службой и кэшем практически нет границы: служба — это кэш, а базы данных / хранилища объектов существуют только для того, чтобы удалять холодные данные и обеспечивать долговечность. Одним из преимуществ этого подхода является то, что ваша база данных / хранилище объектов в случае sunny day в основном обрабатывает записи, и в конечном итоге это вызывает большую механическую симпатию к CQRS.

Я лично добился большого успеха, используя Akka для реализации сервисов, следующих этому подходу (Akka Cluster управляет членством в кластере и обнаружением сбоев, сегментирование кластера Akka обрабатывает распределение и разрешение сегментов, а сохранение Akka обеспечивает долговечность).