Pull to refresh
  • by relevance
  • by date
  • by rating

Что такое memcached и для чего он нужен

Lumber room
Memcached (читается мемкЭшид) — это система кэширования различных объектов в оперативной памяти. Позволят значительно снизить нагрузку на базу или файловую систему и ускорить работу сайта, за счет того, что работа с памятью быстрее чем с базой или файлами. Насколько я помню была разработана для LJ, а сейчас применяется практически на всех проектах с большим количеством пользователей. Запускается отдельным сервером.

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

Для PHP есть специальный PECL-модуль (то есть он не поставляется вместе с PHP, надо отдельно скачивать и компилировать). Думаю также есть готовые модули для Perl, Python (Django), Ruby(RoR) и других языков.

В API самого мемкеша есть только базовые функции: выбор сервера, коннект и дисконект, добавление, удаление, обновление и получение объекта, инкримент и дикримент. Для каждого объекта устанвливается время жизни, от 1 секунды до бесконечности. При переполнение памяти более старые объекты автоматически удаляются. Для PHP также есть уже готовые библиотеки для работы с мемкешем, которые дают дополнительную функциональность.

Базовый алгоритм работы с мемкешем следующий — обращается к мемкеш-серверу за объектом, если он есть то берем его. Если нет, то обращаемся к базе данных (или где там еще у вас могут хранится данные), формируем объект, выдаем его пользователю и добавляем в мемкеш, чтобы мы могли прочитать его при следующем обращение.

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

Сейчас на одном из своих проектов (сайт знакомств) я пробую использовать мемкеш для реализации показа статуса пользователя он- или оффлайн..
Total votes 15: ↑9 and ↓6 +3
Views 7.4K
Comments 12

Верните кеширование страниц Хабра!

Habr
Мне вчера в неопределенное время пришла отличная идея по повышению удобства пользования сайтом. Надо сделать так, чтобы в браузерах кнопки «назад» и «вперед» позволяли перемещаться по истории БЕЗ перезагрузки страницы с сервера. Знаете, почему мне эта идея не пришла раньше? Потому что до вчерашнего дня с нашим Хабрахабром это прекрасно работало, а вчера в составе HTTP заголовка появилось это:

Cache-Control: no-cache, must-revalidate

И, будучи пользователем Opera, я вынужден ждать перезагрузки страницы, хотя Опера прекрасно справляется с кешированием (если ей только не запретить).

Зачем зря заставлять пользователей ждать, зачем зря нагружать свой сервер? Верните кеширование, пожалуйста.

Я допускаю, что на этот шаг разработчикам сайта пришлось пойти по каким-то техническим причинам, в этом случае хотелось бы, чтобы поскорее эта темная полоса прошла.
Total votes 3: ↑2 and ↓1 +1
Views 538
Comments 1

PHP: Изменение файлового кеширования на memcached — впечатления

Lumber room
Почти всегда на крупных проектах, особенно сообществах, приходится очень много кешировать данные, такие, как количество сообщений, данные пользователя, общая информация…

На наших проектах мы уже несколько лет использовали файловое кеширование. Т.е., данные каждого пользователя заносились в файл, и по мере надобности изменялись. Проблема нагрузки была всегда, особенно на БД Mysql.

Изменили файловое кеширование на кеширование Memcached. Результаты просто потрясающие. Нагрузка сошла на нет, очередь коннектов к базе данных ушла. Сайты начали работать в разы быстрее.

Почему нагрузка на Mysql уменьшилась? Мое мнение — уменьшилось количество запросов на чтение и запись на жесткий диск, от этого разгрузился Mysql. Скорость работы диска, как и загруженность диска запросами на чтение-запись, как известно, одни из параметров, которые влияют на производительность Mysql.

UPD:

Что было:
1. Около 250 000 файлов кеша.
2. Около 2ГБ занято под кеш.
3. Около ~ 30 запросов/секунду (в пике ~ 50) на чтение-запись кеша с диска.

Что стало:
1. 0 файлов кеша
2. 400 МГ выделено под memcached (срок хранения данных в кеше — неделя)
3. 0 запросов на чтение-запись кеша.
Total votes 19: ↑14 and ↓5 +9
Views 427
Comments 22

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

Website development *
С появлением и развитием memcached-подобных систем в архитектурах веб-приложений появилось еще одно звено, а именно кеш-серверы. Обычно это машины с большим объемом оперативной памяти, в которой хранятся заранее подготовленные данные. Это могут быть результаты сложных запросов к БД или же отрендеренные динамические части страниц сайта. На самом деле, кеш, как и любая другая система, может использоваться как угодно, чтобы удовлетворить нужды приложения.

Суть кеширования проста.
Total votes 53: ↑43.5 and ↓9.5 +34
Views 3.1K
Comments 90

Теория кэша (часть вторая, практическая, дополненная)

Website development *
Это вторая, дополнительная (upd: дополненная), часть моей статьи посвященной кэшированию информации при веб-разработке. Первая имеет название Теория кэша.

UPD: После многочисленных коментариев я сильно переработал статью, внес в неё больше конкретики и примеров, а так же убрал спорные моменты (например, касательно memcached). Спасибо всем, за конструктивную критику.

В данной статье я попытаюсь описать практические стороны кэширования, ориентированные, прежде всего, на сайты и системы управления контентом. Сразу предупреждаю, это мое личное мнение, которое не претендует на истину в последней инстанции. Большинство терминологии — моё, вы можете использовать его, если считаете нужным на своё усмотрение. Конструктивная критика приветствуется.
Читать дальше →
Total votes 71: ↑55.5 and ↓15.5 +40
Views 5.5K
Comments 60

Ускоряем wordpress

WordPress *
Привет.
Думаю, среди читателей хабра найдется немало тех, кто имеет stand-alone blog на движке wordpress.

Так вот, для вас, дорогие мои, у меня есть две новости, как водится, плохая и хорошая.
Плохая состоит в том, что wordpress — довольно-таки тормознутая штука.
Виноваты в этом в основном криворукие производители тем и, особенно, криворукие производители плагинов. Особенно кривой плагин, на мой вкус, wp-ajax-edit-comments, который является образцом быдлокодинга.

Хорошая — в том, что это можно поправить.

Делается это примерно так:
Total votes 63: ↑52 and ↓11 +41
Views 9.6K
Comments 35

О важности кэшей в IT

Entertaining tasks
В обсуждении спонтанно родилась задачка, показалась интересной:

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

Раньше сервис работал на 100 абсолютно одинаковых серверах. Сколько серверов потребуется теперь?

PS: задача не совсем строго сформулирована, но это не должно сильно мешать её решить :)
Total votes 8: ↑7 and ↓1 +6
Views 496
Comments 27

DPI & P2P

Lumber room
Все мы знаем, что DPI-решения операторы чаще всего покупают для урезания, а то и полной блокировки P2P-трафика (также, в Китае масштабно используется для «порчи» VoIP-трафика). Сюда же наши нелюбимые производители DPI-коробок привносят наличие кучи всяких «полезных» функций: вставка контекстной рекламы, приоритезация «нужного» и много чего ещё. Вообщем-то, придумать можно всё, что душе угодно, т.к. пакет можно анализировать полностью. Правда, с производительностью дела обстоят не так хорошо, как хотелось бы (сейчас существуют коробки с 2-мя 10G интерфейсами); здесь же можно ещё упомянуть качество определения тех же P2P-протоколов. В начале прошлого года EANTC пыталась провести тестирование DPI-систем. Причём, тестирование проводилось бесплатно для производителей оборудования — всё оплачивалось из кармана французской ассоциации звукозаписывающей/звукоохраняющей мафии. Результаты, мягко скажем, плохие :) 
    Ситуация получилась аналогична той, что есть на рынке антивирусов — протоколы P2P меняются/появляются новые, а производители DPI-систем выпускают сигнатуры для их определения. Например, взять всем известный протокол BitTorrent: если для передачи информации всегда использовался TCP, то теперь поддерживается и UDP, чем существенно усложнит жизнь dpi-коробкам + поддержка шифрования.
   Но рассказать я вам хотел не про это, а про систему кеширования P2P-контента, с которой мне уже удалось познакомиться: Oversi OverCache. Идея относительно проста: оператор устанавливает у себя кеширующие сервера и систему управления для них. 
  Система управления отвечает за:
  • собирание статистики;
  • управление контентом (выявление популярных ресурсов, удаленее старых непопулярных ресурсов);
  • анонсирование доступности контента своим пирам (клиентам со всего адресного пространства оператора);
  • управление кеш-серверами.
    Кеш-сервера раздают контент своим пирам. Причём, размещать сервера можно где угодно (по городам, по узлам и т.д.). 

    Как определяется популярный контент? Просто — для этого на систему управления надо зеркалировать (SPAN,TAP) исходящий к апстримам трафик (достаточно 30%), этот трафик анализируется (eDonkey2k-контент, обращения к torrent-трекерам, хеши файлов и т.д.). Плюс к этому можно добавить «локальный» поиск контента через DHT. Из этой информации уже можно выявить популярный контент, популярные трекеры и сделать какой-то threshold на кеширование/время жизни файлов. Дабы не нарваться на защитников копирайта — система не кеширует файлы полностью: для BitTorrent, к примеру, она не скачивает первый и последний блоки файла, что не позволяет стать системе seed'ом.
   Для flash-видео всё немного сложнее, помимо того, что мы должны перехватывать обращения к видео-сайтам (youtube тот же), мы ещё должны редиректить клиента на локальный кеш-сервер. Не знаю как у вас, а у меня жена и некоторые друзья регулярно смотрят фильмы, используя для этого ВКонтакте.Ру.
   По статистике эффективность решения до 80% процентов попадания в кеш. Бенефиты налицо: провайдер получает свободный аплинк-канал (а при наличии развитой системы кеширования и межрегиональные линки), клиенты получают ускоренную загрузку контента. Весь мир счастлив :)
Total votes 6: ↑6 and ↓0 +6
Views 902
Comments 4

NGINX научился кешировать проксированные запросы

Nginx *
Почти год назад на RIT 2008 Игорем Сысоевым была анонсирована поддержка кеширования в будущих версиях nginx. И вот сегодня вышла новая бета nginx 0.7.44, в которой появилось это долгожданное кеширование

Этот функционал оценят в первую очередь разработчики высоконагруженных систем, для которых операция установления сетевого соединения с backend «дороже» обычной дисковой операции (с точки зрения затраты ресурсов)

На RIT 2008 автор отмечал, что большим преимуществом nginx перед демоном squid, который тоже можно использовать как reverse proxy, является отсутствие стартового торможения, когда squid начинает сканировать директорию с кешем, что в народе называется «давать сквида».

Хочется отметить, что некого подобия кеширования можно было добиться с помощью использования директив proxy_store + try_files, но управлять таким кешем было достаточно сложно и затратно.

Очень интересно было бы услышать отзывы от пользовалелей замонтировавших кеш на SSD-диск.
Total votes 51: ↑49 and ↓2 +47
Views 2K
Comments 47

Explay CMS 3.0 alpha

CMS *
Explay CMSСегодня у меня лопнуло терпение и захотелось показать миру Explay CMS 3.0. Прошло уже 8 месяцев с того момента, как я начал делать 3-ю версию. В январе было готово ядро, только вот тогда еще рано было говорить о том, что на нем можно сделать. CMS свою социальность, естественно, не потеряла, и даже приобрела несколько новых и интересных функций. Сейчас же я расскажу вам о том, что достигнуто. Посмотрите и попробуете, надеюсь, сами:)
Читать дальше →
Total votes 61: ↑48.5 and ↓12.5 +36
Views 1K
Comments 48

Не получается включить кеширование

Lumber room
Нужна помощь. Пытаюсь настроить кеширование с помощью nginx. Конфиг выглядит вот так:

proxy_cache_path /tmp/nginx levels=1:2 keys_zone=CACHE:10m;

server {
listen 80;
....
location /maps/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;

proxy_cache CACHE;
proxy_cache_key "$host$request_uri $cookie_user";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 10m;
proxy_cache_min_uses 1;

proxy_pass backend:8081/maps/;
}
....
}


Директории кеша создаются, в них появляются файлы, но запросы все равно проходят на бакенд (апач) что видно по логам.

Что я делаю неправильно?
Total votes 10: ↑3 and ↓7 -4
Views 209
Comments 1

Кеширование FastCGI-запросов в nginx

Nginx *
Доброе утро, Хабр!

В данной статье я приведу пример конфигурации nginx для кеширования FastCGI-запросов. При желании его можно использовать его для защиты от хабраэффекта, частично от DDoS'а и, как вариант, для облегчения жизни сервера с высокой нагрузкой.
Читать дальше →
Total votes 31: ↑28 and ↓3 +25
Views 26K
Comments 27

ETag спешит на помощь

Client optimization *
Ни для кого не секрет, что в протоколе HTTP, а точнее в той его части, что является ответом с сервера, есть такие замечательные заголовки, как Last-Modified и ETag (Подробнее можно прочитать в спецификации протокола). Призваны они ускорить процесс получения контента с сервера, а точнее избавить клиента от загрузки данных, которые не были изменены с момента предыдущего запроса.

Так вот. Для меня факт существования двух, по-сути одинаковых, механизмов сообщить клиенту изменилось ли содержимое страницы или нет немного настораживал. Немного. Точнее я его не понимал для чего нужен ETag, если мне всегда было достаточно одного Last-Modified и юзкейса для другого я даже и представить не мог (хотя меня этот вопрос, признаться честно, не особо и волновал).
Читать дальше →
Total votes 48: ↑40 and ↓8 +32
Views 36K
Comments 43

Кеширование в Symfony. Идеология HTML-кеширования. Components & partials

Symfony *
За 2.5 года использования symfony мне постоянно приходится сталкиваться с проблемой недопонимания программистами на symfony идеи html-кеширования. Цель этого поста — донести до светлых умов symfony-девелоперов осознание парадигмы использования partials & components.

Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Views 2.9K
Comments 23

Drupal 6. Быстрая организация простого кеширования

Drupal *
Поискал на Хабре и не нашел ничего про использование такого модуля Drupal как cacherouter. Исправляю данное недоразумение, т.к. этот модуль позволяет значительно ускорить работу Drupal даже на таком требовательном хостинге как Majordomo (любит отключать весь аккаунт при превышении нагрузки).

Сам модуль ничего нового и кардинального не преподносит — только позволяет выносить таблицы кеша из БД в другие хранилища, как, например, файловая система, memcache, APC и пр.

Меня, конечно же, давно волнует вопрос, какого х… разработчики Drupal засунули кэш в БД, но рассказ не об этом.
Читать дальше →
Total votes 49: ↑39 and ↓10 +29
Views 1.5K
Comments 23

Кеширование блоков с помощью nginx

Nginx *
nginx + SSIМногим разработчикам знакома ситуация когда кешировать страницы сайта, скажем, на 5-10 минут нельзя всего из-за одного небольшого блочка, актуальность которого нужно поддерживать если не в реальном времени, то с временем «старения» не больше 5-10 секунд. При этом посещаемость сайта продолжает расти, растет время генерации страниц и c этим надо что-то делать…
  • Вариант решения 1: Подкрутить то, до чего не доходили руки последнее полгода. Все Вас поймут и передвинут сроки на другие задачи. Вы будете в роли «Супермена» один спасать сайт от непомерной нагрузки, решая проблему «бесплатно» (без доп. вливаний в оборудование). Вам может пригодиться статья «Тюнинг nginx».
     
  • Вариант решения 2: Улучшить техническую базу (докупить мозгов на сервер, улучшить дисковую систему, поставить под БД отдельный сервер). В принципе проблема не решена, а скорее отложена. Теперь у Вас есть время «окопаться» и подготовиться ко второй волне наплыва нагрузки, она будет больше и накроет сильнее.
     
  • Вариант решения 3: Ваш вариант, о котором я, вероятно, узнаю из комментариев.
     
Позвольте предложить и мне проверенное и относительно простое решение на базе одной из старейших технологий в Web-разработке.
Читать дальше →
Total votes 116: ↑107 and ↓9 +98
Views 14K
Comments 63

Ускоряем раздачу фоток

Nginx *

С проблемой медленной отдачи статического контента рано или поздно сталкивается каждый сисадмин.

Проявляется это приблизительно так: иногда 3Kb картинка грузится так, как будто бы она весит 3Mb, на ровном месте начинают «залипать» (отдаваться очень медленно) css-ы и JavaScript-ы. Вы нажимаете ctrl + reload — и уже, вроде, проблемы нет, потом спустя всего несколько минут все повторяется опять.

Не всегда истинная причина «тормозов» очевидна и мы косо поглядываем то на nginx, то на хостера, то на «забитый» канал, то на «тормозной» или «глючный» браузер :)

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

В этой статье я предложу Вам свое решение этой проблемы, основанное на практическом опыте использования SSD дисков совместно с web-сервером nginx.
Читать дальше →
Total votes 128: ↑126 and ↓2 +124
Views 13K
Comments 69

Повышение производительности за счет блочного кеширования

High performance *
Тема блочного кеширования и ssi не раз проскакивала на Хабре. Ниже я представлю еще одну реализацию, использующего блочное кеширование, а также исходники фреймворка, использующего эти принципы, которые можно найти тут. А как это работает — прочитать ниже.
схема кеширования блоками
Читать дальше →
Total votes 56: ↑49 and ↓7 +42
Views 5.3K
Comments 60

Кеширование в Spring Framework 3.1

Java *
Я могу ошибаться, но мне кажется что всем хорошо известный Spring Framework достиг своей вершины к версии 2.5 (когда внедрили активное использование аннотаций) и дальше идет по сути дела «полировка» — даже major-релиз 3.0 не сильно отличается от 2.5. Тоже самое можно сказать и про грядущий 3.1 — небольшие улучшения, фишечки — но не более того. Однако одна «фишечка» в 3.1 показалась мне особенно интересной — это кеширование.
image
Читать дальше →
Total votes 43: ↑39 and ↓4 +35
Views 27K
Comments 12