2013-03-17 3 views
39

Я запутался в концепции распределенного кэша. Я точно знаю, что это из поиска Google. Распределенный кеш может охватывать несколько серверов, чтобы он мог увеличиваться по размеру и в транзакционной емкости. Однако я не понимаю, как это работает или как он распространяет данные.Что такое распределенный кеш?

Например, предположим, что мы имеем данные 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и2 сервера кэш А и В. Если мы используем распределенный кеш, то одним из возможных решений является то, что данные 1, 3, 5, 7, 9 хранятся в кеш-сервере A, а 2, 4, 6, 8, 10 хранятся в кеш-сервере B.

Так это правильно или я неправильно понял?

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

Третий вопрос, если сервер (скажем, сервер А) идет вниз, что мы можем с этим поделать? Я имею в виду, что если мой пример выше, мы не можем получить данные 1, 3, 5, 7, 9 из кеша, когда сервер A не работает, то что может сделать сервер Cache Server в этом случае?

ответ

28
  1. Да, половина данных на сервере a, а половина на сервере b будет распределенным кешем. Существует множество способов распространения данных, хотя, как представляется, наиболее популярным является хеширование ключей.

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

  3. Если сервер идет вниз и является сервером кэш-памяти, данные должны будут поступать из исходного источника. EG: Кэш обычно представляет собой базу данных на основе памяти, предназначенную для быстрого поиска. Данные в кеше сохраняются только до тех пор, пока они будут использоваться регулярно и в конечном итоге будут очищены. Но для распределенных систем, где вам требуется настойчивость, общий метод состоит в том, чтобы иметь несколько копий. EG: у вас есть серверы A, B, C, D, E и F. Для данных 1 вы должны поместить их в A, а затем сделать копию на B и C. Couchbase и Riak. Для данных 2 он может быть на B, а затем копируется на C и D. Таким образом, если какой-либо один сервер опускается, у вас все еще есть две копии.

+3

Во-первых, спасибо за ваши быстрые ответы, и это очень ясно. Я действительно оценил это. Что касается пункта 3, могу ли я сделать серверы A, B для кеширования в реальном времени и серверов C, D, E, F только для резервных копий? то есть. Для данных 1 я помещаю его на сервер A, а затем копирует на C и D. Для данных 2 я помещаю его на сервер B, а затем копирует на E и F. Таким образом, C D E F используется, только если A или B опущены. Этот способ выглядит более структурированным. Это то, что вы имеете в виду в пункте 3? – Joey

+0

Чтобы сделать его более понятным, разница в том, что вы смешиваете данные и их копии на всех серверах. Например, вы сказали, что поместите данные 1 на сервер A и скопируйте их на B и C, данные 2 на сервере B и скопируйте их на C и D. Затем сервер B имеет как «исходные данные» данных 2, так и копию данных 1. Является ли лучше ли я отделить все «исходные данные» и скопировать их и поместить на разные серверы? – Joey

+0

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

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