codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая...

35
О чем стоит подумать, приступая к разработке высоконагруженной системы Артем Вольфтруб

Upload: codefest

Post on 11-Nov-2014

1.130 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

О чем стоит подумать, приступая к разработке высоконагруженной системы

Артем Вольфтруб

Page 2: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Интернет проекты

• Динамичная среда

• Основной источник информации – внешние пользователи

• Высокая конкуренция

Page 3: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Начинаем проектКто?

Когда?

Как?

Что?

Page 4: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

У нас есть своя IT команда, но она сильно загружена в ближайшие три месяца. Мы рассчитываем, что за это время вы напишите первую версию системы, которую мы будем развивать своими силами.

Page 5: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Цикл разработки интернет-проекта

разработка

аналитика

тестирование

t

Page 6: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

• Три месяца – минимальный цикл разработки интернет системы

• Если N разработчиков сделают систему за три месяца, то 2*N

разработчиков сделают систему за…

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

Важно понимать, что

три месяца

Page 7: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

В первую версию системы должно войти N фич. У нас есть еще несколько минорных пожеланий, но их можно будет реализовать после выпуска первой версии.

Page 8: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Формирование требований

• Анализ рынка

• Формирование ключевых пользовательских групп

• Формирование стратегии

• Интервьюирование ключевых пользователей

• Прототипирование

• Тестирование, получение обратной связи

• Коррекция ТАК НЕ БЫВАЕТ

Page 9: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Формирование требований

• Наличие аналогичного продукта или сервиса

• Видение системы, изложенное на листе А4

• Идея в голове начальника

ТАК БЫВАЕТ

Page 10: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

А в результате

• На момент релиза, востребованными оказываются около 60% фич

• 40% фич, которые оказались не востребованными – самые сложные с точки зрения реализации

Page 11: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Система должна быть масштабируемой. Нам нужен подробный план того, как мы будем справляться с нагрузками, когда система вырастет со 100 000 пользователей до 10 000 000.

Page 12: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Цели

• План для начальства или план для разработчиков

• Узкие места возникают совершенно не там, где это предполагалось

• А кто будет писать?

Page 13: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Анализ нагрузки

• Оцениваем трафик

• Оцениваем объем данных

• Фантазируем («если – то»)

Page 14: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Слайд не для менеджеров

• У «Веселого фермера» тоже был первый пользователь

• Когда у вас будет 10 000 000 пользователей, у вас будут деньги,

чтобы все переписать

Page 15: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Что значит приемлемый уровень отказоустойчивости? Система должна работать безотказно!

Page 16: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Виды простоев

• Отказ в результате выхода из строя

• Остановка на плановое обслуживание

Page 17: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Оценка отказоустойчивости

• Внешние зависимости

• Прагматичный подход (99.99% - это 1 час в год)

• Выделение критических компонентов

Page 18: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Где нужна отказоустойчивость

• Компоненты, которые используются внешними системами

• Компоненты, от которых зависит бизнес компании

• Компоненты, простой которых связан с репутационными потерями

компании

Page 19: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Согласно последним обзорам, производительность фреймворка XYZ выше, чем ZYX. Давайте разрабатывать систему с использованием XYZ

Page 20: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Ограничение выбора

• Корпоративный стандарт

• Расширения существующей системы

• Собственная команда разработчиков

Page 21: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Сравнение фреймворков

• Самый быстрый фреймворк - это тот, которым умеют

пользоваться разработчики

• Программа «Hello world» всегда работает быстро

Page 22: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

10000 20000 30000 50000 100000 300000

Число итераций

Вр

ем

я (

се

к)

PHP

Groovy

Page 23: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Как выбирать

• Исходить из текущих задач и задач на ближайшую

перспективу (время написания первой версии + поддержка)

• Смотреть на профиль команды

Page 24: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Зачем нам система мониторинга? Если система сломается, это и так все увидят!

Page 25: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Проблемы

• Мониторинг не является частью проекта

• Систему мониторинга должен кто-то эксплуатировать

Запускать высоконагруженный проект без мониторинга бессмысленно!

Page 26: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Что дает мониторинг

• Прогнозирование

• Диагностика проблем на ранней стадии

• Выявление типовых проблем разработка универсальных

решений

• Может использоваться, как инструмент аналитика

Page 27: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Виды мониторинга

• Физический уровень

(сеть, доступность сервера, CPU, место на диске, память, IO)

• Уровень приложения

(HTTP Errors, Response time, Exceptions)

• Бизнес уровень

(основан на бизнес критериях)

Page 28: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Наши IT-шники не разбираются в вашей системе. Напишите нам максимально подробнуюпошаговую инструкцию, как ее устанавливать и поддерживать.

Page 29: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Откуда растут ноги

• Конфиденциальная информация

• Корпоративные стандарт безопасности

• Нежелание разбираться в новых системах

Page 30: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Разделение ответственности

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

всю полноту власти

• Можно разделить роли, но не обязанности

Page 31: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Обновление системы

• План работ, включающий сценарий возврата к предыдущей версии

• План тестирования для всех сценариев

• Версионность, отдельные ветки для релизов

• Ограничение доступа к боевым серверам

• Процедуры согласования релизов с бизнесом

Page 32: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Зачем переписывать код, который был написан всего пару месяцев назад. У нас еще куча фич,которые нужно реализовать.

Почему мы должны платить за оптимизацию?! Неужели нельзя сразу писать оптимально?

Page 33: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Типичные ситуации

• Программисты всегда занимаются бессмысленным

украшательством, система и так неплохо работает

• Улучшение кода это замечательно, но у нас пока есть более

важная работа

• Почему мы должны платить за переход на новую версию движка ХХХ. Нельзя было сразу на нее перейти?

Page 34: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Важно

• Расставить приоритеты на каждый этап проекта

• Убедиться, что все разработчики правильно понимают

приоритеты каждого из этапов

• Понимать, что рефакторинг – неотъемлемая часть любой

разработки

• Доверять разработчикам

Page 35: Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке высоконагруженной системы

Вопросы?

Артем Вольфтруб

[email protected]