2014-02-12 5 views
0

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

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

Веб-сайт реализован в .Net, с MySQL, поскольку он поддерживает хранилище данных. Моя проблема заключается в том, как процесс может быть уведомлен при изменении данных. Возможно ли, что MySQL будет автоматически уведомлять всех зарегистрированных клиентов о любых изменениях данных? Я использовал RavenDb, у которого есть аналогичная функция, которая очень удобна. Я не мог найти ничего похожего на MySQL. Если это невозможно, любые идеи о том, как можно подойти к этой проблеме?

ответ

1

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

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

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

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

+0

Да, я использую основной кеш в памяти. Проблема в том, что это старая база кода, а некоторые объекты в кеше нелегко сериализуемы. Следовательно, in-memory работает отлично, но из-за процесса требуется, чтобы они были сериализуемыми. Couchbase - это база данных NoSQL, а не сервер кеша? Думаю, на данный момент мне придется бороться с возможной последовательностью. Если сервер базы данных поддерживает уведомления об изменениях, это будет кусок пирога для реализации. К сожалению, MySQL не кажется. –

+0

@ KarlCassar Couchbase - это своего рода промежуточный. Он использует memcached под капотом, но обеспечивает поддержку диска и атомарность на ключевом уровне, поэтому это своего рода небольшая база данных в памяти. Мы, как правило, используем кеширующую сторону больше, чем сторона поддержки диска. –