Upload
ontico
View
351
Download
3
Embed Size (px)
DESCRIPTION
HighLoad++ 2013
Citation preview
Технологии 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 это файловая система
• Заменяет собой • Машину времени
• Менеджер томов
• Аппаратный RAID-контроллер
• Файл /etc/fstab
• Менеджер разделов/слайсов (fdisk?)
• И еще немножечко шьет сжимает
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 -s profile-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 -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
Пример 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
Выводы
• Спасибо за внимание!
• С вами были Сергей Житинский и Александр Чистяков
• Компания Git In Sky
Вопросы?