SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Несколько историй из жизни
Performance Engineer'а
Александр Чистяков,
главный инженер Git in Sky,
2014
Как я съел кусок мыла
Александр Чистяков,
главный инженер Git in Sky,
2014
Давайте познакомимся
§ Меня зовут Саша
§ Я работаю главным инженером в компании Git in Sky
§ Мы занимаемся эксплуатацией веб-проектов,
помощью в разработке веб-проектов, собственно
разработкой веб-проектов и автоматизацией веб-
проектов
§ Во всем этом приходится участвовать мне
Несколько историй из жизни Performance Engineer'а. 2014
А в чем участвуете вы?
§ Веб-разработка?
§ Эксплуатация веб-сайтов?
§ Поддержка проекта, написанного непонятно кем?
§ Борьба с хабраэффектом?
§ Принятие решений об аренде/покупке серверов?
§ Еще пока не определились, всё такое вкусное?
Несколько историй из жизни Performance Engineer'а. 2014
О чем пойдет речь?
§ Кто такие performance engineers и зачем они нужны
§ Как справиться с хабраэффектом
§ Сколько серверов нужно, чтобы вкрутить одну
лампочку
§ Что лучше: MySQL или MongoDB? PHP, Perl или
Ruby?
§ Однажды у моей подруги с ее парнем...
Несколько историй из жизни Performance Engineer'а. 2014
Кто такой performance engineer?
§ Это человек, который делает performance
engineering
§ http://en.wikipedia.org/wiki/Performance_engineering
§ ^ многа букв
§ Человек, который знает, как все устроено внутри не
в терминах бизнес-логики приложения
Несколько историй из жизни Performance Engineer'а. 2014
Как бороться с хабраэффектом
§ Я испытываю хабраэффект почти каждый раз, когда
открываю статью на Хабре
§ Способы борьбы:
§ Не верьте в магию
§ Не читайте статьи на Хабре
§ Знание — сила
§ (на самом деле, сила это масса на ускорение)
Несколько историй из жизни Performance Engineer'а. 2014
Структурная схема типичного веб-проекта
Несколько историй из жизни Performance Engineer'а. 2014
Проблемы типичного веб-проекта
§ Непосредственно вытекают из его структуры
§ Подразделяются на:
§ ВНЕЗАПНО ничего не работает
§ Всё тормозит!
§ Мы арендовали c3.xlarge, а оно все равно
тормозит!
§ Данные куда-то пропали
Несколько историй из жизни Performance Engineer'а. 2014
Переходим к практике
§ Краткое содержание следующих серий:
§ Описание проблемы, происшедшей у моей
подруги с ее парнем
§ Описание пути решения проблемы
§ Несколько слов о том, чем именно
руководствовались при решении проблемы,
и почему всё удалось (или не удалось)
Несколько историй из жизни Performance Engineer'а. 2014
Случай на производстве №1 (типичный)
§ Сайт-новостник, написанный с использованием
UMI.CMS древней версии
§ Проблема: медленно работает админка, время
от времени начинает медленно работать всё
§ “Медленно” - страница генерируется десятки
секунд
Несколько историй из жизни Performance Engineer'а. 2014
Решение №1 (типичнее некуда)
§ Включить MySQL slow queries log
§ На всякий случай добавить в код вызовы
профайлинга (подойдет что угодно — например,
записывать скорость генерации страницы в лог, в
базу данных, в PINBA, в Graphite или еще куда-то)
§ Убедиться, что проблема в запросах к БД
§ Найти долгий запрос и посмотреть его query plan
Несколько историй из жизни Performance Engineer'а. 2014
Почему (не) работает (тоже типично)
§ Запрос сгенерирован ORM и делает фиг знает что
§ На самом деле, никто не знает, что именно он
делает, но он джойнит две огромных таблицы,
накладывает условия и сортирует результат
§ Индексы не работают, да и не могут
§ Такие сортировки — хуже всего для СУБД
§ Разработчики не знают, как быть
Несколько историй из жизни Performance Engineer'а. 2014
Альтернативная история
§ Можно хакнуть ORM и заменять “плохой” запрос на
“хороший” (резалтсеты должны совпадать)
§ Можно заменять “плохой” запрос на N “хороших”
§ Можно вообще выбросить ORM
§ ^ До этого в моей практике не доходило ни у кого
§ Можно выбросить плохой запрос — вдруг, никто не
заметит?
Несколько историй из жизни Performance Engineer'а. 2014
Случай на производстве №2 (тоже типичный)
§ Сайт по продаже чего-то
§ Когда приходят боты, чтобы парсить контент — всё
тормозит
§ “Боты” - это не Яндекс или Google, а какие-то
конкуренты, которые игнорируют robots.txt и
публично доступное API
Несколько историй из жизни Performance Engineer'а. 2014
Решение №2 (довольно типичное)
§ На сайте уже стоит платный NewRelic, который
умеет показывать проблемные места с
хорошей степенью детализации*
§ * Для некоторых языков программирования
§ Туда никто даже смотреть не стал — ботов
просто забанили по IP
§ Потому что нефиг тут шастать!
Несколько историй из жизни Performance Engineer'а. 2014
Случай на производстве №3 (уже было)
§ Сайт по продаже чего-то еще
§ Когда приходят боты, чтобы подбирать логины
клиентов — всё тормозит
§ Боты приходят слишком умные, и по IP их забанить
невозможно — они делают по одному запросу в
несколько минут с одного IP, не чаще
Несколько историй из жизни Performance Engineer'а. 2014
Решение №3 (довольно унылое)
§ Добавить в код профилирующих метрик
§ Убедиться в том, что тормозит шаблонизатор
§ Подумать, о замене шаблонизатора на нормальный
§ Оценить трудоемкость
§ Выделить общий для ботов шаблон (запросы по
HTTP/1.0, у нормальных клиентов — 1.1)
§ Побанить ботов по шаблону
Несколько историй из жизни Performance Engineer'а. 2014
Случай на производстве №4 (бывает)
§ B2B-сервис, ходящий за исходным данными для
расчетов на несколько внешних сайтов
§ Когда клиентов на сайт заходит много — наступает
отказ в обслуживании
§ Особенно, если в то же самое время какой-нибудь
из сайтов-партнеров отдает данные не слишком
быстро
Несколько историй из жизни Performance Engineer'а. 2014
Решение №4 (тоже унылое)
§ Добавить в код профилирующих метрик
§ Убедиться в том, что синхронные запросы к
внешним сервисам — это далеко не всегда
хорошая идея (никогда, на самом деле)
§ Добавить uwsgi воркеров (пусть их будет 150)
§ Скрестить пальцы
Несколько историй из жизни Performance Engineer'а. 2014
Альтернативная история
§ Убедить разработчиков переделать
чудо-приложение под асинхронную модель
взаимодействия с внешним тормозным
миром
§ ^ Как оно и должно быть по науке
§ Хочешь, чтобы что-то было сделано — сделай
сам
Несколько историй из жизни Performance Engineer'а. 2014
Найдите десять отличий
§ Во всех четырех историях есть общие черты:
§ Приложение работает неоптимально
§ Проблемы довольно очевидны
§ У разработчиков нет времени и/или
желания разбираться с проблемами
производительности
§ Технический долг (и энтропия) растет
Несколько историй из жизни Performance Engineer'а. 2014
Пара слов о социальном взаимодействии
§ Коллеги не будут вас любить:
§ Вы разрушаете то, что было создано ими
§ Они часто путают красоту и эффективность
§ Для них вы какой-то выскочка
§ У них есть более важные задачи, чем
общение с вами
§ Они знают бизнес-логику, а вы - нет
Несколько историй из жизни Performance Engineer'а. 2014
Случай на производстве №5 (Н.Е.Х.)
§ B2B-сервис из случая №4
§ ОДНАЖДЫ все перестало работать, а именно:
§ Загрузка процессора 100%
§ Несмотря на наличие SSD, база данных работает
не слишком быстро
§ А приложение — и того хуже
Несколько историй из жизни Performance Engineer'а. 2014
Решение №5 (магия дружбы)
§ Метаться, кричать
§ Найти, что поменялось в последние две недели
(ничего не поменялось)
§ После 30-40 минут раздумий выключить в BIOS
сервера Hyper-Threading и запретить
изменения частоты процессора
§ Выдохнуть
Несколько историй из жизни Performance Engineer'а. 2014
Почему это работает
§ Не будь у моей подруги с ее парнем опыта
работы с системами виртуализации — фиг
бы они вообще до этого додумались
§ Планировщику операционной системы тяжело
в ситуации, когда ядра меняют частоту,
к тому же, некоторые из ядер не существуют
на самом деле
§ Планировщик двигает задачи туда-сюда
Несколько историй из жизни Performance Engineer'а. 2014
Стоп, стоп, стоп!
§ Метаться, делать другие хаотические движения,
а через какое-то время решить проблему?
§ WTF?
§ Факты — гипотеза — ответные меры
§ Как возникла гипотеза?
§ Сбор фактов, потом их анализ:
§ echo t > /proc/sysrq-trigger
Несколько историй из жизни Performance Engineer'а. 2014
Немного когнитивной психологии
§ А почему именно echo t > /proc/sysrq-trigger,
§ А не другая странная и непонятная мера?
§ Исходим из известных нам фактов: что-то
занимает процессор
§ Как посмотреть, что именно?
§ В приложении — gdb thread apply all bt
§ Не видим ничего необычного — спустимся ниже
Несколько историй из жизни Performance Engineer'а. 2014
Случай на производстве №6 (сложный)
§ Сервис показа мобильной рекламы
§ Набор асинхронных сервисов на языке Perl
§ ОДНАЖДЫ ПРЯМО НА ПРОДАКШНЕ все
перестало работать, а именно:
§ Реклама перестала отдаваться, хотя партнеры
работают исправно
§ На сервисах в пределах одной машины - таймауты
Несколько историй из жизни Performance Engineer'а. 2014
Решение №6 (очевидное)
§ Обвешать вообще всё метриками профайлинга,
включая 3rd party асинхронные модули
§ Под “вообще всё” я имел в виду вообще всё
§ Найти магическую константу MAX_PER_HOST в
одном из модулей, который, вообще-то, был
задуман автором как эмуляция браузера
§ Увеличить ее с 4 до 400
§ Жить спокойно до следующего падения
Несколько историй из жизни Performance Engineer'а. 2014
Почему это работает
§ Потому что это и есть нормальный инженерный
подход, а именно:
§ Измерить (получить метрики)
§ Выработать план (проанализировать метрики)
§ Внести полезные изменения
§ Снова измерить
Несколько историй из жизни Performance Engineer'а. 2014
Почему было сложно
§ Несмотря на верность в целом, описанный
подход имеет ряд недостатков:
§ Невозможно предсказать время его
сходимости в общем виде
§ Он вообще может не сойтись в общем виде
по объективным причинам
§ Альтернативные отличные идеи (“всё
переписать”, etc)
Несколько историй из жизни Performance Engineer'а. 2014
Все переписать!
§ Итак, что лучше, Perl, Ruby или PHP?
§ В неравенстве Perl <> Ruby <> PHP, в конечном
счете, где-то должны находиться и вы сами
§ И если вы хуже и чем Perl, и чем Ruby, и чем
PHP — у вас не получится НИЧЕГО
§ Для CPU-bound задач берите что-нибудь, что
поближе к железу, чем перечисленные
не-JIT-enabled скриптовые поделки*
Несколько историй из жизни Performance Engineer'а. 2014
* есть всякие наработки и для них
Случай на производстве №7 (повсеместный)
§ Клиент хостился на Хетцнере
§ ОДНАЖДЫ в зеркале сломался первый диск
§ Через некоторое время сломался и второй
§ Когда все это заметили — данные уже были
немножко потеряны
Несколько историй из жизни Performance Engineer'а. 2014
Решение №7 (необходимое)
§ Завести бэкапы!
§ При чем же тут performance?
§ Pooling, compression, deduplication...
§ ^ BackupPC отлично подходит, но...
§ rsync очень сильно нагружает дисковую
подсистему машины-клиента
§ Опция --bwlimit=500 (или сколько можете)
Несколько историй из жизни Performance Engineer'а. 2014
Почему это (не) работает
§ Зачем нужны бэкапы?
§ Затем, чтобы однажды ими воспользоваться,
например...
§ Развернуть систему из бэкапа целиком!
§ Бэкап сотен гигабайт будет разворачиваться
несколько суток
§ ^ Для начала просто задумайтесь об этом
Несколько историй из жизни Performance Engineer'а. 2014
Выводы
§ Старайтесь всегда точно знать, где вы находитесь
§ Измеряйте
§ Планируйте
§ Не паникуйте
§ В сложной ситуации делайте что-нибудь красиво
§ Все хорошо будет
Несколько историй из жизни Performance Engineer'а. 2014
С вами был Александр Чистяков,
главный инженер Git in Sky
alex@gitinsky.com
http://gitinsky.com
http://meetup.com/DevOps-40
Пожалуйста, ваши вопросы.
Спасибо за внимание!

Contenu connexe

Tendances

Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015Alex Chistyakov
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиковITCrowd Almaty
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConAlex Chistyakov
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Alex Chistyakov
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDAlex Chistyakov
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Ontico
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Anton Baranov
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013Alex Chistyakov
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Ontico
 
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...Ontico
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Ontico
 

Tendances (20)

Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиков
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPCon
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
On Docker
On DockerOn Docker
On Docker
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
 

En vedette

My talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruMy talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruAlex Chistyakov
 
My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14
My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14
My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14Alex Chistyakov
 
Управление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктурыУправление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктурыSerguei Gitinsky
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25Alex Chistyakov
 
My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016Alex Chistyakov
 
My talk on Piter Py 2016
My talk on Piter Py 2016My talk on Piter Py 2016
My talk on Piter Py 2016Alex Chistyakov
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016Alex Chistyakov
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?Daniel Podolsky
 
My talk at Linux Piter 2015
My talk at Linux Piter 2015My talk at Linux Piter 2015
My talk at Linux Piter 2015Alex Chistyakov
 
Auto Brands in the US on Social Media During Q2 2015
Auto Brands in the US on Social Media During Q2 2015Auto Brands in the US on Social Media During Q2 2015
Auto Brands in the US on Social Media During Q2 2015Unmetric
 
План на февраль 2016
План на февраль 2016План на февраль 2016
План на февраль 2016supportfranco
 
PHP performance 101: so you need to use a database
PHP performance 101: so you need to use a databasePHP performance 101: so you need to use a database
PHP performance 101: so you need to use a databaseLeon Fayer
 
Building a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilBuilding a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilIBM UrbanCode Products
 
No you are not a DevOps engineer
No you are not a DevOps engineerNo you are not a DevOps engineer
No you are not a DevOps engineerMike Kavis
 
Performance: в борьбе за миллисекунды
Performance: в борьбе за миллисекундыPerformance: в борьбе за миллисекунды
Performance: в борьбе за миллисекундыAndrei Kozyakov
 
Performance маркетинг в соц.сетях.
Performance маркетинг в соц.сетях.Performance маркетинг в соц.сетях.
Performance маркетинг в соц.сетях.Artics Internet Solutions
 
Adventures in public speaking
Adventures in public speakingAdventures in public speaking
Adventures in public speakingLeon Fayer
 

En vedette (20)

Using Ansible
Using AnsibleUsing Ansible
Using Ansible
 
My talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ruMy talk on Graphite stack on 58it.ru
My talk on Graphite stack on 58it.ru
 
My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14
My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14
My talk on using LVM thin provisioning from SPbLUG/DevOps-40 meetup 25.06.14
 
Управление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктурыУправление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктуры
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016My talk from PgConf.Russia 2016
My talk from PgConf.Russia 2016
 
My talk on Piter Py 2016
My talk on Piter Py 2016My talk on Piter Py 2016
My talk on Piter Py 2016
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
 
My talk at Linux Piter 2015
My talk at Linux Piter 2015My talk at Linux Piter 2015
My talk at Linux Piter 2015
 
Auto Brands in the US on Social Media During Q2 2015
Auto Brands in the US on Social Media During Q2 2015Auto Brands in the US on Social Media During Q2 2015
Auto Brands in the US on Social Media During Q2 2015
 
План на февраль 2016
План на февраль 2016План на февраль 2016
План на февраль 2016
 
PHP performance 101: so you need to use a database
PHP performance 101: so you need to use a databasePHP performance 101: so you need to use a database
PHP performance 101: so you need to use a database
 
Building a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilBuilding a DevOps Team that isn't Evil
Building a DevOps Team that isn't Evil
 
No you are not a DevOps engineer
No you are not a DevOps engineerNo you are not a DevOps engineer
No you are not a DevOps engineer
 
DevOps Unicorns
DevOps UnicornsDevOps Unicorns
DevOps Unicorns
 
Performance: в борьбе за миллисекунды
Performance: в борьбе за миллисекундыPerformance: в борьбе за миллисекунды
Performance: в борьбе за миллисекунды
 
Performance маркетинг в соц.сетях.
Performance маркетинг в соц.сетях.Performance маркетинг в соц.сетях.
Performance маркетинг в соц.сетях.
 
Adventures in public speaking
Adventures in public speakingAdventures in public speaking
Adventures in public speaking
 

Similaire à Performance engineering stories from #fdminicon Saransk

как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесуAndrey Rebrov
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9OdessaFrontend
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Fwdays
 
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014it-people
 
Как заводить баги понятно всем
Как заводить баги понятно всемКак заводить баги понятно всем
Как заводить баги понятно всемSQALab
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...HappyDev
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...Sergey Ponomarev
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanAlexander Byndyu
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0WRider
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидахОмские ИТ-субботники
 
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»Sigma Software
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла0leGG
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчейVitebsk DSC
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 
"Dealing with legacy code"
"Dealing with legacy code""Dealing with legacy code"
"Dealing with legacy code"HYS Enterprise
 

Similaire à Performance engineering stories from #fdminicon Saransk (20)

как инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесукак инженерные практики помогают экономить бизнесу
как инженерные практики помогают экономить бизнесу
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
 
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
А. Ахметов "Когда тесты пишут разработчики", DUMP-2014
 
Как заводить баги понятно всем
Как заводить баги понятно всемКак заводить баги понятно всем
Как заводить баги понятно всем
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к Kanban
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
 
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
Выбираем стратегию создания бранчей
Выбираем стратегию создания бранчейВыбираем стратегию создания бранчей
Выбираем стратегию создания бранчей
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
"Dealing with legacy code"
"Dealing with legacy code""Dealing with legacy code"
"Dealing with legacy code"
 

Plus de 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
 

Plus de 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
 

Performance engineering stories from #fdminicon Saransk

  • 1. Несколько историй из жизни Performance Engineer'а Александр Чистяков, главный инженер Git in Sky, 2014 Как я съел кусок мыла Александр Чистяков, главный инженер Git in Sky, 2014
  • 2. Давайте познакомимся § Меня зовут Саша § Я работаю главным инженером в компании Git in Sky § Мы занимаемся эксплуатацией веб-проектов, помощью в разработке веб-проектов, собственно разработкой веб-проектов и автоматизацией веб- проектов § Во всем этом приходится участвовать мне Несколько историй из жизни Performance Engineer'а. 2014
  • 3. А в чем участвуете вы? § Веб-разработка? § Эксплуатация веб-сайтов? § Поддержка проекта, написанного непонятно кем? § Борьба с хабраэффектом? § Принятие решений об аренде/покупке серверов? § Еще пока не определились, всё такое вкусное? Несколько историй из жизни Performance Engineer'а. 2014
  • 4. О чем пойдет речь? § Кто такие performance engineers и зачем они нужны § Как справиться с хабраэффектом § Сколько серверов нужно, чтобы вкрутить одну лампочку § Что лучше: MySQL или MongoDB? PHP, Perl или Ruby? § Однажды у моей подруги с ее парнем... Несколько историй из жизни Performance Engineer'а. 2014
  • 5. Кто такой performance engineer? § Это человек, который делает performance engineering § http://en.wikipedia.org/wiki/Performance_engineering § ^ многа букв § Человек, который знает, как все устроено внутри не в терминах бизнес-логики приложения Несколько историй из жизни Performance Engineer'а. 2014
  • 6. Как бороться с хабраэффектом § Я испытываю хабраэффект почти каждый раз, когда открываю статью на Хабре § Способы борьбы: § Не верьте в магию § Не читайте статьи на Хабре § Знание — сила § (на самом деле, сила это масса на ускорение) Несколько историй из жизни Performance Engineer'а. 2014
  • 7. Структурная схема типичного веб-проекта Несколько историй из жизни Performance Engineer'а. 2014
  • 8. Проблемы типичного веб-проекта § Непосредственно вытекают из его структуры § Подразделяются на: § ВНЕЗАПНО ничего не работает § Всё тормозит! § Мы арендовали c3.xlarge, а оно все равно тормозит! § Данные куда-то пропали Несколько историй из жизни Performance Engineer'а. 2014
  • 9. Переходим к практике § Краткое содержание следующих серий: § Описание проблемы, происшедшей у моей подруги с ее парнем § Описание пути решения проблемы § Несколько слов о том, чем именно руководствовались при решении проблемы, и почему всё удалось (или не удалось) Несколько историй из жизни Performance Engineer'а. 2014
  • 10. Случай на производстве №1 (типичный) § Сайт-новостник, написанный с использованием UMI.CMS древней версии § Проблема: медленно работает админка, время от времени начинает медленно работать всё § “Медленно” - страница генерируется десятки секунд Несколько историй из жизни Performance Engineer'а. 2014
  • 11. Решение №1 (типичнее некуда) § Включить MySQL slow queries log § На всякий случай добавить в код вызовы профайлинга (подойдет что угодно — например, записывать скорость генерации страницы в лог, в базу данных, в PINBA, в Graphite или еще куда-то) § Убедиться, что проблема в запросах к БД § Найти долгий запрос и посмотреть его query plan Несколько историй из жизни Performance Engineer'а. 2014
  • 12. Почему (не) работает (тоже типично) § Запрос сгенерирован ORM и делает фиг знает что § На самом деле, никто не знает, что именно он делает, но он джойнит две огромных таблицы, накладывает условия и сортирует результат § Индексы не работают, да и не могут § Такие сортировки — хуже всего для СУБД § Разработчики не знают, как быть Несколько историй из жизни Performance Engineer'а. 2014
  • 13. Альтернативная история § Можно хакнуть ORM и заменять “плохой” запрос на “хороший” (резалтсеты должны совпадать) § Можно заменять “плохой” запрос на N “хороших” § Можно вообще выбросить ORM § ^ До этого в моей практике не доходило ни у кого § Можно выбросить плохой запрос — вдруг, никто не заметит? Несколько историй из жизни Performance Engineer'а. 2014
  • 14. Случай на производстве №2 (тоже типичный) § Сайт по продаже чего-то § Когда приходят боты, чтобы парсить контент — всё тормозит § “Боты” - это не Яндекс или Google, а какие-то конкуренты, которые игнорируют robots.txt и публично доступное API Несколько историй из жизни Performance Engineer'а. 2014
  • 15. Решение №2 (довольно типичное) § На сайте уже стоит платный NewRelic, который умеет показывать проблемные места с хорошей степенью детализации* § * Для некоторых языков программирования § Туда никто даже смотреть не стал — ботов просто забанили по IP § Потому что нефиг тут шастать! Несколько историй из жизни Performance Engineer'а. 2014
  • 16. Случай на производстве №3 (уже было) § Сайт по продаже чего-то еще § Когда приходят боты, чтобы подбирать логины клиентов — всё тормозит § Боты приходят слишком умные, и по IP их забанить невозможно — они делают по одному запросу в несколько минут с одного IP, не чаще Несколько историй из жизни Performance Engineer'а. 2014
  • 17. Решение №3 (довольно унылое) § Добавить в код профилирующих метрик § Убедиться в том, что тормозит шаблонизатор § Подумать, о замене шаблонизатора на нормальный § Оценить трудоемкость § Выделить общий для ботов шаблон (запросы по HTTP/1.0, у нормальных клиентов — 1.1) § Побанить ботов по шаблону Несколько историй из жизни Performance Engineer'а. 2014
  • 18. Случай на производстве №4 (бывает) § B2B-сервис, ходящий за исходным данными для расчетов на несколько внешних сайтов § Когда клиентов на сайт заходит много — наступает отказ в обслуживании § Особенно, если в то же самое время какой-нибудь из сайтов-партнеров отдает данные не слишком быстро Несколько историй из жизни Performance Engineer'а. 2014
  • 19. Решение №4 (тоже унылое) § Добавить в код профилирующих метрик § Убедиться в том, что синхронные запросы к внешним сервисам — это далеко не всегда хорошая идея (никогда, на самом деле) § Добавить uwsgi воркеров (пусть их будет 150) § Скрестить пальцы Несколько историй из жизни Performance Engineer'а. 2014
  • 20. Альтернативная история § Убедить разработчиков переделать чудо-приложение под асинхронную модель взаимодействия с внешним тормозным миром § ^ Как оно и должно быть по науке § Хочешь, чтобы что-то было сделано — сделай сам Несколько историй из жизни Performance Engineer'а. 2014
  • 21. Найдите десять отличий § Во всех четырех историях есть общие черты: § Приложение работает неоптимально § Проблемы довольно очевидны § У разработчиков нет времени и/или желания разбираться с проблемами производительности § Технический долг (и энтропия) растет Несколько историй из жизни Performance Engineer'а. 2014
  • 22. Пара слов о социальном взаимодействии § Коллеги не будут вас любить: § Вы разрушаете то, что было создано ими § Они часто путают красоту и эффективность § Для них вы какой-то выскочка § У них есть более важные задачи, чем общение с вами § Они знают бизнес-логику, а вы - нет Несколько историй из жизни Performance Engineer'а. 2014
  • 23. Случай на производстве №5 (Н.Е.Х.) § B2B-сервис из случая №4 § ОДНАЖДЫ все перестало работать, а именно: § Загрузка процессора 100% § Несмотря на наличие SSD, база данных работает не слишком быстро § А приложение — и того хуже Несколько историй из жизни Performance Engineer'а. 2014
  • 24. Решение №5 (магия дружбы) § Метаться, кричать § Найти, что поменялось в последние две недели (ничего не поменялось) § После 30-40 минут раздумий выключить в BIOS сервера Hyper-Threading и запретить изменения частоты процессора § Выдохнуть Несколько историй из жизни Performance Engineer'а. 2014
  • 25. Почему это работает § Не будь у моей подруги с ее парнем опыта работы с системами виртуализации — фиг бы они вообще до этого додумались § Планировщику операционной системы тяжело в ситуации, когда ядра меняют частоту, к тому же, некоторые из ядер не существуют на самом деле § Планировщик двигает задачи туда-сюда Несколько историй из жизни Performance Engineer'а. 2014
  • 26. Стоп, стоп, стоп! § Метаться, делать другие хаотические движения, а через какое-то время решить проблему? § WTF? § Факты — гипотеза — ответные меры § Как возникла гипотеза? § Сбор фактов, потом их анализ: § echo t > /proc/sysrq-trigger Несколько историй из жизни Performance Engineer'а. 2014
  • 27. Немного когнитивной психологии § А почему именно echo t > /proc/sysrq-trigger, § А не другая странная и непонятная мера? § Исходим из известных нам фактов: что-то занимает процессор § Как посмотреть, что именно? § В приложении — gdb thread apply all bt § Не видим ничего необычного — спустимся ниже Несколько историй из жизни Performance Engineer'а. 2014
  • 28. Случай на производстве №6 (сложный) § Сервис показа мобильной рекламы § Набор асинхронных сервисов на языке Perl § ОДНАЖДЫ ПРЯМО НА ПРОДАКШНЕ все перестало работать, а именно: § Реклама перестала отдаваться, хотя партнеры работают исправно § На сервисах в пределах одной машины - таймауты Несколько историй из жизни Performance Engineer'а. 2014
  • 29. Решение №6 (очевидное) § Обвешать вообще всё метриками профайлинга, включая 3rd party асинхронные модули § Под “вообще всё” я имел в виду вообще всё § Найти магическую константу MAX_PER_HOST в одном из модулей, который, вообще-то, был задуман автором как эмуляция браузера § Увеличить ее с 4 до 400 § Жить спокойно до следующего падения Несколько историй из жизни Performance Engineer'а. 2014
  • 30. Почему это работает § Потому что это и есть нормальный инженерный подход, а именно: § Измерить (получить метрики) § Выработать план (проанализировать метрики) § Внести полезные изменения § Снова измерить Несколько историй из жизни Performance Engineer'а. 2014
  • 31. Почему было сложно § Несмотря на верность в целом, описанный подход имеет ряд недостатков: § Невозможно предсказать время его сходимости в общем виде § Он вообще может не сойтись в общем виде по объективным причинам § Альтернативные отличные идеи (“всё переписать”, etc) Несколько историй из жизни Performance Engineer'а. 2014
  • 32. Все переписать! § Итак, что лучше, Perl, Ruby или PHP? § В неравенстве Perl <> Ruby <> PHP, в конечном счете, где-то должны находиться и вы сами § И если вы хуже и чем Perl, и чем Ruby, и чем PHP — у вас не получится НИЧЕГО § Для CPU-bound задач берите что-нибудь, что поближе к железу, чем перечисленные не-JIT-enabled скриптовые поделки* Несколько историй из жизни Performance Engineer'а. 2014 * есть всякие наработки и для них
  • 33. Случай на производстве №7 (повсеместный) § Клиент хостился на Хетцнере § ОДНАЖДЫ в зеркале сломался первый диск § Через некоторое время сломался и второй § Когда все это заметили — данные уже были немножко потеряны Несколько историй из жизни Performance Engineer'а. 2014
  • 34. Решение №7 (необходимое) § Завести бэкапы! § При чем же тут performance? § Pooling, compression, deduplication... § ^ BackupPC отлично подходит, но... § rsync очень сильно нагружает дисковую подсистему машины-клиента § Опция --bwlimit=500 (или сколько можете) Несколько историй из жизни Performance Engineer'а. 2014
  • 35. Почему это (не) работает § Зачем нужны бэкапы? § Затем, чтобы однажды ими воспользоваться, например... § Развернуть систему из бэкапа целиком! § Бэкап сотен гигабайт будет разворачиваться несколько суток § ^ Для начала просто задумайтесь об этом Несколько историй из жизни Performance Engineer'а. 2014
  • 36. Выводы § Старайтесь всегда точно знать, где вы находитесь § Измеряйте § Планируйте § Не паникуйте § В сложной ситуации делайте что-нибудь красиво § Все хорошо будет Несколько историй из жизни Performance Engineer'а. 2014
  • 37. С вами был Александр Чистяков, главный инженер Git in Sky alex@gitinsky.com http://gitinsky.com http://meetup.com/DevOps-40 Пожалуйста, ваши вопросы. Спасибо за внимание!