Технологии SmartOS/Solaris для тюнинга приложений Сергей Житинский Александр Чистяков
Технологии SmartOS/Solaris для
тюнинга приложенийСергей Житинский
Александр Чистяков
Давайте познакомимся
• Мы:• Инженеры• “Волшебники”• Занимаемся эксплуатацией веб-сайтов• Занимаемся оптимизацией производительности веб-сайтов• Пасем облака
• Вы:• Веб-разработчики?• Архитекторы?• CTO?• Системные администраторы?• Linux, Apache, MySQL, Perl, PHP, nginx, memcached, you-name-it...• Хотите узнать больше о магии?
Давайте познакомимся
Проблемы все те же
• Тормоза в неизвестном месте
• Отказы
• Недостаточно быстрая работа
• Недостаточная пропускная способность
• Performance issues
• У нас есть новые *wands!
• Давным-давно великие маги из компании Sun создали ОС Solaris• И открыли исходный код – так получился OpenSolaris• Но злые подколдуи из Oracle уничтожили Sun и наложили великое заклятие на OpenSolaris• В наше время• Силы добра объединились, чтобы продолжить дело, начатое Sun
Немного истории
• ZFS• DTrace• Zones• Crossbow virtualization
Почему мы выбрали потомка Solaris?
• SmartOS бесплатна• SmartOS делается компанией Joyent• Применяется в Joyent как гипервизор для их облака• Работает с флешки, целиком в памяти• Позволяет организовать облачную инфраструктуру• Кстати, что такое «облачная инфраструктура»• Joyent портировали KVM из Linux в SmartOS• And now: Manta!
Почему мы выбрали SmartOS?
ZFS
• «физический том» = «vdev»• «группа томов» = «pool»• «раздел» = «dataset»• «логический том» = «ZVOL»• «RAID1» = «mirror»• «RAID5» ~ «raidz», «raidz1»• «RAID5» ~ «raidz2»• «RAID7(?)» ~ «raidz3»
Словарик для людей из мира Linux
• Умное двухуровневое кэширование:• ARC – кэш в памяти• L2ARC – кэш на SSD
• Запись (record) размером от 512 байт до 128 Кбайт• ^ каждая запись имеет контрольную сумму• Размер записи задается отдельно для каждого dataset• Возможность сжатия записей (больше размер записи –
эффективное сжатие)• Снэпшоты!• Copy on Write – данные никогда не перезаписываются
Особенности ZFS
• Дедупликация• Не бесплатна – требует место в оперативной памяти под таблицы
дедупликации
• zfs send/receive – чтение данных из снэпшота в stdout и наоборот• zfs send/receive можно делать инкрементально (между двумя
последовательными снэпшотами, что позволяет организовать подобие репликации на read-only раздел в другой локации
Особенности ZFS
• Создание – практически бесплатно• Я делал несколько тысяч снэпшотов на пуле (3-4 тысячи)
• Удаление – не бесплатно, может вызывать нагрузку на диск• Снэпшоты – только для чтения• Клоны снэпшотов – возможна запись
Снэпшоты
• Сценарий 1:• Частые локальные бэкапы для защиты от логических сбоев• Так нельзя защититься от физического сбоя, нужен zfs send/receive
• Сценарий 2:• Создание однотипных окружений путем клонирования эталонного
снэпшота• Девелоперская база в несколько десятков гигабайт – каждому
девелоперу делается свой клон эталонного снэпшота• Уменьшает время развертывания окружений• Экономит место на диске
Сценарии использования снэпшотов
• Динамический фреймворк профайлинга приложений• В том числе, позволяет профайлить ядро ОС• Предназначен для работы в продакшне с минимальным оверхедом• ^ Оверхед зависит от числа активных DTrace probes (датчиков)• Язык D (не путать с языком программирования D) – скрипты
описания сессий профилирования• Необходимо инструментировать фреймворки/библиотеки/VMs –
расстановка probes
DTrace
provider : module : function : name/ predicate /{ action}
•Нет циклов/ветвлений•Нет пользовательских функций
Язык D
• Задача – посмотреть, чем занят движок базы данных• Задача имеет классическое решение – сборка сэмплов
стектрейсов через равные промежутки времени и их анализ• Как можно собирать сэмплы?
• gdb, http://poormansprofiler.org – нужны debug symbols и агрегация/анализ в (полу)ручном режиме
• DTrace!
• Кстати, готов поспорить, база, в основном, занята работой с диском!
Пример 1 – «горячие» точки PostgreSQL
#!/usr/sbin/dtrace -sprofile-997/arg1/{ @a[execname, ufunc(arg1)] = count();}tick-60s{ trunk(@a, 5); exit(0);}
Пример 1 – «горячие» точки PostgreSQL
• Задача – найти, как мы попали в это неуютное (функция возвращает ошибку при (не)определенных условиях)
• Как решать без DTrace?• Вызвать падение по SIGSEGV в месте возврата ошибки, собрать
coredump, поглядеть backtrace• Необходима модификация и пересборка приложения• Упасть по SIGSEGV в продакшн окружении? Нет пути!
• DTrace не требует пересборки и модификации и позволяет получить стектрейс вплоть до вызовов ядра
Пример 2 – поиск пути исполнения
#!/usr/sbin/dtrace -spid$target::zpool_vdev_attach:entry{ self->trace = 1;}pid$target:libzfs::return/self->trace && (int)arg1 == -1/{ ustack (); exit(0);}
Пример 2 – поиск пути исполнения
zfs_ioctl:returnlibzfs.so.1`zfs_ioctl+0x2czpool_worker`do_zpool_attach_or_replace+0x154zpool_worker`zpool_rpc_attach+0x9fzpool_worker`attach_invoke+0x70zpool_worker`rpc_invoke+0xbbzpool_worker`rpc_server_loop+0x9dzpool_worker`rpc_worker_main_mode+0xc9zpool_worker`rpc_worker_main+0x20zpool_worker`main+0x6czpool_worker`_start+0x83
Пример 2 – поиск пути исполнения
• Контейнерная виртуализация или
• ОС-виртуализация
• Аналоги – OpenVZ, jails во FreeBSD• Минимальный оверхед• Ограничение потребления ресурсов• ^ можно менять динамически
Zones
• VNICs over NICs
• Virtual switching• Link aggregation• Routing• NAT & IPFilter• VLANs over VNICs
Network virtualization
• Выпущена 4 месяца назад
• Объектное хранилище для BigData
• Если гора не идет к Магомету (integrated computing)
• Реализовано на динамически создаваемой Zone
• Время создания зоны 9 мкс
• Обработчики на любом языке
Manta
• В мире Linux своя магия
• Кроме того, CDDL несовместима с GPL
Почему всего этого нет в мире Linux?
• Пакетный менеджер – 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
Насколько новый софт в SmartOS?
• Node.JS – 0.10.7• MongoDB – 2.4.6• PostgreSQL – 9.1.9• Ruby – 1.9.3 p448
• Посещаемость около 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% время запросов. Ушли тормоза.
Кейс 1. Git in Sky. Новостной сервис
• Посещаемость около 100 тыс. уников в день
• LAMP-стек
• Организованы бэкапы через ZFS snapshots
• Была утеряна почта с важной коммерческой информацией на сумму несколько миллионов рублей
• Восстановление из ZFS-snapshots по указанной дате спасло деньги!
Кейс 2. Git in Sky. Маркетинговый сервис
• Все мобильные сервисы 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.
Кейс 3. Joyent & LinkedIn
• Voxer делает из вашего телефона рацию walkie-talkie.
• База пользователей выросла за месяц в 30 раз. Linux based storage не справился.
• DTracing Node.js apps• DTracing процессы низкого уровня• Улучшили производительность• Сократили в разы время ожидания
Кейс 4. Joyent & Voxer
• 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
Кейс 5. Joyent & Digital Chocolate
• Linux – это хорошо, но недостаточно хорошо• Если выйти за пределы экосистемы Linux, можно получить новые
возможности, такие как• Возможность профилирования приложений• Расширенные возможности организации хранилища• Легкая защита от логических сбоев• Легкая, с массой новых возможностей, организация
бэкапов/восстановлений• Новый способ работы с BigData
Выводы
• Спасибо за внимание!• С вами были Сергей Житинский и Александр Чистяков• [email protected]• [email protected]• Компания Git In Sky
Вопросы?