codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая...
DESCRIPTION
TRANSCRIPT
![Page 1: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/1.jpg)
О чем стоит подумать, приступая к разработке высоконагруженной системы
Артем Вольфтруб
![Page 2: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/2.jpg)
Интернет проекты
• Динамичная среда
• Основной источник информации – внешние пользователи
• Высокая конкуренция
![Page 3: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/3.jpg)
Начинаем проектКто?
Когда?
Как?
Что?
![Page 4: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/4.jpg)
У нас есть своя IT команда, но она сильно загружена в ближайшие три месяца. Мы рассчитываем, что за это время вы напишите первую версию системы, которую мы будем развивать своими силами.
![Page 5: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/5.jpg)
Цикл разработки интернет-проекта
разработка
аналитика
тестирование
t
![Page 6: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/6.jpg)
• Три месяца – минимальный цикл разработки интернет системы
• Если N разработчиков сделают систему за три месяца, то 2*N
разработчиков сделают систему за…
• Основная работа начинается после релиза
Важно понимать, что
три месяца
![Page 7: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/7.jpg)
В первую версию системы должно войти N фич. У нас есть еще несколько минорных пожеланий, но их можно будет реализовать после выпуска первой версии.
![Page 8: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/8.jpg)
Формирование требований
• Анализ рынка
• Формирование ключевых пользовательских групп
• Формирование стратегии
• Интервьюирование ключевых пользователей
• Прототипирование
• Тестирование, получение обратной связи
• Коррекция ТАК НЕ БЫВАЕТ
![Page 9: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/9.jpg)
Формирование требований
• Наличие аналогичного продукта или сервиса
• Видение системы, изложенное на листе А4
• Идея в голове начальника
ТАК БЫВАЕТ
![Page 10: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/10.jpg)
А в результате
• На момент релиза, востребованными оказываются около 60% фич
• 40% фич, которые оказались не востребованными – самые сложные с точки зрения реализации
![Page 11: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/11.jpg)
Система должна быть масштабируемой. Нам нужен подробный план того, как мы будем справляться с нагрузками, когда система вырастет со 100 000 пользователей до 10 000 000.
![Page 12: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/12.jpg)
Цели
• План для начальства или план для разработчиков
• Узкие места возникают совершенно не там, где это предполагалось
• А кто будет писать?
![Page 13: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/13.jpg)
Анализ нагрузки
• Оцениваем трафик
• Оцениваем объем данных
• Фантазируем («если – то»)
![Page 14: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/14.jpg)
Слайд не для менеджеров
• У «Веселого фермера» тоже был первый пользователь
• Когда у вас будет 10 000 000 пользователей, у вас будут деньги,
чтобы все переписать
![Page 15: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/15.jpg)
Что значит приемлемый уровень отказоустойчивости? Система должна работать безотказно!
![Page 16: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/16.jpg)
Виды простоев
• Отказ в результате выхода из строя
• Остановка на плановое обслуживание
![Page 17: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/17.jpg)
Оценка отказоустойчивости
• Внешние зависимости
• Прагматичный подход (99.99% - это 1 час в год)
• Выделение критических компонентов
![Page 18: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/18.jpg)
Где нужна отказоустойчивость
• Компоненты, которые используются внешними системами
• Компоненты, от которых зависит бизнес компании
• Компоненты, простой которых связан с репутационными потерями
компании
![Page 19: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/19.jpg)
Согласно последним обзорам, производительность фреймворка XYZ выше, чем ZYX. Давайте разрабатывать систему с использованием XYZ
![Page 20: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/20.jpg)
Ограничение выбора
• Корпоративный стандарт
• Расширения существующей системы
• Собственная команда разработчиков
![Page 21: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/21.jpg)
Сравнение фреймворков
• Самый быстрый фреймворк - это тот, которым умеют
пользоваться разработчики
• Программа «Hello world» всегда работает быстро
![Page 22: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/22.jpg)
10000 20000 30000 50000 100000 300000
Число итераций
Вр
ем
я (
се
к)
PHP
Groovy
![Page 23: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/23.jpg)
Как выбирать
• Исходить из текущих задач и задач на ближайшую
перспективу (время написания первой версии + поддержка)
• Смотреть на профиль команды
![Page 24: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/24.jpg)
Зачем нам система мониторинга? Если система сломается, это и так все увидят!
![Page 25: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/25.jpg)
Проблемы
• Мониторинг не является частью проекта
• Систему мониторинга должен кто-то эксплуатировать
Запускать высоконагруженный проект без мониторинга бессмысленно!
![Page 26: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/26.jpg)
Что дает мониторинг
• Прогнозирование
• Диагностика проблем на ранней стадии
• Выявление типовых проблем разработка универсальных
решений
• Может использоваться, как инструмент аналитика
![Page 27: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/27.jpg)
Виды мониторинга
• Физический уровень
(сеть, доступность сервера, CPU, место на диске, память, IO)
• Уровень приложения
(HTTP Errors, Response time, Exceptions)
• Бизнес уровень
(основан на бизнес критериях)
![Page 28: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/28.jpg)
Наши IT-шники не разбираются в вашей системе. Напишите нам максимально подробнуюпошаговую инструкцию, как ее устанавливать и поддерживать.
![Page 29: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/29.jpg)
Откуда растут ноги
• Конфиденциальная информация
• Корпоративные стандарт безопасности
• Нежелание разбираться в новых системах
![Page 30: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/30.jpg)
Разделение ответственности
• Человек, который отвечает за систему, должен иметь
всю полноту власти
• Можно разделить роли, но не обязанности
![Page 31: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/31.jpg)
Обновление системы
• План работ, включающий сценарий возврата к предыдущей версии
• План тестирования для всех сценариев
• Версионность, отдельные ветки для релизов
• Ограничение доступа к боевым серверам
• Процедуры согласования релизов с бизнесом
![Page 32: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/32.jpg)
Зачем переписывать код, который был написан всего пару месяцев назад. У нас еще куча фич,которые нужно реализовать.
Почему мы должны платить за оптимизацию?! Неужели нельзя сразу писать оптимально?
![Page 33: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/33.jpg)
Типичные ситуации
• Программисты всегда занимаются бессмысленным
украшательством, система и так неплохо работает
• Улучшение кода это замечательно, но у нас пока есть более
важная работа
• Почему мы должны платить за переход на новую версию движка ХХХ. Нельзя было сразу на нее перейти?
![Page 34: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы](https://reader035.vdocuments.mx/reader035/viewer/2022070301/5462355aaf7959d6408b4ec6/html5/thumbnails/34.jpg)
Важно
• Расставить приоритеты на каждый этап проекта
• Убедиться, что все разработчики правильно понимают
приоритеты каждого из этапов
• Понимать, что рефакторинг – неотъемлемая часть любой
разработки
• Доверять разработчикам