32
Технологии SmartOS/Solaris для тюнинга приложений Сергей Житинский Александр Чистяков

Сергей Житинский, Александр Чистяков (Git in Sky)

  • Upload
    ontico

  • View
    351

  • Download
    3

Embed Size (px)

DESCRIPTION

HighLoad++ 2013

Citation preview

Page 1: Сергей Житинский, Александр Чистяков (Git in Sky)

Технологии SmartOS/Solaris для тюнинга приложений

Сергей Житинский

Александр Чистяков

Page 2: Сергей Житинский, Александр Чистяков (Git in Sky)

Давайте познакомимся

• Мы: • Инженеры

• “Волшебники”

• Занимаемся эксплуатацией веб-сайтов

• Занимаемся оптимизацией

производительности веб-сайтов

• Пасем облака

Page 3: Сергей Житинский, Александр Чистяков (Git in Sky)

• Вы: • Веб-разработчики?

• Архитекторы?

• CTO?

• Системные администраторы?

• Linux, Apache, MySQL, Perl, PHP, nginx, memcached, you-name-it...

• Хотите узнать больше о магии?

Давайте познакомимся

Page 4: Сергей Житинский, Александр Чистяков (Git in Sky)

Проблемы все те же

• Тормоза в неизвестном месте

• Отказы

• Недостаточно быстрая работа

• Недостаточная пропускная способность

• Performance issues

• У нас есть новые *wands!

Page 5: Сергей Житинский, Александр Чистяков (Git in Sky)

• Давным-давно великие маги

из компании Sun создали ОС Solaris

• И открыли исходный код –

так получился OpenSolaris

• Но злые подколдуи из Oracle уничтожили Sun

и наложили великое заклятие на OpenSolaris

• В наше время

• Силы добра объединились, чтобы продолжить дело, начатое Sun

Немного истории

Page 6: Сергей Житинский, Александр Чистяков (Git in Sky)

• ZFS

• DTrace

• Zones

• Crossbow virtualization

Почему мы выбрали потомка Solaris?

Page 7: Сергей Житинский, Александр Чистяков (Git in Sky)

• SmartOS бесплатна

• SmartOS делается компанией Joyent

• Применяется в Joyent как гипервизор для их облака

• Работает с флешки, целиком в памяти

• Позволяет организовать облачную инфраструктуру

• Кстати, что такое «облачная инфраструктура»

• Joyent портировали KVM из Linux в SmartOS

• And now: Manta!

Почему мы выбрали SmartOS?

Page 8: Сергей Житинский, Александр Чистяков (Git in Sky)

• ZFS это файловая система

• Заменяет собой • Машину времени

• Менеджер томов

• Аппаратный RAID-контроллер

• Файл /etc/fstab

• Менеджер разделов/слайсов (fdisk?)

• И еще немножечко шьет сжимает

ZFS

Page 9: Сергей Житинский, Александр Чистяков (Git in Sky)

• «физический том» = «vdev»

• «группа томов» = «pool»

• «раздел» = «dataset»

• «логический том» = «ZVOL»

• «RAID1» = «mirror»

• «RAID5» ~ «raidz», «raidz1»

• «RAID5» ~ «raidz2»

• «RAID7(?)» ~ «raidz3»

Словарик для людей из мира Linux

Page 10: Сергей Житинский, Александр Чистяков (Git in Sky)

• Умное двухуровневое кэширование: • ARC – кэш в памяти • L2ARC – кэш на SSD

• Запись (record) размером от 512 байт до 128 Кбайт

• ^ каждая запись имеет контрольную сумму

• Размер записи задается отдельно для каждого dataset

• Возможность сжатия записей (больше размер записи – эффективное сжатие)

• Снэпшоты!

• Copy on Write – данные никогда не перезаписываются

Особенности ZFS

Page 11: Сергей Житинский, Александр Чистяков (Git in Sky)

• Дедупликация • Не бесплатна – требует место в оперативной памяти под таблицы

дедупликации

• zfs send/receive – чтение данных из снэпшота в stdout и наоборот

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

Особенности ZFS

Page 12: Сергей Житинский, Александр Чистяков (Git in Sky)

• Создание – практически бесплатно • Я делал несколько тысяч снэпшотов на пуле (3-4 тысячи)

• Удаление – не бесплатно, может вызывать нагрузку на диск

• Снэпшоты – только для чтения

• Клоны снэпшотов – возможна запись

Снэпшоты

Page 13: Сергей Житинский, Александр Чистяков (Git in Sky)

• Сценарий 1: • Частые локальные бэкапы для защиты от логических сбоев

• Так нельзя защититься от физического сбоя, нужен zfs send/receive

• Сценарий 2: • Создание однотипных окружений путем клонирования эталонного

снэпшота

• Девелоперская база в несколько десятков гигабайт – каждому девелоперу делается свой клон эталонного снэпшота

• Уменьшает время развертывания окружений

• Экономит место на диске

Сценарии использования снэпшотов

Page 14: Сергей Житинский, Александр Чистяков (Git in Sky)

• Динамический фреймворк профайлинга приложений

• В том числе, позволяет профайлить ядро ОС

• Предназначен для работы в продакшне с минимальным оверхедом

• ^ Оверхед зависит от числа активных DTrace probes (датчиков)

• Язык D (не путать с языком программирования D) – скрипты описания сессий профилирования

• Необходимо инструментировать фреймворки/библиотеки/VMs –

расстановка probes

DTrace

Page 15: Сергей Житинский, Александр Чистяков (Git in Sky)

provider : module : function : name

/ predicate /

{

action

}

• Нет циклов/ветвлений

• Нет пользовательских функций

Язык D

Page 16: Сергей Житинский, Александр Чистяков (Git in Sky)

• Задача – посмотреть, чем занят движок базы данных

• Задача имеет классическое решение – сборка сэмплов стектрейсов через равные промежутки времени и их анализ

• Как можно собирать сэмплы? • gdb, http://poormansprofiler.org – нужны debug symbols и

агрегация/анализ в (полу)ручном режиме

• DTrace!

• Кстати, готов поспорить, база, в основном, занята работой с диском!

Пример 1 – «горячие» точки PostgreSQL

Page 17: Сергей Житинский, Александр Чистяков (Git in Sky)

#!/usr/sbin/dtrace -s profile-997 /arg1/ { @a[execname, ufunc(arg1)] = count(); } tick-60s { trunk(@a, 5); exit(0); }

Пример 1 – «горячие» точки PostgreSQL

Page 18: Сергей Житинский, Александр Чистяков (Git in Sky)

• Задача – найти, как мы попали в это неуютное (функция возвращает ошибку при (не)определенных условиях)

• Как решать без DTrace?

• Вызвать падение по SIGSEGV в месте возврата ошибки, собрать coredump, поглядеть backtrace

• Необходима модификация и пересборка приложения

• Упасть по SIGSEGV в продакшн окружении? Нет пути!

• DTrace не требует пересборки и модификации и позволяет получить стектрейс вплоть до вызовов ядра

Пример 2 – поиск пути исполнения

Page 19: Сергей Житинский, Александр Чистяков (Git in Sky)

#!/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 – поиск пути исполнения

Page 20: Сергей Житинский, Александр Чистяков (Git in Sky)

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 – поиск пути исполнения

Page 21: Сергей Житинский, Александр Чистяков (Git in Sky)

• Контейнерная виртуализация или

• ОС-виртуализация

• Аналоги – OpenVZ, jails во FreeBSD

• Минимальный оверхед

• Ограничение потребления ресурсов

• ^ можно менять динамически

Zones

Page 22: Сергей Житинский, Александр Чистяков (Git in Sky)

• VNICs over NICs

• Virtual switching

• Link aggregation

• Routing

• NAT & IPFilter

• VLANs over VNICs

Network virtualization

Page 23: Сергей Житинский, Александр Чистяков (Git in Sky)

• Выпущена 4 месяца назад

• Объектное хранилище для BigData

• Если гора не идет к Магомету (integrated computing)

• Реализовано на динамически создаваемой Zone

• Время создания зоны 9 мкс

• Обработчики на любом языке

Manta

Page 24: Сергей Житинский, Александр Чистяков (Git in Sky)

• В мире Linux своя магия

• Кроме того, CDDL несовместима с GPL

Почему всего этого нет в мире Linux?

Page 25: Сергей Житинский, Александр Чистяков (Git in Sky)

• Пакетный менеджер – 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

Page 26: Сергей Житинский, Александр Чистяков (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% время запросов. Ушли тормоза.

Кейс 1. Git in Sky. Новостной сервис

Page 27: Сергей Житинский, Александр Чистяков (Git in Sky)

• Посещаемость около 100 тыс. уников в день

• LAMP-стек

• Организованы бэкапы через ZFS snapshots

• Была утеряна почта с важной коммерческой информацией на сумму несколько миллионов рублей

• Восстановление из ZFS-snapshots по указанной дате спасло деньги!

Кейс 2. Git in Sky. Маркетинговый сервис

Page 28: Сергей Житинский, Александр Чистяков (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

Page 29: Сергей Житинский, Александр Чистяков (Git in Sky)

• Voxer делает из вашего телефона рацию walkie-talkie.

• База пользователей выросла за месяц в 30 раз. Linux based storage не справился.

• DTracing Node.js apps

• DTracing процессы низкого уровня

• Улучшили производительность

• Сократили в разы время ожидания

Кейс 4. Joyent & Voxer

Page 30: Сергей Житинский, Александр Чистяков (Git in Sky)

• 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

Page 31: Сергей Житинский, Александр Чистяков (Git in Sky)

• Linux – это хорошо, но недостаточно хорошо

• Если выйти за пределы экосистемы Linux, можно получить новые возможности, такие как

• Возможность профилирования приложений

• Расширенные возможности организации хранилища

• Легкая защита от логических сбоев

• Легкая, с массой новых возможностей, организация бэкапов/восстановлений

• Новый способ работы с BigData

Выводы

Page 32: Сергей Житинский, Александр Чистяков (Git in Sky)

• Спасибо за внимание!

• С вами были Сергей Житинский и Александр Чистяков

[email protected]

[email protected]

• Компания Git In Sky

Вопросы?