Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога

Цветик-семицветик ... Velocity... или зачем нам еще один Distributed Cache?

Лети, лети, лепесток,
Через запад на восток,
Через север, через юг,
Возвращайся, сделав круг.
Лишь коснешься ты земли -
Быть по моему Вели!

Что же нам говорит об этом "последнем - седьмом лепестке" официальная страница компании Microsoft :

Velocity - это распределенная в памяти платформа,  предназначенная для разработки масштабированных, высокопроизводительных приложений. Velocity может кешировать любой CLR объект и обеспечивает доступ к ним через простой API. Главное назначение Velocity - это обеспечение производительности, масштабируемости и доступности.

Velocity  связывает память множества компьютеров для того, чтобы предоставить единственное объединенное представление кэша для приложения. Приложения могут хранить любые специализированные CLR объекты, не беспокоясь о том, где именно хранятся объекты.

Масштабируемость может быть достигнута просто добавлением большего числа компьютеров в случае необходимости.

Velocity также позволяет хранить копии данных на разных серверах кластера, таким образом, защищая данные от потери в случае отказа работы какого-нибудь из серверов.

Velocity  может быть сконфигурирована как сервис и работать вне сети или может быть запущен  embedded с распределенными приложениями...

Velocity  включает провайдер ASP.NET сессии, который позволяет объектам сессии ASP.NET быть сохраненными в распределенном кеше, не используя БД. Это увеличивает производительность и масштабируемость ASP.NET приложений.

Когда вы используете "Velocity," вы можете вернуть данные, используя ключи или другие идентификаторы, теги. "Velocity" поддерживает оптимистическую и пессимистическую  модель разрешения конфликтов и различные кеш конфигурации.

Все вышеописанное не является новинкой и реализовано в разной степени в других продуктах. Хотя то, что Майкрософт наконец-то обратила на эту нишу внимание, заслуживает уважение. Скорее всего причиной стало продвижение таинственной платформы, позволяющей воспользоваться ресурсами нескольких миллионов серверов компании, разбросанных по множеству дата-центров по всему миру. (Я писал о Red Dog в предыдущих постах.)

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

Итак, что мы имеем...

Начнем с культового продукта memcached - именно его использует всем известный Web-ресурс с многомиллионной аудиторией пользователей  Live Journal. (Описание архитектуры портала и ПО, используемого для его функционирования, можно найти по линку Архитектура LiveJournal)

Созданный при решении практических проблем на реальном портале в боевых условиях он оказался настолько популярным, что несомненно возглавил список Distributed Cached систем. Ко всему этому баллы в корзину популярности добавила его опенсорность и готовность работать на самых популярных языках web-программирования, в том числе C#.

Из недостатков могу отметить его функциональную простоту  и "одно-полярность", ориентированную на Unix платформы, хотя решение для Windows также существует и прекрасно функционирует. Информацию об этом продукте можно найти по адресу http://www.eu.socialtext.net/memcached/index.cgi , http://www.insight-it.ru/unix-way/obzor-memcached/

Очень большое количество рынка занимают Java ориентированные решения. Вот некоторые из них...

Компания Apache в рамках Jakarta Project(часть ASF) предоставляет opensource проект Java Caching System. Проект написан на Java позволяет управлять памятью, контролировать  дисковое переполнение и выполнять де-фрагментацию, группировать элементы, обеспечивает минимальные зависимости, выставление времени жизни и т.д.

Решение от компании JBOSS: JBoss Cache - предназначен для Java ориентированных фреймворков. Реплицируемый кеш, обеспечивает  синхронизацию в кластере, он также обеспечивает высокую отказоустойчивость, транзакционность, механизм вытеснения, а также другие полезные фичи.  Является Opensource проектом, поддерживающим LGPL лицензию.

Компания ORACLE предлагает свое решение - Oracle Coherence. Продукт обеспечивает масштабируемость приложений с прогнозированием, улучшенные уровни обслуживания, обеспечивает Extreme Transaction Processing (XTP). При этом они предоставляют клиент как под платформу JVM, так и под платформу .NET.

Перечислю другие решения использующие JVM:

OSCache, EHCache, JCache, ShiftOne Java Object Cache, SwarmCache, WhirtlyCache, Jofti, Cache4j, Open Terracotta ....

Все они схожи и в большинстве случаев дублируют друг друга, имея один "большой недостаток" - однополярность, ориентированную на JVM.

Теперь, хотелось бы упомянуть продукт, который также является, своего рода, культовым для платформ .NET - NCache http://www.alachisoft.com/ncache/ (не путать с китайским однофамильцем ncache). Первый релиз этой системы был выпущен 11 июля 2005 года. Продукт платный, но имеет ограниченные бесплатные версии. Как и все вышеуказанные позволяет кешировать объекты в ОЗУ на кластере. Его особенностью является ориентация на платформу .NET  и то, что почти с первых же версий он легко интегрируется с Enterprise Library.

Один из партнеров, а теперь и конкурентов компании Microsoft, компания Scaleout Software предлагает свой продукт SOSS. Он был представлен еще в 2005 году, компания прилично продвинулись в создании масштабируемых решений и показывает неплохие результаты в подобных решениях.

Есть также еще одно opensource решение написанное полностью на управляемом коде .NET  - SHARED CACHE.  При этом создатели продукта делают также, аналог и под платформу mono, но пока это решение не доступно.

Итак пробежавшись по основным известным продуктам становится ясно, почему Майкрософт выбрала это направление .... из всех продуктов нашелся только один бесплатный, который написан на .NET и имеет открытые исходники. Большая часть решений ориентирована на LAMP и только малая часть на WISC(Windows IIS MS SQL C#). Ну и конечно причина о которой сейчас мало говорят, а ребята с майкрософт вообще молчат - это выход платформы, которая по своей сути представляет собой супер распределенную систему. Как раз для ее нормального и стабильного  функционирования не хватает продукта под названием Velocity.

Почему же раньше такой проблемы не возникало? Да потому что существовали инструменты, которые косвенно решали эти проблемы - это хранение сессии в State Servere или MSSQL сервере. Конечно, при больших нагрузках они также не спасали, но... в принципе с помощью оптимизации архитектуры приложения и различных других приемов, удавалось вывести приложение на более менее достойный уровень производительности. В крайнем случае можно было воспользоваться тем же memcached или его аналогом.

Итак шаг сделан..., как же выглядит "дорожная карта" продукта?

VeloCitySchedule

 

Давайте посмотрим на основные заявленные особенности velocity:

  • Позволяет кешировать любые сериализуемые объекты CLR и обеспечивает доступ к ним через простое API
  • Поддерживает масштабирование десятков на сотни компьютеров.
  • Может быть сконфигурирован как сервис и работать вне сети или может быть запущен  embedded с распределенными приложениями.
  • Поддерживает общую конфигурацию кеша.
  • Поддерживает динамические вычисление, добавляя узлы.
  • Конфигурируемое число резервных копий, обеспечивающих высокую отказоустойчивость.
  • Автоматическая балансировка нагрузки.
  • Интеграция с инструментами администрирования и мониторинга, такими как ETW, System Center, и т.д. 
  • Предоставляет тесную интеграцию с платформой ASP.NET, позволяя кешировать сессионные данные в кеш без необходимости писать данные в БД. Также, он может использоваться как кеш, для любых сериализируемых данных приложения, имея возможность хранить объекты  запрашиваемые любым из серверов Web фермы. 
  • Совместим с cache-aside архитектурами (также извесными как Explicit Caching) для V1.
  • Поддержка множества языков разработки(PHP, C#, C++, и т.д.).

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

Прежде чем начать разбираться с продуктом, я рекомендовал бы прочитать статью в MSDN: Microsoft Project Code Named “Velocity”, в которой детально рассказаны основы и особенности продукта.

Скачать продукт можно по адресу: VELOCITY,  также,  уже сейчас, есть возможность посмотреть инструкцию к установке.

Блог команды Velocity находится по  адресу: http://blogs.msdn.com/velocity/

С примерами использования продукта есть возможность познакомится по адресу: http://code.msdn.microsoft.com/velocity

Форум посвященный продукту находится по адресу: http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=2142&SiteID=1

Настоятельно рекомендую всем архитекторам, а также ведущим разработчикам, уже сейчас, обратить внимание на этот продукт, а тех, кому на детальное исследование не хватает времени, приглашаю на ближайшую встречу юзер группы профессиональных разработчиков на платформе .NET "UNETA", на которой и будет разобран более детально этот "чудо цветок".

 

Публикации по тематике

Опубліковані Wednesday, July 16, 2008 4:08 PM від Leshchinsky

Коментарі

# re: Цветик-семицветик ... Velocity... или зачем нам еще один Distributed Cache?

Wednesday, July 16, 2008 8:22 AM by Leshchinsky

Кроме этого memcache используют такие системы как:   Slashdot, Facebook, Digg, Flickr. Wikipedia, YouTube, New York Times....

# re: Цветик-семицветик ... Velocity... или зачем нам еще один Distributed Cache?

Friday, July 18, 2008 1:54 AM by slash

интересная вещь, пока использовал только memcache и EnterpriseLibrary.Caching

# re: Цветик-семицветик ... Velocity... или зачем нам еще один Distributed Cache?

Tuesday, July 22, 2008 4:05 AM by Leshchinsky

Приглашаем всех на встречу UG UNETA. На встрече есть возможность более детально познакомится с  VELOCITY! http://dev.net.ua/blogs/katerinadrobotko/archive/2008/07/22/6520.aspx

# re: Цветик-семицветик ... Velocity... или зачем нам еще один Distributed Cache?

Wednesday, July 23, 2008 4:27 AM by Leshchinsky

Scott Watermasysk опубликовал рекомендации по использованию распределенного кэша Velocity. Ребята применили этот продукт в Community Server. Заметок немного и я рекомендую всем просмотреть их ..

Distributed Caching - Strategies and Tips

http://simpable.com/code/distributed-caching/

# re: Цветик-семицветик ... Velocity... или зачем нам еще один Distributed Cache?

Monday, July 28, 2008 2:41 AM by Leshchinsky

Выложил презентацию с примерами применения Velocity с встречи UNETA, о которой я писал выше в комментариях (http://uneta25072008.events.live.com/ )

Скачать архив ест возможность по адресу: http://dev.net.ua/files/folders/unetameetings/entry6548.aspx

Фото с встречи находятся по адресу: http://uneta25072008.events.live.com/photos/cns!9023152EEF5D8!111/?startingImageIndex=15&commentsExpand=0&addCommentExpand=0&addCommentFocus=0&pauseSlideshow=0

Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.