Александр Соловьёв, griddynamics.com

16
Cassandra vs. InMemory Data Grid in eCommerce Соловьев Александр [email protected]

Upload: ontico

Post on 26-Jun-2015

540 views

Category:

Documents


1 download

DESCRIPTION

Highload++ 2013

TRANSCRIPT

Page 1: Александр Соловьёв, Griddynamics.com

Cassandra  vs.  In-­‐Memory  Data  Grid    in  e-­‐Commerce

 Соловьев  Александр  [email protected]  

Page 2: Александр Соловьёв, Griddynamics.com

Пилотный  проект:  перевод  иерархического  online-­‐каталога  продуктов  на  Cassandra Предыдущая  версия  каталога  построена  на  In-­‐Memory  Data  Grid  Oracle  Coherence.  Данные  из  основного  хранилища  (DB2)  загружаются  в  кластер  Coherence,  и  в  дальнейшем  читаются  только  оттуда.    Основные  цели  миграции:  • Минимизация  времени  рестарта  кластера  • Как  минимум  две  копии  данных  в  двух  разных  дата-­‐центрах  • Быстрое  восстановление  из  бэкапа    

Page 3: Александр Соловьёв, Griddynamics.com

Очень  вкратце  об  архитектуре  решения

• Сервер  приложений:  бизнес-­‐логика  +  web-­‐сервисы  •  …плюс  Coherence  near  (local)  cache  •  несколько  узлов  за  балансировщиком  нагрузки.  

• Coherence  IMDG  как  хранилище  данных    

Page 4: Александр Соловьёв, Griddynamics.com

Какой  должна  быть  система,  чтобы  решать  эти  задачи? Некоторые  идеи:  • Хранение  данные  на  диске,  это  сделает  данными  доступными  сразу  же  после  старта.  Дисковый  кэш  ОС  должен  быть  включен.  • Key-­‐value  storage    Дополнительные  пожелания:  • Простая  схема  развертывания  •  Java-­‐based  

Page 5: Александр Соловьёв, Griddynamics.com

Основные  варианты,  из  которых  делался  выбор • MongoDB  

•  exclusive  lock-­‐on-­‐write  на  уровне  коллекции  •  сложная  схема  деплоймента:  несколько  типов  узлов  •  Single  Point  Of  Failure  –  config  servers  •  non-­‐Java  

• HBase  •  изначально  построена  для  аналитики  •  Single  Point  Of  Failure  –  namenodes  •  сложный  деплоймент  

Page 6: Александр Соловьёв, Griddynamics.com

Основные  варианты,  из  которых  делался  выбор • Cassandra  

•  Простая  схема  кластера  (только  один  тип  узлов)  •  no  Single  Point  Of  Failure  •  Поддержка  нескольких  дата-­‐центров  «из  коробки»  •  Поддерживает  частичные  обновления  по  ключу  •  Была  достаточно  быстра  на  тестах…  в  случае,  если  объем  данных  не  больше,  чем  оперативная  память  на  всех  серверах  •  Написана  на  Java  

• Coherence  +  backing-­‐map  с  хранением  данных  на  диске  

Page 7: Александр Соловьёв, Griddynamics.com

Основные  требования  и  сценарии

•  Запросы  на  чтение:  5000  TPS  •  запрос  может  включать  в  себя  несколько  последовательных  обращений  к  хранилищу  данных  •  запрос  может  содержать  несколько  ключей  (mul�-­‐gets)  

• Поддержка  частичных  обновлений  по  ключу  • Обновление  всех  данных  раз  в  сутки  • Availability  24x7  • Размер  каталога  –  десятки  миллионов  ключей:  продукты,  их  атрибуты  и  т.д.  

Page 8: Александр Соловьёв, Griddynamics.com

Популярный  вопрос:  «Зачем  так  сложно?»

«Давайте  возьмем  MySQL,  покрытый  кэшом.  Или  что-­‐нибудь  еще  проще  –  свое  файловое  хранилище»    Да,  это  было  бы  хорошим  вариантом,  но:  • Нужна  масштабируемость  • Мы  хотим  хранить  копии  данных  в  двух  дата-­‐центрах  

Page 9: Александр Соловьёв, Griddynamics.com

Вкратце  о  Cassandra

• Распределенное  key-­‐value  хранилище  • Модель  хранения  данных  на  базе  столбцов  •  Eventually  consistent?  -­‐  Tunable  consistency  • Построена  на  Log-­‐Structured  Merge  Tree    h�p://en.wikipedia.org/wiki/Apache_Cassandra  h�p://cassandra.apache.org/  

Page 10: Александр Соловьёв, Griddynamics.com

Еще  раз  об  архитектуре  решения

• Сервер  приложений:  бизнес-­‐логика  +  web-­‐сервисы  •  …плюс  локальные  кэши  на  борту  •  Несколько  узлов  за  балансировщиком  нагрузки.  

• Cassandra  как  хранилище  данных  •  DataStax  Java  Driver  для  сервера  приложений  

 

Page 11: Александр Соловьёв, Griddynamics.com

Как  тестировали  на  производительность

• Produc�on-­‐ready  реализация  •  4  сервера  (16  CPU,  24  GB)  x  1  Cassandra  instance  •  2  сервера  x  2  app  servers  •  100  GB  тестовых  данных  • Основной  тест  –  запросы  на  чтение  

•  длительность  теста  –  1  час  •  до  500  «пользователей»  •  равномерное  распределение  запрашиваемых  элементов  

Page 12: Александр Соловьёв, Griddynamics.com

Что  улучшило  производительность

• Корректно  настройте  ваш  Cassandra-­‐кластер:  •  выключить  swap  •  commit  log  и  данные  -­‐  на  разных  дисках  •  берем  «правильный»  network  interface  

•  Асинхронные  запросы  для  нескольких  ключей  +  token-­‐aware  rou�ng  на  стороне  сервера  приложений:  +15%  TPS  

• Используйте  последнюю  версию  Cassandra  •  Пример:  v.  1.2.6  =>  v.  1.2.8  =  +15%  TPS,  +2x  latency    

Page 13: Александр Соловьёв, Griddynamics.com

Что  улучшило  производительность

• Ключ  «родительского»  объекта  как  первый  компонент  составного  ключа  для  дочерних  объектов:  PRIMARY  KEY  (parent-­‐ID,  child-­‐ID).  •  уменьшает  число  запросов  к  Cassandra  и  дисковую  активность  •  +15%  TPS,  +2x  latency  

• Локальные  кэши  на  серверах  приложений:  +15%  TPS  

Page 14: Александр Соловьёв, Griddynamics.com

Интересные  факты

• Мониторинг  GC  на  узлах  кластера  Cassandra  •  на  рекомендованных  настройках  все  достаточно  хорошо  J  

• Кэширование  всех  данных  в  памяти  JVM  Cassandra  (caching  =  ALL)  почти  не  улучшило  результаты  –  данные  в  дисковом  кэше  ОС  • Хранение  данных  в  собственном  формате  (например,  JSON),  если  не  требуется  частичного  обновления  •  позволяет  избежать  создания  большого  числа  tombstones,  если  частью  значений  являются  Cassandra-­‐коллекции  

•  token-­‐aware  маршрутизация  запросов  к  кластеру  

Page 15: Александр Соловьёв, Griddynamics.com

Как  итог:

• Cassandra  –  достаточно  зрелый  и  стабильный  продукт  • Сравнима  по  производительности  с  In-­‐Memory  Data  Grid’ами,  если  суммарный  объем  данных  не  больше,  чем  общая  память  кластера  • Активно  развивается.  Имеет  большое  community.  Достаточно  хорошая  платная  поддержка  от  DataStax.  

Page 16: Александр Соловьёв, Griddynamics.com

Спасибо!  

   

…и  ваши  вопросы  J