memcached
Download
Skip this Video
Download Presentation
Memcached

Loading in 2 Seconds...

play fullscreen
1 / 21

Memcached - PowerPoint PPT Presentation


  • 158 Views
  • Uploaded on

Memcached. Приемы реализации высоконагруженных систем. Что такое Memcached. Это хранилище записей в формате ключ-значение, где ключом является строка, а данные представляют собой неинтерпретируемый массив байтов. Free & open source Высокопроизводительная Распределенная система

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Memcached' - tavia


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
memcached

Memcached

Приемы реализации высоконагруженных систем

memcached1
Что такое Memcached
  • Это хранилище записей в формате ключ-значение, где ключом является строка, а данные представляют собой неинтерпретируемый массив байтов.
    • Free & open source
    • Высокопроизводительная
    • Распределенная система
    • Широкого назначения
      • Прежде всего – для ускорения работы веб-приложений за счет снижения нагрузки на базу данных
      • Кешированиерезультатров запросов к БД, вызовов внешних API, отрендеренных страниц и др.
    • Простота применения
      • Простые API
slide3
Использование
  • Реализации клиентских библиотек для многих языков программирования (C / C++, PHP, Java, Python, Ruby, Perl, .NET, MySQL, PostgreSQL, Erlang, Lua, и др.)
  • Используется в: YouTube LiveJournal, Wikipedia/Wikimedia, Amazon.com, Wikia,SourceForge, Metacafe,Facebook, Twitter, Fotolog, The Pirate Bayetc.
slide4
Концепция и архитектура
  • Клиент(ы)-сервер(ы)
  • Серверы поддерживают ассоциативный массив (ключ-значение)
    • Ключи - до 250 байт
    • Значения – до 1 мегабайта
  • Клиенты заполняют массив данными, в дальнейшем их запрашивают
  • Клиенты используют специальные библиотеки доступа для контакта с сервером, по умолчанию с портом 11211
  • Каждый клиент имеет информацию о всех серверах
  • Серверы не взаимодействуют между собой
  • Логика хранения распределяется между клиентом и сервером
    • Для чтения или записи по ключу клиент вычисляет хеш ключа для определения номера сервера
    • Обращается к серверу
    • Сервер в свою очередь вычисляет хеш ключа для поиска данных во внутренних структурах
slide5
Концепция и архитектура
  • На сервере значения хранятся в RAM
  • Если память заканчивается, то старые значения удаляются (алгоритм least recently used (LRU))
  • Memcached надо рассматривать как промежуточное хранилище, нужного объекта в нем может и не оказаться
    • Расширение MemcacheDB поддерживает постоянное хранение
  • Типичная среда – несколько серверов и множество клиентов, однако, ничего не мешает клиенту и серверу находиться на одной машине
  • Время выполнения определенного операций – примерно постоянная величина
    • Существенных задержек нет
  • Конструктивно memcached выполнен как отдельный процесс, взаимодействие с которым ведётся через сокеты по простому протоколу на базе «сырых» TCP или UDP.
  • Немного упрощаяя, можно сказать, что memcached это удалённая реализация интерфейса java.util.Map на базе хэш-таблицы.
slide6
Для чего может применяться
  • PHP или Perl
    • серьёзную проблему представляет то, что на каждый клиентский запрос порождается отдельный экземпляр интерпретатора
    • без использования внешних механизмов два выполняющихся запроса не могут иметь доступ к одним и тем же объектам, так как имеют не связанные между собой адресные пространства
    • Традиционно в мире LAMP для кэширования использовалась база данных
    • HTTP-сессии: либо хранить все сессионные данные в БД, тем самым ещё больше увеличивая на неё нагрузку, либо хранить эти данные локально (в файле), теряя их в случае отказа узла в кластере
slide7
Применение с Java
  • Здесь, в отличие от PHP, всё, что происходит внутри сервера приложений, делит общее адресное пространство, а значит нет никаких трудностей с организацией кэширования, по крайней мере локального.
  • Помещённый в HashMap объект будет оставаться одним и тем же объектом вне зависимости от того, из какого потока будет произведено обращение.
  • Это позволяет локальным кэшам внутри JVM работать на порядки быстрее, чем memcached, поскольку не требует затрат на сериализацию объектов и взаимодействие по сети.
slide8
Применение с Java
  • + memcached в отличие от локального варианта также решает проблему согласованности кэша внутри кластера
  • + это отдельный процесс, а значит он спокойно переживает перезапуск серверов приложений
  • + он более эффективно расходует память, что заметно при хранении большого количества больших объектов
    • Это делает целесообразным хранение в memcached объектов «высокого уровня готовности» типа фрагментов веб-страниц, количество обращений к которым при выполнении одного запроса будет не столь высоким, как если кэшировать отдельные мелкозернисные объекты.
  • +cуществует аппаратная реализацияmemcached от Gear6
    • (в виде отдельной коробочки по формату серверной стойки), которая позволяет хранить гиганский объём данных
memcached java
Использование memcachedиз Java
  • клиентские библиотеки
    • Такой вариант хорошо подходит для «высокоуровневого» кэширования, реализованного на уровне прикладных сервисов или даже презентационной логики.
  • Второй вариант прячет детали работы с memcached внутри привычных механизмов и инструментов
    • Реализация кэша второго уровня Hibernate на базе memcached
    • Реализация менеджера HTTP-сессий Tomcat
slide11
Команды сохранения значения

[noreply]\r\n

cas [noreply]\r\n

=

set / add / replace / append / prepend / cas (check and set)

spymemcached
Библиотека spymemcached
  • MemcachedClient c=new MemcachedClient(
  • new InetSocketAddress("hostname", portNum));
  • // Store a value (async) for one hour
  • c.set("someKey", 3600, someObject);
  • // Retrieve a value (synchronously).
  • Object myObject=c.get("someKey");
spymemcached1
Библиотека spymemcached
  • // Get a memcached client connected to several servers
  • MemcachedClient c=new MemcachedClient(
  • AddrUtil.getAddresses("server1:11211 server2:11211"));
  • // Try to get a value, for up to 5 seconds, and cancel if it doesn't return
  • Object myObj=null;
  • Future f=c.asyncGet("someKey");
  • try {
  • myObj=f.get(5, TimeUnit.SECONDS);
  • } catch(TimeoutException e) {
  • // Since we don't need this, go ahead and cancel the operation. This
  • // is not strictly necessary, but it'll save some work on the server.
  • f.cancel(false);
  • // Do other timeout related stuff
  • }
  • spymemcached2
    Библиотека spymemcached
    • get
    • public Objectget(String key)Get with a single key and decode using the default transcoder.
    • Specified by:get in interface MemcachedClientIFParameters:key - the key to getReturns:the result from the cache (null if there is none)Throws:OperationTimeoutException - if the global operation timeout is exceededIllegalStateException - in the rare circumstance where queue is too full to accept any more requests
    spymemcached3
    Библиотека spymemcached