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

Презентация:



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

Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Низкоуровневые операции в ИС. Сокеты в C#. Понятие сокета Если требуется получить доступ к сетевым операциям низкого уровня, в программе следует использовать.
1 Современные системы программирования. Часть 2. Системное и прикладное программное обеспечение Малышенко Владислав Викторович.
Система контроля прав доступа При помощи процедур и триггеров в MySQL.
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
Дисциплина: Операционные системы § 7. Организация памяти компьютера План: 1.Физическая память компьютера. 2.Логическая память компьютера. 3.Функции системы.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Организация распределенных прикладных систем. Попытаемся ответить на вопросы Как устроены распределенные прикладные системы? Каковы наиболее важные их.
Студенников Валерий Юрьевич Лекции и материалы:
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
Новые возможности Егоров Борис «Школа Инноваций InterSystems 2007»
Сокеты в Perl и PHP. Сокеты в Perl Сокеты являются «конечными пунктами» в процессе обмена данными. Одни типы сокетов обеспечивают надежный обмен данными,
Троицкий Д.И. Интернет-технологии1 ДИНАМИЧЕСКИЕ WEB-СТРАНИЦЫ СЕРВЕРНЫЕ СЦЕНАРИИ Лекция 9 Кафедра «Автоматизированные станочные системы» Dept. of Automated.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – Кэширование вывода страниц Из цикла лекций «Технологии.
Реализация элементов логики приложения в MySQL: триггеры, хранимые процедуры, кэширование Сергей Горшков, технический директор Центра информационных технологий.
О кэшировании. Никогда ничего не кэшируйте Оцените, что надо кэшировать, а что - нет.
Распределенная обработка информации Разработано: Е.Г. Лаврушиной.
1 Концепция Web 2.0 Пользователи становятся активными участниками работы сети. Мы наполняем сеть информацией, сами её организуем, сами определяем параметры.
Архитектура, возможности и методы использования платформы облачных вычислений Microsoft Windows Azure Лекция 3 Основные концепции и архитектура Microsoft.
Транксрипт:

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

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

Использование Реализации клиентских библиотек для многих языков программирования (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 Bay etc.

Концепция и архитектура Клиент ( ы )- сервер ( ы ) Серверы поддериживают ассоциативнный массий ( ключ - значение ) Ключи - до 250 байт Значения – до 1 мегабайта Клиенты заполняют массив данными, в дальнейшем их запрашивают Клиенты используют специальные библиотеки доступа для контакта с сервером, по умолчанию с портом Каждый клиент имеет информацию о всех серверах Серверы не взаимодействуют между собой Логика хранения распределяется между клиентом и серером Для чтения или записи по ключу клиент вычисляет хеш ключа для определения номера сервера Обращается к серверу Сервер в свою очередь вычисляет хеш ключа для поиска данных во внутренних структурах

Концепция и архитектура На сервере значения хранятся в RAM Если память заканчивается, то старые значения удаляются ( алгоритм least recently used (LRU)) Memcached надо рассматривать как промежуточное хранилище, нужного объекта в нем может и не оказаться Расширение MemcacheDB поддерживает постоянное хранение Типичная среда – несколько серверов и множество клиентов, однако, ничего не мешает клиенту и серверу находиться на одной машине Время выполнения определенного операций – примерно постоянная величина Существенных задержек нет Конструктивно memcached выполнен как отдельный процесс, взаимодействие с которым ведётся через сокеты по простому протоколу на базе « сырых » TCP или UDP. Немного упрощаяя, можно сказать, что memcached это удалённая реализация интерфейса java.util.Map на базе хэш - таблицы.

Для чего может применяться PHP или Perl серьёзную проблему представляет то, что на каждый клиентский запрос порождается отдельный экземпляр интерпретатора без использования внешних механизмов два выполняющихся запроса не могут иметь доступ к одним и тем же объектам, так как имеют не связанные между собой адресные пространства Традиционно в мире LAMP для кэширования использовалась база данных HTTP- сессии : либо хранить все сессионные данные в БД, тем самым ещё больше увеличивая на неё нагрузку, либо хранить эти данные локально ( в файле ), теряя их в случае отказа узла в кластере

Применение с Java Здесь, в отличие от PHP, всё, что происходит внутри сервера приложений, делит общее адресное пространство, а значит нет никаких трудностей с организацией кэширования, по крайней мере локального. Помещённый в HashMap объект будет оставаться одним и тем же объектом вне зависимости от того, из какого потока будет произведено обращение. Это позволяет локальным кэшам внутри JVM работать на порядки быстрее, чем memcached, поскольку не требует затрат на сериализацию объектов и взаимодействие по сети.

Применение с Java + memcached в отличие от локального варианта также решает проблему согласованности кэша внутри кластера + это отдельный процесс, а значит он спокойно переживает перезапуск серверов приложений + он более эффективно расходует память, что заметно при хранении большого количества больших объектов Это делает целесообразным хранение в memcached объектов « высокого уровня готовности » типа фрагментов веб - страниц, количество обращений к которым при выполнении одного запроса будет не столь высоким, как если кэшировать отдельные мелкозернисные объекты. +c уществует аппаратная реализация memcached от Gear6 ( в виде отдельной коробочки по формату серверной стойки ), которая позволяет хранить гиганский объём данных

Использование memcached из Java клиентские библиотеки Такой вариант хорошо подходит для « высокоуровневого » кэширования, реализованного на уровне прикладных сервисов или даже презентационной логики. Второй вариант прячет детали работы с memcached внутри привычных механизмов и инструментов Реализация кэша второго уровня Hibernate на базе memcached Реализация менеджера HTTP- сессий Tomcat

Библиотека 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");

Библиотека 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 }

Библиотека spymemcached get public Object get(String key)Get with a single key and decode using the default transcoder.ObjectString 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 requestsgetMemcachedClientIFOperationTimeoutExceptionIllegalStateException

Библиотека spymemcached asyncGet public Future asyncGet(String key)Get the given key asynchronously and decode with the default transcoder.FutureObjectString Specified by:asyncGet in interface MemcachedClientIFParameters:key - the key to fetchReturns:a future that will hold the return value of the fetchThrows:IllegalStateException - in the rare circumstance where queue is too full to accept any more requestsasyncGetMemcachedClientIFIllegalStateException