SlideShare a Scribd company logo
1 of 32
Технологии
SmartOS/Solaris для
тюнинга приложений
Сергей Житинский
Александр Чистяков
Давайте познакомимся
• Мы:
•
•
•
•

Инженеры
“Волшебники”
Занимаемся эксплуатацией веб-сайтов
Занимаемся оптимизацией
производительности веб-сайтов
• Пасем облака
Давайте познакомимся
• Вы:
•
•
•
•
•
•

Веб-разработчики?
Архитекторы?
CTO?
Системные администраторы?
Linux, Apache, MySQL, Perl, PHP, nginx, memcached, you-name-it...
Хотите узнать больше о магии?
Проблемы все те же
• Тормоза в неизвестном месте
• Отказы
• Недостаточно быстрая работа
• Недостаточная пропускная способность
• Performance issues
• У нас есть новые *wands!
Немного истории
• Давным-давно великие маги
из компании Sun создали ОС Solaris
• И открыли исходный код –
так получился OpenSolaris
• Но злые подколдуи из Oracle уничтожили Sun
и наложили великое заклятие на OpenSolaris
• В наше время
• Силы добра объединились, чтобы продолжить дело, начатое Sun
Почему мы выбрали потомка Solaris?
• ZFS
• DTrace
• Zones
• Crossbow virtualization
Почему мы выбрали SmartOS?
• SmartOS бесплатна
• SmartOS делается компанией Joyent
• Применяется в Joyent как гипервизор для их облака
• Работает с флешки, целиком в памяти
• Позволяет организовать облачную инфраструктуру
• Кстати, что такое «облачная инфраструктура»
• Joyent портировали KVM из Linux в SmartOS
• And now: Manta!
ZFS
Словарик для людей из мира Linux
• «физический том» = «vdev»
• «группа томов» = «pool»
• «раздел» = «dataset»
• «логический том» = «ZVOL»
• «RAID1» = «mirror»
• «RAID5» ~ «raidz», «raidz1»
• «RAID5» ~ «raidz2»
• «RAID7(?)» ~ «raidz3»
Особенности ZFS
• Умное двухуровневое кэширование:
• ARC – кэш в памяти
• L2ARC – кэш на SSD

• Запись (record) размером от 512 байт до 128 Кбайт
• ^ каждая запись имеет контрольную сумму
• Размер записи задается отдельно для каждого dataset
• Возможность сжатия записей (больше размер записи –
эффективное сжатие)
• Снэпшоты!
• Copy on Write – данные никогда не перезаписываются
Особенности ZFS
• Дедупликация
• Не бесплатна – требует место в оперативной памяти под таблицы
дедупликации

• zfs send/receive – чтение данных из снэпшота в stdout и наоборот
• zfs send/receive можно делать инкрементально (между двумя
последовательными снэпшотами, что позволяет организовать
подобие репликации на read-only раздел в другой локации
Снэпшоты
• Создание – практически бесплатно
• Я делал несколько тысяч снэпшотов на пуле (3-4 тысячи)

• Удаление – не бесплатно, может вызывать нагрузку на диск
• Снэпшоты – только для чтения
• Клоны снэпшотов – возможна запись
Сценарии использования снэпшотов
• Сценарий 1:
• Частые локальные бэкапы для защиты от логических сбоев
• Так нельзя защититься от физического сбоя, нужен zfs send/receive

• Сценарий 2:
• Создание однотипных окружений путем клонирования эталонного
снэпшота
• Девелоперская база в несколько десятков гигабайт – каждому
девелоперу делается свой клон эталонного снэпшота
• Уменьшает время развертывания окружений
• Экономит место на диске
DTrace
• Динамический фреймворк профайлинга приложений
• В том числе, позволяет профайлить ядро ОС
• Предназначен для работы в продакшне с минимальным оверхедом
• ^ Оверхед зависит от числа активных DTrace probes (датчиков)
• Язык D (не путать с языком программирования D) – скрипты
описания сессий профилирования
• Необходимо инструментировать фреймворки/библиотеки/VMs –
расстановка probes
Язык D
provider : module : function : name
/ predicate /
{
action
}
•Нет циклов/ветвлений
•Нет пользовательских функций
Пример 1 – «горячие» точки
PostgreSQL
• Задача – посмотреть, чем занят движок базы данных
• Задача имеет классическое решение – сборка сэмплов
стектрейсов через равные промежутки времени и их анализ
• Как можно собирать сэмплы?
• gdb, http://poormansprofiler.org – нужны debug symbols и
агрегация/анализ в (полу)ручном режиме
• DTrace!

• Кстати, готов поспорить, база, в основном, занята работой с
диском!
Пример 1 – «горячие» точки
PostgreSQL
#!/usr/sbin/dtrace -s
profile-997
/arg1/
{
@a[execname, ufunc(arg1)] = count();
}
tick-60s
{
trunk(@a, 5);
exit(0);
}
Пример 2 – поиск пути исполнения
• Задача – найти, как мы попали в это неуютное (функция
возвращает ошибку при (не)определенных условиях)
• Как решать без DTrace?
• Вызвать падение по SIGSEGV в месте возврата ошибки, собрать
coredump, поглядеть backtrace
• Необходима модификация и пересборка приложения
• Упасть по SIGSEGV в продакшн окружении? Нет пути!

• DTrace не требует пересборки и модификации и позволяет
получить стектрейс вплоть до вызовов ядра
Пример 2 – поиск пути исполнения
#!/usr/sbin/dtrace -s
pid$target::zpool_vdev_attach:entry
{
self->trace = 1;
}
pid$target:libzfs::return
/self->trace && (int)arg1 == -1/
{
ustack ();
exit(0);
}
Пример 2 – поиск пути исполнения
zfs_ioctl:return
libzfs.so.1`zfs_ioctl+0x2c
zpool_worker`do_zpool_attach_or_replace+0x154
zpool_worker`zpool_rpc_attach+0x9f
zpool_worker`attach_invoke+0x70
zpool_worker`rpc_invoke+0xbb
zpool_worker`rpc_server_loop+0x9d
zpool_worker`rpc_worker_main_mode+0xc9
zpool_worker`rpc_worker_main+0x20
zpool_worker`main+0x6c
zpool_worker`_start+0x83
Zones
• Контейнерная виртуализация или
• ОС-виртуализация
• Аналоги – OpenVZ, jails во FreeBSD
• Минимальный оверхед
• Ограничение потребления ресурсов
• ^ можно менять динамически
Network virtualization
• VNICs over NICs
• Virtual switching
• Link aggregation
• Routing
• NAT & IPFilter
• VLANs over VNICs
Manta
• Выпущена 4 месяца назад
• Объектное хранилище для
BigData
• Если гора не идет к Магомету
(integrated computing)
• Реализовано на динамически
создаваемой Zone
• Время создания зоны 9 мкс
• Обработчики на любом языке
Почему всего этого нет в мире Linux?
• В мире Linux своя магия

• Кроме того, CDDL несовместима с GPL
Насколько новый софт в SmartOS?
• Пакетный менеджер – pkgin
• GCC – 4.7.0, 4.8.1
• Python – 2.6.8, 2.7.5, 3.2.3, 3.3.2
• Perl – 5.18
• MySQL – 5.6.12

• Node.JS – 0.10.7
• MongoDB – 2.4.6
• PostgreSQL – 9.1.9
• Ruby – 1.9.3 p448
Кейс 1. Git in Sky. Новостной сервис
• Посещаемость около 20 тыс. уников в день
• UMI.CMS
• Жалобы на тормоза в админке,зависания до 2 минут
• Было: CentOS, dedicated, 8GbRAM, 4Gb-InnoDB pool.
• Стало: Virtual SmartOS, ZFS with ARC on SSD, 8Gb, 6Gb for
InnoDB
• DTracing time of php functions and mysql queries – удалены
ненужные JOINs в UMI ORM SQL выражениях.
• Улучшили на 30-40% время запросов. Ушли тормоза.
Кейс 2. Git in Sky. Маркетинговый
сервис

• Посещаемость около 100 тыс. уников в день
• LAMP-стек
• Организованы бэкапы через ZFS snapshots
• Была утеряна почта с важной коммерческой информацией
на сумму несколько миллионов рублей
• Восстановление из ZFS-snapshots по указанной дате спасло
деньги!
Кейс 3. Joyent & LinkedIn
• Все мобильные сервисы LinkedIn
расположены в облаке Joyent на
SmartOS.
• Balance across multiple cloud providers.
Instead of just using Amazon Web
Services, use a combination of AWS with
Joyent, Azure, Rackspace, and/or
another provider, diverting traffic to an
available cloud in the event of a failure.
Кейс 4. Joyent & Voxer
• Voxer делает из вашего телефона
рацию walkie-talkie.
• База пользователей выросла за месяц
в 30 раз. Linux based storage не
справился.
• DTracing Node.js apps
• DTracing процессы низкого уровня
• Улучшили производительность
• Сократили в разы время ожидания
Кейс 5. Joyent & Digital Chocolate
• Digital Chocolate – игровой сервис
• Galaxy Life, Millionaire City, Zombie
Lane, Army Attack, Crazy Penguin Wars,
Tower Bloxx, Rollercoaster Rush
• Затраты на инфраструктуру росли
быстрее доходов
• 50% уменьшение затрат на
инфраструктуру в SmartOS Cloud
• 99.999% cloud uptime SLA performance
Выводы
• Linux – это хорошо, но недостаточно хорошо
• Если выйти за пределы экосистемы Linux, можно получить новые
возможности, такие как
Возможность профилирования приложений
Расширенные возможности организации хранилища
Легкая защита от логических сбоев
Легкая, с массой новых возможностей, организация
бэкапов/восстановлений
• Новый способ работы с BigData
•
•
•
•
Вопросы?
• Спасибо за внимание!
• С вами были Сергей Житинский и Александр Чистяков
• sergey@gitinsky.com
• alex@gitinsky.com
• Компания Git In Sky

More Related Content

What's hot

Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Ontico
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Andrey Smirnov
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав БахмутовCodeFest
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Ontico
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)Badoo Development
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Anton Turetsky
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)Ontico
 

What's hot (20)

Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Chronicle Map
Chronicle MapChronicle Map
Chronicle Map
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
 

Similar to SmartOS/Solaris app tuning tools/technologies on HL++ 2013

Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Badoo Development
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Ontico
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Andrew Mayorov
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
Solaris OS
Solaris OSSolaris OS
Solaris OSSSA KPI
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Ontico
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStackYandex
 
Deployment to production with an unexpected load
Deployment to production with an unexpected loadDeployment to production with an unexpected load
Deployment to production with an unexpected loadGrid Dynamics
 
Zabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discoveryZabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discoveryBadoo Development
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 

Similar to SmartOS/Solaris app tuning tools/technologies on HL++ 2013 (20)

Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Sivko
SivkoSivko
Sivko
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
Solaris OS
Solaris OSSolaris OS
Solaris OS
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
Deployment to production with an unexpected load
Deployment to production with an unexpected loadDeployment to production with an unexpected load
Deployment to production with an unexpected load
 
Zabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discoveryZabbix в badoo, от lld к super discovery
Zabbix в badoo, от lld к super discovery
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 

More from Alex Chistyakov

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019Alex Chistyakov
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 Alex Chistyakov
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018Alex Chistyakov
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtAlex Chistyakov
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019Alex Chistyakov
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and KubernetesAlex Chistyakov
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017Alex Chistyakov
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMAlex Chistyakov
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017Alex Chistyakov
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10Alex Chistyakov
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017Alex Chistyakov
 

More from Alex Chistyakov (20)

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArt
 
My slides from CC'2019
My slides from CC'2019My slides from CC'2019
My slides from CC'2019
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and Kubernetes
 
Ansible and other stuff
Ansible and other stuffAnsible and other stuff
Ansible and other stuff
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGM
 
My talk at SECR 2017
My talk at SECR 2017My talk at SECR 2017
My talk at SECR 2017
 
On scaling teams
On scaling teamsOn scaling teams
On scaling teams
 
MariaDB workshop
MariaDB workshopMariaDB workshop
MariaDB workshop
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017
 

SmartOS/Solaris app tuning tools/technologies on HL++ 2013

  • 2. Давайте познакомимся • Мы: • • • • Инженеры “Волшебники” Занимаемся эксплуатацией веб-сайтов Занимаемся оптимизацией производительности веб-сайтов • Пасем облака
  • 3. Давайте познакомимся • Вы: • • • • • • Веб-разработчики? Архитекторы? CTO? Системные администраторы? Linux, Apache, MySQL, Perl, PHP, nginx, memcached, you-name-it... Хотите узнать больше о магии?
  • 4. Проблемы все те же • Тормоза в неизвестном месте • Отказы • Недостаточно быстрая работа • Недостаточная пропускная способность • Performance issues • У нас есть новые *wands!
  • 5. Немного истории • Давным-давно великие маги из компании Sun создали ОС Solaris • И открыли исходный код – так получился OpenSolaris • Но злые подколдуи из Oracle уничтожили Sun и наложили великое заклятие на OpenSolaris • В наше время • Силы добра объединились, чтобы продолжить дело, начатое Sun
  • 6. Почему мы выбрали потомка Solaris? • ZFS • DTrace • Zones • Crossbow virtualization
  • 7. Почему мы выбрали SmartOS? • SmartOS бесплатна • SmartOS делается компанией Joyent • Применяется в Joyent как гипервизор для их облака • Работает с флешки, целиком в памяти • Позволяет организовать облачную инфраструктуру • Кстати, что такое «облачная инфраструктура» • Joyent портировали KVM из Linux в SmartOS • And now: Manta!
  • 8. ZFS
  • 9. Словарик для людей из мира Linux • «физический том» = «vdev» • «группа томов» = «pool» • «раздел» = «dataset» • «логический том» = «ZVOL» • «RAID1» = «mirror» • «RAID5» ~ «raidz», «raidz1» • «RAID5» ~ «raidz2» • «RAID7(?)» ~ «raidz3»
  • 10. Особенности ZFS • Умное двухуровневое кэширование: • ARC – кэш в памяти • L2ARC – кэш на SSD • Запись (record) размером от 512 байт до 128 Кбайт • ^ каждая запись имеет контрольную сумму • Размер записи задается отдельно для каждого dataset • Возможность сжатия записей (больше размер записи – эффективное сжатие) • Снэпшоты! • Copy on Write – данные никогда не перезаписываются
  • 11. Особенности ZFS • Дедупликация • Не бесплатна – требует место в оперативной памяти под таблицы дедупликации • zfs send/receive – чтение данных из снэпшота в stdout и наоборот • zfs send/receive можно делать инкрементально (между двумя последовательными снэпшотами, что позволяет организовать подобие репликации на read-only раздел в другой локации
  • 12. Снэпшоты • Создание – практически бесплатно • Я делал несколько тысяч снэпшотов на пуле (3-4 тысячи) • Удаление – не бесплатно, может вызывать нагрузку на диск • Снэпшоты – только для чтения • Клоны снэпшотов – возможна запись
  • 13. Сценарии использования снэпшотов • Сценарий 1: • Частые локальные бэкапы для защиты от логических сбоев • Так нельзя защититься от физического сбоя, нужен zfs send/receive • Сценарий 2: • Создание однотипных окружений путем клонирования эталонного снэпшота • Девелоперская база в несколько десятков гигабайт – каждому девелоперу делается свой клон эталонного снэпшота • Уменьшает время развертывания окружений • Экономит место на диске
  • 14. DTrace • Динамический фреймворк профайлинга приложений • В том числе, позволяет профайлить ядро ОС • Предназначен для работы в продакшне с минимальным оверхедом • ^ Оверхед зависит от числа активных DTrace probes (датчиков) • Язык D (не путать с языком программирования D) – скрипты описания сессий профилирования • Необходимо инструментировать фреймворки/библиотеки/VMs – расстановка probes
  • 15. Язык D provider : module : function : name / predicate / { action } •Нет циклов/ветвлений •Нет пользовательских функций
  • 16. Пример 1 – «горячие» точки PostgreSQL • Задача – посмотреть, чем занят движок базы данных • Задача имеет классическое решение – сборка сэмплов стектрейсов через равные промежутки времени и их анализ • Как можно собирать сэмплы? • gdb, http://poormansprofiler.org – нужны debug symbols и агрегация/анализ в (полу)ручном режиме • DTrace! • Кстати, готов поспорить, база, в основном, занята работой с диском!
  • 17. Пример 1 – «горячие» точки PostgreSQL #!/usr/sbin/dtrace -s profile-997 /arg1/ { @a[execname, ufunc(arg1)] = count(); } tick-60s { trunk(@a, 5); exit(0); }
  • 18. Пример 2 – поиск пути исполнения • Задача – найти, как мы попали в это неуютное (функция возвращает ошибку при (не)определенных условиях) • Как решать без DTrace? • Вызвать падение по SIGSEGV в месте возврата ошибки, собрать coredump, поглядеть backtrace • Необходима модификация и пересборка приложения • Упасть по SIGSEGV в продакшн окружении? Нет пути! • DTrace не требует пересборки и модификации и позволяет получить стектрейс вплоть до вызовов ядра
  • 19. Пример 2 – поиск пути исполнения #!/usr/sbin/dtrace -s pid$target::zpool_vdev_attach:entry { self->trace = 1; } pid$target:libzfs::return /self->trace && (int)arg1 == -1/ { ustack (); exit(0); }
  • 20. Пример 2 – поиск пути исполнения zfs_ioctl:return libzfs.so.1`zfs_ioctl+0x2c zpool_worker`do_zpool_attach_or_replace+0x154 zpool_worker`zpool_rpc_attach+0x9f zpool_worker`attach_invoke+0x70 zpool_worker`rpc_invoke+0xbb zpool_worker`rpc_server_loop+0x9d zpool_worker`rpc_worker_main_mode+0xc9 zpool_worker`rpc_worker_main+0x20 zpool_worker`main+0x6c zpool_worker`_start+0x83
  • 21. Zones • Контейнерная виртуализация или • ОС-виртуализация • Аналоги – OpenVZ, jails во FreeBSD • Минимальный оверхед • Ограничение потребления ресурсов • ^ можно менять динамически
  • 22. Network virtualization • VNICs over NICs • Virtual switching • Link aggregation • Routing • NAT & IPFilter • VLANs over VNICs
  • 23. Manta • Выпущена 4 месяца назад • Объектное хранилище для BigData • Если гора не идет к Магомету (integrated computing) • Реализовано на динамически создаваемой Zone • Время создания зоны 9 мкс • Обработчики на любом языке
  • 24. Почему всего этого нет в мире Linux? • В мире Linux своя магия • Кроме того, CDDL несовместима с GPL
  • 25. Насколько новый софт в SmartOS? • Пакетный менеджер – pkgin • GCC – 4.7.0, 4.8.1 • Python – 2.6.8, 2.7.5, 3.2.3, 3.3.2 • Perl – 5.18 • MySQL – 5.6.12 • Node.JS – 0.10.7 • MongoDB – 2.4.6 • PostgreSQL – 9.1.9 • Ruby – 1.9.3 p448
  • 26. Кейс 1. Git in Sky. Новостной сервис • Посещаемость около 20 тыс. уников в день • UMI.CMS • Жалобы на тормоза в админке,зависания до 2 минут • Было: CentOS, dedicated, 8GbRAM, 4Gb-InnoDB pool. • Стало: Virtual SmartOS, ZFS with ARC on SSD, 8Gb, 6Gb for InnoDB • DTracing time of php functions and mysql queries – удалены ненужные JOINs в UMI ORM SQL выражениях. • Улучшили на 30-40% время запросов. Ушли тормоза.
  • 27. Кейс 2. Git in Sky. Маркетинговый сервис • Посещаемость около 100 тыс. уников в день • LAMP-стек • Организованы бэкапы через ZFS snapshots • Была утеряна почта с важной коммерческой информацией на сумму несколько миллионов рублей • Восстановление из ZFS-snapshots по указанной дате спасло деньги!
  • 28. Кейс 3. Joyent & LinkedIn • Все мобильные сервисы LinkedIn расположены в облаке Joyent на SmartOS. • Balance across multiple cloud providers. Instead of just using Amazon Web Services, use a combination of AWS with Joyent, Azure, Rackspace, and/or another provider, diverting traffic to an available cloud in the event of a failure.
  • 29. Кейс 4. Joyent & Voxer • Voxer делает из вашего телефона рацию walkie-talkie. • База пользователей выросла за месяц в 30 раз. Linux based storage не справился. • DTracing Node.js apps • DTracing процессы низкого уровня • Улучшили производительность • Сократили в разы время ожидания
  • 30. Кейс 5. Joyent & Digital Chocolate • Digital Chocolate – игровой сервис • Galaxy Life, Millionaire City, Zombie Lane, Army Attack, Crazy Penguin Wars, Tower Bloxx, Rollercoaster Rush • Затраты на инфраструктуру росли быстрее доходов • 50% уменьшение затрат на инфраструктуру в SmartOS Cloud • 99.999% cloud uptime SLA performance
  • 31. Выводы • Linux – это хорошо, но недостаточно хорошо • Если выйти за пределы экосистемы Linux, можно получить новые возможности, такие как Возможность профилирования приложений Расширенные возможности организации хранилища Легкая защита от логических сбоев Легкая, с массой новых возможностей, организация бэкапов/восстановлений • Новый способ работы с BigData • • • •
  • 32. Вопросы? • Спасибо за внимание! • С вами были Сергей Житинский и Александр Чистяков • sergey@gitinsky.com • alex@gitinsky.com • Компания Git In Sky

Editor's Notes

  1. {}