Технологии
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

Git in Sky presentation @ HighLoad++ 2013

  • 1.
  • 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.
  • 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 • VNICsover 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. Gitin 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. Gitin 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