Заметки о Memcache

В memcache можно хранить следующие значения PHP переменных:

  1. NULL
  2. пустая строка
  3. false
  4. пустой массив

Хранение сессий в PHP

Так «из коробки» работает хранение сессий в PHP. На каждый запрос сессии делаются запросы одновременно на все серверы, после чего из них отбирается самый актуальный ответ (аналогично и на запись).

Заметки о Memcache

Тем кто любит в текстовом виде и более разжевано советую почитать блог Андрея Смирнова »

Хранение обычных данных

А если нужно несколько серверов для хранения данных приложения (не сессий), то на помощь приходит mcrouter в котором нет репликации в классическом понимании, но данные дублируются.

Пример с 1 mcrouter сервером + 4 подключениями к нему:

Важно: в mcrouter нет репликации в классическом понимании, но данные дублируются:

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

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

Переформулируем задачу. Используя более конкретные термины, мы хотим:

  • send попадает в случайный ящик из пула . Если запрос не удался, получите данные из любого другого ящика.
  • отправлять как наборы, так и удаления всем хостам внутри пула.

Пример конфигурации:

 {
   "pools": {
      "A": {
         "servers": [
            // hosts of replicated pool, e.g.:
           "127.0.0.1:12345",
           "[::1]:12346"
         ]
      }
   },
   "route": {
     "type": "OperationSelectorRoute",
     "operation_policies": {
       "add": "AllSyncRoute|Pool|A",
       "delete": "AllSyncRoute|Pool|A",
       "get": "LatestRoute|Pool|A",
       "set": "AllSyncRoute|Pool|A"
     }
   }
 }

Объяснение : добавления, удаления и наборы отправляются на все хосты в пуле A, а get отправляются на случайный хост в пуле на основе идентификатора хоста mcrouter (таким образом, чтобы разделить нагрузку, вам нужно запустить несколько экземпляров mcrouter). Если запрос на получение терпит неудачу, он автоматически отправляется (повторяется) на другой хост в пуле, затем на другой и так далее. По умолчанию количество попыток равно 5.

Узнайте больше о настройке mcrouter здесь.

Источник: 1 - 2


12.06.2013 03:12

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru