Какую конфигурацию выделенного кэша использовать?
Крупный сайт электронной коммерции рассчитывает переключить свой кеш сеанса с общего кеша на выделенный.
Обычно он работает на серверах среднего размера (5-6)... В загруженное время он работает на 20 серверах среднего размера. В очень загруженное время не исключено, что на сайт поступает более 2000 запросов в секунду.
Достаточно ли хорош совмещенный кеш здесь или он должен быть в роли рабочего?
Кроме того, должна ли быть включена высокая доступность для данных сеанса? Сайт полагается на данные сеанса, чтобы присутствовать для хорошего пользовательского опыта. Но кэш сохраняется в хранилище BLOB-объектов Azure, поэтому я не уверен, что полностью получил возможность высокой доступности
2 ответа
Использование выделенных ролей зависит от того, сколько ролей вы хотите запустить, и от того, определяет ли использование памяти ваши веб-роли, масштабируются ли они. Например, если ваши веб-роли постоянно увеличивают использование памяти, и именно масштабирование, а не память процессора, является триггером для масштабирования - тогда подумайте об использовании выделенных ролей для кэша, поскольку ваши веб-роли могут обрабатывать нагрузку дольше. Если ваши веб-роли интенсивно используют процессор, то выделение памяти для каждой роли в кэше может быть предпочтительным. Вам также нужно учитывать, что при работе в выделенных ролях вам нужно более одной роли для управления нагрузкой и доступностью, поэтому даже в нерабочее время у вас будет не менее 3 ролей, выполняющих кеш (но, возможно, меньше веб-ролей), Возможно, вы также захотите использовать выделенный кеш, если вы выполняете много развертываний или масштабируете - где роли отключаются намеренно и часто.
Одно из соображений о совместном кэшировании ролей заключается в том, что если бы у вас были липкие сеансы, задержка была бы ниже, поскольку элемент находится на той же машине. К сожалению, балансировщик нагрузки Azure работает в циклическом порядке и совсем не привязан, поэтому вероятность возвращения сеанса на одну и ту же машину невелика (1/5 времени для 5 ролей). Это означает, что большую часть времени элемент кэша будет извлекаться из другой роли в кластере, поэтому преимущества, связанные с задержкой, теряются.
Кеш распределяется и находится в памяти - я не знаю ни о каком хранилище больших двоичных объектов (за исключением "состояния среды выполнения кластера"), независимо от того, что это такое. Элемент, загруженный в кеш, становится доступным для других машин в кластере с компьютера, который он сохраняется (в памяти) (чтение с компьютера B на компьютер A также не сохраняет его на компьютере A - см. комментарий ниже.) Кэшированные элементы всегда находятся только в памяти, а размер кэша ограничен доступной памятью.
Опция высокой доступности копирует элемент на отдельную машину (не на хранилище), поэтому, если на одной машине происходит сбой, копия все равно остается где-то. Высокая доступность также будет использовать больше памяти, поскольку элемент использует память в двух разных местах. Вероятность сбоя может быть достаточно низкой для вашего приложения электронной коммерции - если элемент не кэшируется (из-за сбоя или истечения срока действия), его можно восстановить из постоянных данных. Если вы, например, храните корзину в кеше, а не сохраняете ее в хранилище, вы не хотите, чтобы она терялась, если роль перезагружается - в этом случае высокая доступность может быть лучшим вариантом.
Отличный ответ @SimonMunro, однако, по моему опыту, совместно расположенный кэш Azure не подходит для работы. Наше нагрузочное тестирование показало, что когда сервер перезагружается, для восстановления кеша требуется исключительно длительный период времени. Мы закодировали это путем извлечения данных из нашей базы данных, однако наш сайт остановился из-за нагрузки на базу данных. Это не только происходит, когда узел перерабатывается; но также если вы масштабируете свои облачные сервисы вверх и вниз; и даже когда вы выполняете VIP-своп.
Мы провели те же тесты, используя выделенный кэш Azure, и обнаружили, что он справляется с ситуацией, связанной с перезапуском рабочей роли кеша, практически не влияя на производительность сайта. Я рекомендую использовать выделенный кэш Azure во всех случаях, если вы хотите, чтобы ваш сайт работал.