Мы ищем хорошее решение проблемы кеширования. Мы хотели бы распределить относительно небольшой объем данных (возможно, 10 ГБ) среди кластера веб-серверов, чтобы:
- Данные реплицируются на все узлы
- Данные являются постоянными
- Доступ к данным возможен локально
Нашей мотивацией для решения для кэширования является то, что в настоящее время у нас есть единственная точка отказа: база данных SQL Server. К сожалению, мы не можем настроить отказоустойчивый кластер для этой базы данных. Мы уже используем Memcached в значительной степени, но мы хотим избежать проблемы, когда в случае сбоя узла Memcached у нас внезапно возникнет большое количество пропусков кэша, и поэтому мы получим огромное количество запросов к одной конечной точке.
Вместо этого мы бы предпочли иметь локальные постоянные кэши на каждом узле веб-сервера, чтобы результирующая нагрузка была распределена. Когда производится поиск, он проходит через следующее:
- Проверка данных в Memcached. Если его там нет ...
- Проверка данных в локальном постоянном хранилище. Если его там нет ...
- Получить данные из базы данных.
При изменении данных ключ кэша становится недействительным на обоих уровнях кэширования.
Мы рассмотрели множество потенциальных решений, но ни одно из них, похоже, не соответствует в точности тому, что нам нужно:
CouchDB
Это довольно близко; модель данных, которую мы хотели бы кэшировать, очень ориентирована на документы. Тем не менее, его модель репликации не совсем то, что мы ищем. Мне кажется, что репликация - это действие , которое вы должны выполнять, а не постоянное отношение между узлами . Вы можете настроить непрерывную репликацию, но она не сохраняется между перезапусками.
Cassandra
Похоже, что это решение в основном ориентировано на тех, у кого большие требования к хранилищу. У нас большое количество пользователей, но мало данных. Cassandra, похоже, может поддерживать n количество отказоустойчивых узлов , но 100% репликация между узлами, кажется, не для этого предназначена; вместо этого он кажется более ориентированным только на распространение.
* * 1 042 SAN
Одна привлекательная идея заключается в том, что мы можем хранить кучу файлов в SAN или аналогичных устройствах. Я не работал с ними раньше, но кажется, что это все равно будет единственной точкой отказа; если SAN выйдет из строя, мы внезапно попадем в базу данных для всех промахов кэша.
Репликация DFS
Простой поиск в Google показал это. Кажется, делать то, что мы хотим; он синхронизирует файлы на всех узлах в кластере репликации. Но маркетинговый текст создает впечатление, что это скорее система, обеспечивающая копирование документов в разные офисы. Кроме того, у него есть ограничения, например, максимальное количество файлов, которые нам не подходят.
Кто-нибудь из вас имел схожие с нами требования и нашел хорошее решение, отвечающее вашим потребностям?