2015-10-25 1 views
3

Я слышал, что мой коллега сказал, что кеш-процесс будет лучшим вариантом при кешировании неизменяемых объектов, где согласованность не является большой проблемой (в конечном итоге, согласованностью) , В то время как внешний распределенный кеш более подходит для измененных объектов, которые вы всегда хотите, чтобы ваши чтения были согласованными (сильными).Внутрипроцессный кэш и распределенный кеш при согласованности с изменяемыми/неизменяемыми объектами

Это всегда правда? Я действительно не вижу, как изменчивость связана с согласованностью. Может кто-нибудь помочь мне понять это?

ответ

1

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

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

Как только объекты становятся изменяемыми, возникает проблема согласованности: когда вы запрашиваете экземпляр кеша для объекта, как вы можете быть уверены, что объект, который доставляется вам, является актуальным? Что делать, если один экземпляр кэша обслуживал вас, объект был изменен другим пользователем в другом экземпляре кеша? В этом случае вы не получите последнюю версию, вы получите устаревшую версию.

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

И наоборот, представьте, что вы загружаете на узел кэша некоторые модификации объекта. Что делать, если в то же время другой пользователь загружает некоторые изменения одного и того же объекта в другой узел кеша? Должно ли это разрешаться или должно быть запрещено каким-либо запирающим механизмом?

Кроме того, должны ли изменения объектов на вашем узле кеша сразу же появляться для пользователей этого узла кэша? Или они станут видимыми только после того, как они будут реплицированы на другие узлы?

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

3

Хотя, Даниил дал хорошее объяснение, но по какой-то причине он не был на 100% понятен мне. Итак, я googled out, и статья this очистила туман для меня.

Выдержки из статьи:

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^