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

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

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

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

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

    UPD:

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

    Что стало:
    1. 0 файлов кеша
    2. 400 МГ выделено под memcached (срок хранения данных в кеше — неделя)
    3. 0 запросов на чтение-запись кеша.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 22

      0
      А где конкретные цифры ?
        0
        Какие именно цифры вас интересуют?
          0
          UPD. Добавил некоторые данные
        0
        Смесь бояна с велосипедом.
        Да и вообще кэшировать данные в файлах чтобы (как я понял) полегчало мускулю - это как-то странно.
          0
          Меняли тип кэшировния не с целью разгрузить базу, а с целью упорядочить кэширование. База разгрузилась как следствие, чему были очень рады.
            +1
            Не странно в некоторых случаях. Например нет никаких причин нагружать БД теми-же результатами поиска или облаком тегов, не говоря уже о полностью или частично сгенеренных страницах.
            0
            Было бы неплохо указать, какие запросы делали нагрузку и как они были закешированы
              0
              В основном проблема была с почтой - на каждой странице нужно было выводить, сколько есть новых сообщений, сколько всего, тип нового сообщения. Таблица сообщений была громадная (около 5 гб). Были созданны файлы для каждого пользователя, в которых содержалась эта выборка, они изменялись синхронно с изменением в базе, и из них тянули информацию.

              После разбиения на несколько таблиц эту одну супер табкицу, нагрузка немного ушла. После установки memcached нагрузка исчезла вообще.
            • UFO just landed and posted this here
                0
                Со своей дилетантской колокольни, я думаю, что memcached это не панацея. Поправьте ежели что.
                  0
                  Панацеии не существует как абсолютного зла или абсолютного добра
                  Как вообще всего абсолютного
                  +1
                  2yurka:
                  чтобы еще разгрузить БД попробуйте хотя бы ADOBD (он умеет кэшировать результаты запросов в memcached).. для средних проектов - самое то ;)
                  с версии 4.92 29 ADODB умеет работать с memcached
                    0
                    Спасибо за совет, посмотрю, что это за зверь такой, ADOBD ...
                      0
                      ADODB.. опечатка, сорри :)
                    +2
                    > срок хранения данных в кеше - неделя
                    вот это довольно спорно. Срок хранения должен зависеть от природы данных. Скажем совсем статичные данные(конфиги скажем) можно кешировать и на месяц, а инфорация которая изменяется(тоже количество сообщений) нужно кешировать осторожно и обновлять кеш при изменении данных.
                      0
                      Согласен с вами. Поэтому сейчас мы вносим в кэш данные на неделю в том случае, если они не изменяются. При любом изменении данных пользователя, кэш данного пользователя обнуляется. Сначала пытались изменять кэш "на лету", но как вы и написали, это вызывало кучу неточностей в кэше.

                      Спасибо, что подтвердили мои мысли, теперь я более уверен в последних изменениях.
                      UPD - нагрузка, и при варианте изменений "на лету", и при обнулении кэша, гораздо ниже, чем при файловом кэшировании, и практически не ощутима.
                      +1
                      когда кэш 400M и хранится на той же машине, это хорошо. А когда он начнет разрастаться на несколько серверов, то всё будет не столь однозначно.
                        0
                        В данном случае подразумевается рост посещаемости/нагрузки на основной сервер ? В таком случае уже надо будет искать другие пути решения - выделения серверов для memcached, бд, apache например. Тогда уже будут и другие решения, не знаю, не сталкивался, но после первого знакомства с memcached, мне не кажется, что именно он будет делать особые проблемы...
                        0
                        400 Mb под memcached - это замечательно. Но если посмотреть документацию, то выясним, что memcached не гарантирует, что запрашиваемая страница хранится в кэше.
                          0
                          при чем здесь? memcached это просто хранилище данных в RAM, а что туда класть - ваше личное дело.
                            0
                            Я говорю о том, что memcached действительно дает огромный выигрыш в скорости, но при этом, как хранилище данных, memcached абсолютно не надежен. Очень неприятная ситуация, когда вы положили данные в кэш, и затем пытаетесь обратиться к этим данным, а их уже нет - данные потеряны. Причем я говорю опираясь на опыт применения memcached в реальных проектах - мы сталкнулись с проблемой потери данных. И решить эту проблему не получилось - memcached не гарантирует что данные не будут потеряны. Нам пришлось отказаться от использования memcached и хранить кэш данных в БД под управлением Oracle.
                              +1
                              а. да, не гарантирует, потому что использует вытесняющее кеширование.

                              Тут сама архитектура приложения должна быть такой, чтобы оно работало вообще при отключенном кеше, иначе нет смысла использовать memcache.

                        Only users with full accounts can post comments. Log in, please.