Разработка надёжных
высоконагруженных систем

Москва,
24, 25 и 26 мая
Продано!
4, 5 и 6 июля
Продано
Регистрация на очные мероприятия закрыта,
но вы можете попасть на
вебинар в семи частях.

Ведущий мастер-класса — Андрей Смирнов

Трёхдневный мастер-класс с практическими заданиями

Опытный руководитель разработки, разработчик, фанат Python, Go, DevOps и больших нагрузок. Андрей участвовал в разработке и руководил созданием таких проектов как damochka.ru, delit.net, smotri.com. В стартапе Qik руководил созданием backend-сервисов, после покупки Qik компанией Skype продолжил заниматься созданием серверной части системы асинхронных коммуникаций Skype. Автор open-source проектов aptly, Redis Resharding Proxy и txZMQ. Создатель сервера вещаний для smotri.com, сервера сигналлинга и нотификаций для видеозвонков Qik и многих других проектов. Многократно выступал на РИТ++, HighLoad и других конференциях, преподавал на факультете ВМиК МГУ.

Описание

Разработчики, технические руководители, руководители проектов часто проходят один и тот же путь проб и ошибок, развивая сервис от прототипа до готового большого продукта. Вопросы надёжности, отказоустойчивости, масштабирования обычно приносят наибольшее количество проблем, могут отодвинуть релиз проекта или создать негативное впечатление о продукте. Мы поговорим о типичных системах, состоящих из двух частей: клиентского приложения (HTML/Mobile/Desktop) и веб-сервиса (бэкенда).

Трёхдневный мастер-класс позволит ответить на вопросы:

  • — какую архитектуру системы мне выбрать, когда стоит изменить существующую архитектуру, какие будут преимущества у такого перехода?
  • — где лучше хранить данные X, если над ними надо производить операции Y, при этом всё это будет находиться в облаке/железных серверах/памяти/…? как устроено хранилище данных, какие возможны компромиссы?
  • — какие изменения я сделаю, когда нагрузка увеличится в десять, сто, … раз?
  • — как обеспечить надёжность, начиная с клиентского приложения и заканчивая сервером?

В этом курсе будут освещены основные этапы разработки и эксплуатации подобных систем — это большой набор разнообразных тем, некоторые из них будут рассмотрены подробно, для других, в силу их большого объёма, будет дан краткий сравнительный обзор. Самое ценное — это полученный опыт, расширение кругозора, набор «трюков» и просто приёмов. На протяжении всего мастер-класса мы будем выполнять практические задания — от нагрузочного тестирования HTTP-серверов различных архитектур, до симуляции падения бэкенда из-за некорректного алгоритма повторения запроса на клиенте.

Предполагаемый уровень подготовки участников: опыт разработки web-приложений, базовые представления о базах данных, сетевом взаимодействии. Для выполнения практических заданий понадобится компьютер с настроенным клиентом ssh.

Программа

День первый
  • Немного теории. Нагрузка, характеристики нагрузки. Запросы, задержка, конкурентность, отказы. Характеристики нагрузки. Экономика высоконагруженной системы. Ресурсы и их ограниченность. Успех проекта как его способность масштабироваться. Базовая архитектура веб-проекта. Компоненты, связь между ними, надёжность системы как функция надёжности отдельных компонентов.
  • Данные. Реляционные базы данных. Key-Value, не-SQL базы данны. Принципы хранения данных: ACID, CAP-теорема. Проектирование схемы реальной БД в различных моделях данных.
День второй
  • Данные (продолжение). Индексы, денормализация, использование разных типов хранилищ для разных данных. Целостность, отказоустойчивость, доступность в распределённых хранилищах. Масштабирование данных: репликация, шардирование, деление. Кеширование данных: инвалидация кеша, тегирование. Полнотекстовый поиск.
  • Приложение. Структура серверного и клиентского приложения, анализ узких и проблемных мест. Сетевой ввод-вывод: синхронный, асинхронный. Реактор, обслуживание большого чила соединений (C10K, C100K). Многозадачность: процессы, нити, кооперативная многозадачность, комбинации. Архитектура современных серверов, многоядерные системы, NUMA. Краткий обзор фреймворков: Ruby, Ruby on Rails. Python, Tornado, Twisted, gevent. Go. Java.
  • Взаимодействие. Архитектура системы: монолитная, сервис-ориентированная (SOA). Непосредственный вызов (RPC), очереди, персистентные очереди, очереди фоновых задач.
День третий
  • Взаимодействие (продолжение). Шины, широковещательные каналы. Протоколы: HTTP, SSL, Websockets. Сериализация данных. Сжатие данных.
  • Разработка клиентского приложения. Синхронизация данных, работа в offline, информирование пользователя. Сетевое взаимодействие с сервером.
  • Тестирование. Нагрузочное и системное тестирование. Непрерывное тестирование, постоянное выкатывание.
  • Отказоустойчивость и эксплуатация. Резервное копирование, репликация. Master-slave. Hot-spare. Несколько DC, схемы Active-Failover, Master-Slave, Active-Active. Обеспечение консистентности. Протоколы голосования. Выбор между «облаком» и железом. Выкатывание проекта, управление конфигурацией. Мониторинг. Логирование.

Стоимость

Регистрация на очные мероприятия закрыта, но вы можете попасть на

Вебинар в семи частях