SlideShare a Scribd company logo
Классификация систем хранения и обработки данных Климов Евгений  aka  Slach www.I-jet. ru   http://slach.livejournal.com
Что общего в архитектуре любого  web- приложения среднего уровня ?   у нас  ~ 2 .2  миллиона  DAU ,  ~40kk php req, avg req time  0 .0 3  ;-) Обработка соединений  (nginx, apache, node.js, tornado  и т.п.) Application Layer  ( php,python,v8, jvm, asp.net  и т.п.) СИСТЕМЫ ХРАНЕНИЯ ДАННЫХ ( filesystem ,  memory, sql, nosql) Наш (и не только) опыт показывает, что практически не важно какую технологию вы используете для  Application Logic,  узким местом является система хранения, причем зачастую не потому что «плохая», а потому что используется не правильно.
Как мы классифицируем системы хранения 1) где и сколько храним данных, протокол Тип хранения Где именно система хранит данные  RAM  (быстро),  SSD, SAS, HDD  во всех проявлениях (медленнее)   Гибрид  RAM+ Диск  (IMHO  оптимально) Доступность по сети  (TCP\UDP ) Ограничение на размер данных Соотношение размер\скорость работы . На текущий момент все рассматриваемые продукты имеют достаточно большие лимиты на максимальный размер данных, но для всех систем хранения есть предел, после которого «активная часть данных» начинает тормозить
Как мы классифицируем системы хранения 2)  что и как пишем Надежность записи (защита от сбоев, допустимая величина потерь , ACID ) Сложность структур данных, доступных для записи (таблицы, объекты, списки, массивы, хеши, деревья и т.п.) Соотношение Размер структуры и Скорость записи в  req/sec Конкурентность и масштабируемость записи (горизонтальная желательно) Возможность проверки консистентности данных на стороне системы хранения   Возможность  BULK (BATCHING)  записи  Возможность асинхронной  (DELAYED)  записи
Как мы классифицируем системы хранения 3 )  что и как читаем Надежность чтения (актуальность данных на момент чтения, допустимые потери актуальности) Сложность языка  (api)  запросов и структур данных, доступных для чтения ( SQL ,  XQuery ,  REST, GET\SET ) Соотношение Размер «порции данных» ( recordset ,  nodeset)  и скорость чтения в  req/sec масштабируемость чтения (горизонтальная желательно) и конкурентность  ( где происходит блокировка,  buzy lock  и т.п.)
Как мы классифицируем системы хранения 4)  как этим управлять Переносимость (доступность для альтернативной  win32  платформы  ; ) и легкость развертывания (пакеты, порты и т.п.) Простота, гибкость и глубина конфигурирования Управление масштабированием (из приложения или «коробочно» на уровне системы хранения) Легкость (скорость и простота)  backup\restore Легкость операций по изменению структуры хранения данных Доступность и глубина «мониторинга»  ( готовые шаблоны для  cacti, nagios, munin, zabbix  что можно мониторить и т.п.) Возможности устранения  failover
Как мы классифицируем «данные» 5)  какой характер работы с данными Соотношение чтение\запись ? C ложность выборок Оперативные данные или «аналитика» ( OLTP  \  OLAP  ) ? Размер «активной части данных» (на запрос, на все приложение) Легкость изменения структур данных ( schema-lock, schema-less)  и легкость (прозрачность) « re-sharding » в случае горизонтального масштабирования
Классификация на практике Хранение
Классификация на практике Запись (часть 1)
Классификация на практике Запись (часть 2)
Классификация на практике Запись (часть 3)
Классификация на практике Чтение
Классификация на практике Управляемость (часть 1)
Классификация на практике Управляемость (часть 2)
Классификация на практике Управляемость (часть 3)
Ок, а теперь «грабли»  ;-) MySQL InnoDB Все просто замечательно, пока какой то тип нагрузки преобладает (чтение для классических сайтов, запись для логов или аналитики) Как только надо много  read+write  из одного и того же места и нет времени на  Replication Lag …  после определенной  concurency  все равно наступает «жопа», 99% процентов   выбирают  Memcache  для того чтобы упаковать в него «активную часть данных» и использует его как  pesistent storage,  а не как кеш  ;- ) Также весьма популярен  sharding,  основная проблема в нем правильный выбор ключа для хеширования, при этом решардинг (ребалансировка) и  schema change –  тоже головная боль
Ок, а теперь «грабли»  ;-) memcache Dog-pile  эффекты  (lock  через  add  при записи) Размер  value  одних ключей больше чем других. Следите на  LRU, slubs  и  evicted Некоторые ключи читаются \ пишутся чаще чем остальные, не допускайте чтобы этих ключей было МАЛО (один) и они после хеширования ложились на ОДИН сервер =) Пишите код с учетом того, что может навернуться канал связи в ДЦ ( read\write\connect timeout)  или вы можете просто упереться в потолок сетевухи Память дешевая, но не бесконечно дешевая, не храните в кеше ЛИШНИХ данных =)
Ок, а теперь «грабли»  ;-) APC ОЧЕНЬ быстрый, но  Dog-pile  эффекты   никуда не делись  (lock  через  apc_add  есть забавный баг) Shared memory  сегмент «на процесс», кеш не общий ,  может получиться дублирование данных МНОГО данных не положишь (гигабайты, сотни мегабайт на приложение) максимум десятки  Mb Нельзя использовать как  pesistent storage  потому что горизонтально не масштабируется IMHO  идеален для кеша  read-only  «справочных» данных
Ок, а теперь «грабли»  ;-) FileSystem, GlusterFS Если «активная часть данных» умещается на  SSD  и есть деньги тащите туда. За минимизацией  random seek  будующее =)  csv, grep, sed, awk +   pipes  никто не отменял GlusterFS  непонятно еще как «мониторить», пока нет кластерных реализаций  lsof  и  iostat  и т.п. IMHO  идеально для  UGC ( не видео)  +  метаданные в более «быстром» хранилище IMHO  хранить (монтировать) лучше на  Application  серверах   (запись+чтение) +  Frontend  (чтение)
Ок, а теперь «грабли»  ;-) Redis Все что справедливо для  Memcache Single thread  (пока еще) в век  Multi Cure CPU  и даже без  worker pool management ;) Дамп отдельным тредом  ( за сколько времени ваши диски зальют 8 Gb ?) Не устоявшийся набор команд и их поведение (пример сочетание  SETEX + INCR) Осторожнее с  maxmemory KEYS  такой соблазнительный и такой «блокирующий»  (RTFM  юзайте  SETS   ;) Дублирование данных и не всегда эффективное хранение в памяти (мониторинга распределения ключей нет)
Ответы аудитории Серебренной пули нет  ;) Из представленных систем хранения, по теореме  CAP, MySQL  это  CA  система,  Redis, Memcache – AP Все что я сказал банально? Пожалуйста пройдемте к кулуары, я давно хотел поговорить с умным человеком  ;-)

More Related Content

What's hot (20)

PDF
Обзор архитектуры [файловой] системы Ceph
OSLL
 
PDF
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
PDF
Обзор файловой системы GlusterFS
OSLL
 
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Ontico
 
PPTX
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
PDF
HBase inside
Anatoliy Nikulin
 
PDF
Класс!ная Cassandra
odnoklassniki.ru
 
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
PDF
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
Yandex
 
PDF
Обзор Btrfs
OSLL
 
PDF
Механика DDoS (Александр Крижановский)
Ontico
 
PPTX
MongoDB первые впечатления
fudz1k
 
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
PDF
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Alexey Zinoviev
 
ODP
Highload Begun Pankov
Ontico
 
ODP
Константин Осипов (Mail.Ru)
Ontico
 
PDF
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
Ontico
 
PDF
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Roman Pavlushko
 
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
PDF
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 
Обзор архитектуры [файловой] системы Ceph
OSLL
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
Обзор файловой системы GlusterFS
OSLL
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Ontico
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
HBase inside
Anatoliy Nikulin
 
Класс!ная Cassandra
odnoklassniki.ru
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
Yandex
 
Обзор Btrfs
OSLL
 
Механика DDoS (Александр Крижановский)
Ontico
 
MongoDB первые впечатления
fudz1k
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Alexey Zinoviev
 
Highload Begun Pankov
Ontico
 
Константин Осипов (Mail.Ru)
Ontico
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
Ontico
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Roman Pavlushko
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 

Similar to phpConf 2010 Классификация систем хранения (20)

PPT
распределенная архитектура Lamp приложений петр зайцев
Media Gorod
 
PDF
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
ODP
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Ontico
 
PDF
Дмитрий Еманов — Под капотом серверного ПО
Daria Oreshkina
 
PDF
High load2007 scaling-web-applications-rus
Vladd Ev
 
PPT
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Ontico
 
PPTX
Cassandra
Ilya Medvedev
 
PDF
Вы решили написать собственное хранилище, Илья Космодемьянский
Fuenteovejuna
 
ODP
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
rit2011
 
PDF
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Yandex
 
PDF
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Siel01
 
PDF
High Load 2009 Imdg Presentation
HighLoad2009
 
PPTX
Hosting for forbes.ru_
drupalconf
 
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
PPT
Web20 from zero
qweasdrty
 
PPT
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Ontico
 
PPT
Development on the Knee by Vladimir Khramtsov
php-user-group-minsk
 
PPT
Быстрое масштабирование систем
Media Gorod
 
ODP
Hcs3
Ontico
 
PPT
А. Аксенов "Как устроен NoSql", DUMP-2014
it-people
 
распределенная архитектура Lamp приложений петр зайцев
Media Gorod
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Ontico
 
Дмитрий Еманов — Под капотом серверного ПО
Daria Oreshkina
 
High load2007 scaling-web-applications-rus
Vladd Ev
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Ontico
 
Cassandra
Ilya Medvedev
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Fuenteovejuna
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
rit2011
 
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Yandex
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Siel01
 
High Load 2009 Imdg Presentation
HighLoad2009
 
Hosting for forbes.ru_
drupalconf
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
Web20 from zero
qweasdrty
 
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Ontico
 
Development on the Knee by Vladimir Khramtsov
php-user-group-minsk
 
Быстрое масштабирование систем
Media Gorod
 
Hcs3
Ontico
 
А. Аксенов "Как устроен NoSql", DUMP-2014
it-people
 
Ad

More from Slach (6)

PPTX
Open source субд глазами обычного программиста
Slach
 
PPTX
Sampling profiling
Slach
 
PPTX
мониторинг производительности Web приложений на python
Slach
 
PPTX
мониторинг производительности приложения на PINBA
Slach
 
PPT
XML Native Database на примере SednaXML
Slach
 
PPT
Php Conf2007 Mapscript
Slach
 
Open source субд глазами обычного программиста
Slach
 
Sampling profiling
Slach
 
мониторинг производительности Web приложений на python
Slach
 
мониторинг производительности приложения на PINBA
Slach
 
XML Native Database на примере SednaXML
Slach
 
Php Conf2007 Mapscript
Slach
 
Ad

phpConf 2010 Классификация систем хранения

  • 1. Классификация систем хранения и обработки данных Климов Евгений aka Slach www.I-jet. ru http://slach.livejournal.com
  • 2. Что общего в архитектуре любого web- приложения среднего уровня ? у нас ~ 2 .2 миллиона DAU , ~40kk php req, avg req time 0 .0 3 ;-) Обработка соединений (nginx, apache, node.js, tornado и т.п.) Application Layer ( php,python,v8, jvm, asp.net и т.п.) СИСТЕМЫ ХРАНЕНИЯ ДАННЫХ ( filesystem , memory, sql, nosql) Наш (и не только) опыт показывает, что практически не важно какую технологию вы используете для Application Logic, узким местом является система хранения, причем зачастую не потому что «плохая», а потому что используется не правильно.
  • 3. Как мы классифицируем системы хранения 1) где и сколько храним данных, протокол Тип хранения Где именно система хранит данные RAM (быстро), SSD, SAS, HDD во всех проявлениях (медленнее) Гибрид RAM+ Диск (IMHO оптимально) Доступность по сети (TCP\UDP ) Ограничение на размер данных Соотношение размер\скорость работы . На текущий момент все рассматриваемые продукты имеют достаточно большие лимиты на максимальный размер данных, но для всех систем хранения есть предел, после которого «активная часть данных» начинает тормозить
  • 4. Как мы классифицируем системы хранения 2) что и как пишем Надежность записи (защита от сбоев, допустимая величина потерь , ACID ) Сложность структур данных, доступных для записи (таблицы, объекты, списки, массивы, хеши, деревья и т.п.) Соотношение Размер структуры и Скорость записи в req/sec Конкурентность и масштабируемость записи (горизонтальная желательно) Возможность проверки консистентности данных на стороне системы хранения Возможность BULK (BATCHING) записи Возможность асинхронной (DELAYED) записи
  • 5. Как мы классифицируем системы хранения 3 ) что и как читаем Надежность чтения (актуальность данных на момент чтения, допустимые потери актуальности) Сложность языка (api) запросов и структур данных, доступных для чтения ( SQL , XQuery , REST, GET\SET ) Соотношение Размер «порции данных» ( recordset , nodeset) и скорость чтения в req/sec масштабируемость чтения (горизонтальная желательно) и конкурентность ( где происходит блокировка, buzy lock и т.п.)
  • 6. Как мы классифицируем системы хранения 4) как этим управлять Переносимость (доступность для альтернативной win32 платформы ; ) и легкость развертывания (пакеты, порты и т.п.) Простота, гибкость и глубина конфигурирования Управление масштабированием (из приложения или «коробочно» на уровне системы хранения) Легкость (скорость и простота) backup\restore Легкость операций по изменению структуры хранения данных Доступность и глубина «мониторинга» ( готовые шаблоны для cacti, nagios, munin, zabbix что можно мониторить и т.п.) Возможности устранения failover
  • 7. Как мы классифицируем «данные» 5) какой характер работы с данными Соотношение чтение\запись ? C ложность выборок Оперативные данные или «аналитика» ( OLTP \ OLAP ) ? Размер «активной части данных» (на запрос, на все приложение) Легкость изменения структур данных ( schema-lock, schema-less) и легкость (прозрачность) « re-sharding » в случае горизонтального масштабирования
  • 13. Классификация на практике Управляемость (часть 1)
  • 14. Классификация на практике Управляемость (часть 2)
  • 15. Классификация на практике Управляемость (часть 3)
  • 16. Ок, а теперь «грабли» ;-) MySQL InnoDB Все просто замечательно, пока какой то тип нагрузки преобладает (чтение для классических сайтов, запись для логов или аналитики) Как только надо много read+write из одного и того же места и нет времени на Replication Lag … после определенной concurency все равно наступает «жопа», 99% процентов выбирают Memcache для того чтобы упаковать в него «активную часть данных» и использует его как pesistent storage, а не как кеш ;- ) Также весьма популярен sharding, основная проблема в нем правильный выбор ключа для хеширования, при этом решардинг (ребалансировка) и schema change – тоже головная боль
  • 17. Ок, а теперь «грабли» ;-) memcache Dog-pile эффекты (lock через add при записи) Размер value одних ключей больше чем других. Следите на LRU, slubs и evicted Некоторые ключи читаются \ пишутся чаще чем остальные, не допускайте чтобы этих ключей было МАЛО (один) и они после хеширования ложились на ОДИН сервер =) Пишите код с учетом того, что может навернуться канал связи в ДЦ ( read\write\connect timeout) или вы можете просто упереться в потолок сетевухи Память дешевая, но не бесконечно дешевая, не храните в кеше ЛИШНИХ данных =)
  • 18. Ок, а теперь «грабли» ;-) APC ОЧЕНЬ быстрый, но Dog-pile эффекты никуда не делись (lock через apc_add есть забавный баг) Shared memory сегмент «на процесс», кеш не общий , может получиться дублирование данных МНОГО данных не положишь (гигабайты, сотни мегабайт на приложение) максимум десятки Mb Нельзя использовать как pesistent storage потому что горизонтально не масштабируется IMHO идеален для кеша read-only «справочных» данных
  • 19. Ок, а теперь «грабли» ;-) FileSystem, GlusterFS Если «активная часть данных» умещается на SSD и есть деньги тащите туда. За минимизацией random seek будующее =) csv, grep, sed, awk + pipes никто не отменял GlusterFS непонятно еще как «мониторить», пока нет кластерных реализаций lsof и iostat и т.п. IMHO идеально для UGC ( не видео) + метаданные в более «быстром» хранилище IMHO хранить (монтировать) лучше на Application серверах (запись+чтение) + Frontend (чтение)
  • 20. Ок, а теперь «грабли» ;-) Redis Все что справедливо для Memcache Single thread (пока еще) в век Multi Cure CPU и даже без worker pool management ;) Дамп отдельным тредом ( за сколько времени ваши диски зальют 8 Gb ?) Не устоявшийся набор команд и их поведение (пример сочетание SETEX + INCR) Осторожнее с maxmemory KEYS такой соблазнительный и такой «блокирующий» (RTFM юзайте SETS ;) Дублирование данных и не всегда эффективное хранение в памяти (мониторинга распределения ключей нет)
  • 21. Ответы аудитории Серебренной пули нет ;) Из представленных систем хранения, по теореме CAP, MySQL это CA система, Redis, Memcache – AP Все что я сказал банально? Пожалуйста пройдемте к кулуары, я давно хотел поговорить с умным человеком ;-)