2013-05-28 5 views
5

Я пытаюсь понять основные понятия распределенного кеша и его использование.Распределенный кеш - основные понятия

Во-первых, это распределенный кеш, кластер компьютеров, которые совместно действуют как один, большой кэш для всех клиентов или клиенты сохраняют свой локальный кеш, а один координатор просто отправляет обновления всем клиентам, которые указывают, как синхронизировать их ЛОКАЛЬНАЯ копия?

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

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

Большое спасибо за все ответы/ресурсы, которые вы могли бы предоставить.

ответ

3

Я буду использовать Couchbase в качестве примера распределенного кеша (http://www.couchbase.com/).

Первый вопрос: Как распределяются данные о распределенных кеш-памяти?

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

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

Второй вопрос: Зачем использовать кэш, так как все это идет по сети?

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

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

Третий вопрос: Почему распределенный кеш поверх локальных кешей?

При запуске масштабирования вам понадобится распределенный кеш.

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

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

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

+0

Thx для большого ответа. Я запутался в распределенном кеше в памяти. Поскольку у нас есть выделенный кластер машин, который наша машина «подключится» для запроса к кешу, как может быть свойство «в памяти» в этом случае? Мы просто запрашиваем другой компьютер/сервер, который действует как кеш, поэтому кеш не находится в нашей собственной памяти? – Bober02

+1

Исправить. Клиент (предположим, что веб-сервер) ничего не хранит в своей памяти. Часть «в памяти» находится на выделенной машине кеша в кластере. Вам все равно придется заплатить цену за выход в сеть. Приятно, что клиент - в этом случае - не должен конкурировать с кешем для ОЗУ. Если вы можете делать вещи в веб-сервере и не беспокоиться о сохранении кешированных объектов в памяти. – ryan1234

3

Чтобы ответить на ваш второй вопрос (исходя из вашего ответа на Ryan1234): да, вам нужно подключиться к серверам кеша, и если бы у вас была БД, вам тоже нужно было бы подключиться к ней, где данные извлекаются из «части, которая делает разницу в производительности; поэтому БД является дисковой базой, в то время как распределенный кеш - это ОЗУ/память. Почему клиенты полагаются на кеширование, так это то, что у DB ограниченные ресурсы с точки зрения соединений: чем больше подключений и тем больше вызовов вы делаете в БД, тем медленнее производительность, которую вы получите, и, таким образом, ваша БД станет узким местом. Чтобы избавиться от этого стресса в БД, кеширующий тейр сидит на «вершине» БД и хранит часто используемые объекты в памяти (в зависимости от того, какое приложение является транзакционным или ссылочным), и теперь вашему приложению не нужно обращаться к БД для получения этих объектов. Важной особенностью кеша является его способность масштабироваться линейно по мере увеличения нагрузки на приложение или при масштабировании приложения. Таким образом, по существу, вы можете добавить больше серверов в кеширование, и эти серверы будут объединять ресурсы памяти и повышать производительность.

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

Если вы хотите, чтобы прочитать более подробную информацию по этому вопросу, то прочитайте Scalable WCF Applications Using Distributed Caching

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