Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Look up keyword
Like this
7Activity
0 of .
Results for:
No results containing your search query
P. 1
Web Caching and Memcached

Web Caching and Memcached

Ratings:

4.5

(2)
|Views: 4,424 |Likes:
Published by Smirnov.Andrey3165

More info:

Published by: Smirnov.Andrey3165 on Oct 31, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/21/2014

pdf

text

original

 
1
Web, кэширование и memcached
Смирнов Андрей (NetStream) / HighLoad++ 2008Контакты:smira@netstream.ru,http://smira.ru 
Оглавление
Введение....................................................................................................................................1Memcached и кэширование.......................................................................................................2Принцип локальности...........................................................................................................2Memcached.............................................................................................................................3Общая схема кэширования...................................................................................................3Архитектура memcached.......................................................................................................4Потеря ключей......................................................................................................................4Ключ кэширования...................................................................................................................5Кластеризация memcached........................................................................................................6Атомарность операций в memcached.......................................................................................7Счетчики в memcached.............................................................................................................8Счетчик просмотров.............................................................................................................8Счетчик онлайнеров..............................................................................................................9Проблема одновременного перестроения кэшей...................................................................10Блокировки в memcached....................................................................................................11Сброс группы кэшей...............................................................................................................12Тэг кэша...............................................................................................................................13Версии тэгов........................................................................................................................13Статистика работы memcached...............................................................................................14Slab-аллокатор.....................................................................................................................14Отладка проектов, использующих memcached......................................................................16Межъязыковое взаимодействие с помощью memcached......................................................16Материалы...............................................................................................................................17
Введение
Эта статья была написана на основе материалов одноименного доклада
1
наконференции HighLoad++ (2008). Для начала, о названии статьи: в статье пойдетречь и о кэшировании в Web’е (в высоконагруженных Web-проектах), и о приме-нении memcached для кэширования, и о других применениях memcached в Web-проектах. То есть все три составляющие названия в различных комбинациях бу- дут освещены в этой статье.Кэширование сегодня является неотъемлемой частью любого Web-проекта,не обязательно высоконагруженного. Для каждого ресурса критичной для поль-зователя является такая характеристика, как время отклика сервера. Увеличениевремени отклика сервера приводит к оттоку посетителей. Следовательно, необхо-
 
1
 http://www.smira.ru/2008/10/08/highload-plus-plus-2008/ 
 
2
 димо минимизировать время отклика: для этого необходимо уменьшать время,требуемое на формирование ответа пользователю, при этом для формированияответа пользователю необходимо получить данные из каких-то внешних ресурсов(backend). Этими ресурсами могут быть как базы данных, так и любые другие от-носительно медленные источники данных (например, удаленный файловый сер-вер, на котором мы уточняем количество свободного места). Для генерации однойстраницы достаточно сложного приложения нам может потребоваться совершить десятки подобных обращений. Многие из них будут быстрыми: 20 мс и меньше,однако всегда существует некоторое небольшое количество запросов, время вы-числения которых может исчисляться секундами или минутами (даже в самой оп-тимизированной системе они могут быть, хотя их количество должно быть мини-мально). Если сложить всё то время, которое мы затратим на ожидание результа-тов запросов (если же мы будем выполнять запросы параллельно, то возьмем вре-мя вычисления самого долгого запроса), мы получим неудовлетворительное вре-мя отклика.Решением этой задачи является кэширование: мы помещаем результат вы-числений в некоторое хранилище (например, memcached), которое обладает от- личными характеристиками по времени доступа к информации. Теперь вместообращений к медленным, сложным и тяжелым backend’ам нам достаточно вы-полнить запрос к быстрому кэшу.
Memcached и кэширование
Принцип локальности
Кэш или подход кэширования мы встречаем повсюду в электронных уст-ройствах, архитектуре программного обеспечения: кэш ЦП (первого и второгоуровня), буферы жесткого диска, кэш операционной системы, буфер в автомаг-нитоле. Чем же определяется такой успех кэширования? Ответ лежит в
принципе локальности
: программе, устройству
свойственно
в определенный промежутоквремени работать с некоторым подмножеством данных из общего набора. В слу-чае оперативной памяти это означает, что если программа работает с данными,находящимися по адресу 100, то с большей степенью вероятности следующее об-ращение будет по адресу 101, 102 и т.п., а не по адресу 10000, например. То же са-мое с жестким диском: его буфер наполняется данными из областей, соседних поотношению к последним прочитанным секторам, если бы наши программы рабо-тали в один момент времени не с некоторым относительно небольшим наборомфайлов, а со всем содержимым жесткого диска, буфер жесткого диска был бы бес-смысленным. Буфер автомагнитолы совершает упреждающее чтение с диска сле- дующих минут музыки потому, что мы, скорее всего, будем слушать музыкальныйфайл последовательно, а не перескакивать по набору музыки и т.п.В случае web-проектов успех кэширования определяется тем, что на сайтеесть всегда наиболее популярные страницы, некоторые данные используются навсех или почти на всех страницах, то есть существуют некоторые выборки, кото-рые оказываются затребованы гораздо чаще других. Мы заменяем несколько об-ращений к backend’у на одно обращение для построения кэша, а затем все после- дующие обращения будем делать через быстро работающий кэш.Кэш всегда лучше, чем исходный источник данных: кэш ЦП на порядкибыстрее оперативной памяти, однако мы не можем сделать оперативную память
 
3
такой же быстрой, как кэш – это экономически неэффективно и техническисложно. Буфер жесткого диска удовлетворяет запросы за данными на порядкибыстрее самого жесткого диска, однако буфер не обладает свойством запоминать данные при отключении питания – в этом смысле он хуже самого устройства.Аналогичная ситуация и с кэшированием в Web’е: кэш быстрее и эффективнее,чем backend, однако он обычно в случае перезапуска или падения сервера не мо-жет сохранить данные, а также не обладает логикой по вычислению каких-либорезультатов: он умеет возвращать лишь то, что мы ранее в него положили.
Memcached
Memcached представляет собой огромную хэш-таблицу в оперативной па-мяти, доступную по сетевому протоколу. Он обеспечивает сервис по хранениюзначений, ассоциированных с ключами. Доступ к хэшу мы получаем через про-стой сетевой протокол, клиентом может выступать программа, написанная напроизвольном языке программирования (существуют клиенты для C/C++, PHP,Perl, Java и т.п.)Самые простые операции – получить значение указанного ключа (get), ус-тановить значение ключа (set) и удалить ключ (del). Для реализации цепочкиатомарных операций (при условии конкурентного доступа к memcached со сто-роны параллельных процессов) используются дополнительные операции: инкре-мент/декремент значения ключа (incr/decr), дописать данные к значению ключав начало или в конец (append/prepend), атомарная связка получения/установкизначения (gets/cas) и другие.Memcached был реализован Брэдом Фитцпатриком (Brad Fitzpatrick) в рам-ках работы над проектом ЖЖ (LiveJournal). Он использовался для разгрузки базы данных от запросов при отдаче контента страниц. Сегодня memcached нашел своёприменение в ядре многих крупных проектов, например, Wikipedia, YouTube,Facebook и другие.
Общая схема кэширования
memcachedBackend
: БД, и т.п.
FrontendmemcachedmemcachedBackend
: БД, и т.п.
FrontendBackend
: БД, и т.п.
Backend
: БД, и т.п.
FrontendFrontend
 Рисунок 1
В общем случае схема кэширования выглядит следующим образом:frontend’у (той части проекта, которая формирует ответ пользователю) требуетсяполучить данные какой-то выборки. Frontend обращается к быстрому, как гепард,серверу memcached за кэшом выборки (get-запрос). Если соответствующий ключбудет обнаружен, работа на этом заканчивается. В противном случае следует об-

Activity (7)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
shor79 liked this

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->