Открытый вебинар «Тестирование отказоустойчивости» 16.03.2020 в 20:00 | OTUS >
🔥 Учись выгодно в мае!
Скидка на курсы 15% только до 11.05 →
Выбрать курс
Проходил 16 марта 2020 года в 20:00

Открытый вебинар
Тестирование отказоустойчивости

Открытый вебинар онлайн

Высоконагруженные проекты требуют высокой доступности. Минуты простоя стоят миллионы рублей. Команда разработки постоянно вносит улучшения для обеспечения доступности сервиса. Финальным этапом является проведение "учений" в продакшене. Давайте обсудим, как эффективно планировать учения, на что обращать внимание, какие инструменты помогут и как избегать типовые ошибки.
Преподаватель
Иван Ремень

Запись

О курсе

Highload Architect
138 000 ₽
5 месяцев
Начало 26 июня

Сегодня немногие веб-разработчики обладают достаточным опытом для создания отказоустойчивых и масштабируемых архитектур. И именно такие специалисты являются самыми высокооплачиваемыми и востребованными в крупных компаниях: Google, Mail.Ru Group, Yandex, Netflix и др.

Для кого этот курс

Программа создана специально для веб-разработчиков, тимлидов команд веб-разработки, архитекторов, технических руководителей и специалистов, которые интересуются SRE или работают в этой области.

За 5 месяцев студенты …

Программа курса
Модуль 1
Введение в высокие нагрузки
Модуль 2
СУБД в высоконагруженных проектах
Модуль 3
Разработка бэкенда высоконагруженных сервисов
Модуль 4
Типовые проблемы Highload на примере разных архитектур
Модуль 5
System Design на практике
Модуль 6
Проектная работа
Введение в высокие нагрузки
В этом модуле будут рассмотрены высокие нагрузки. Большая часть модуля будет посвящена особенностям архитектуры компьютеров и операционных систем. Студенты получат представление о главных проблемах, с которыми сталкивается архитектор систем
Проблемы высоких нагрузок // ДЗ
повторить основы работы операционных систем, существенные для высоких нагрузок;
рассмотреть принципы работы, преимущества и недостатки различных моделей веб-серверов;
проанализировать причину возникновения и принципы работы концепций fibers/green threads/goroutines;
проанализировать возможности языковых платформ с точки зрения поддержки асинхронного программирования.
26 июня, 20:00 — 21:30
Лектор: Виталий Юшкевич
Домашние задания: 1
ДЗ
Заготовка для социальной сети. Требуется разработать создание и просмотр анкет в социальной сети.

**
Функциональные требования:**
- Простейшая авторизация пользователя.
- Возможность создания пользователя, где указывается следующая информация:
1) Имя
2) Фамилия
3) Дата рождения
4) Пол
5) Интересы
6) Город
- Страницы с анкетой.

**
Нефункциональные требования:**
- Любой язык программирования
- В качестве базы данных использовать PostgreSQL (при желании и необходимости любую другую SQL БД)
- Не использовать ORM
- Программа должна представлять из себя монолитное приложение.
- Не рекомендуется использовать следующие технологии:
1) Репликация
2) Шардирование
3) Индексы
4) Кэширование


Для удобства разработки и проверки задания можно воспользоваться [этой спецификацией](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json) и реализовать в ней методы:
- `/login`
- `/user/register`
- `/user/get/{id}`


*Фронт опционален.*


Сделать инструкцию по локальному запуску приложения, приложить Postman-коллекцию.


ДЗ принимается в виде исходного кода на github и Postman-коллекции.
Введение в docker. Обзор docker-compose
обертывать сервисы в docker;
разворачивать consul.
3 июля, 20:00 — 21:30
Введение в высокие нагрузки
проанализировать в каких единицах можно измерять нагрузку;
рассмотреть преимущества и недостатки различных подходов к масштабированию;
рассмотреть проблемы высоконагруженных проектов.
8 июля, 20:00 — 21:30
Нагрузочное тестирование
рассмотреть основы нагрузочного тестирования;
определить цели и критерии успешности нагрузочного тестирования;
разработать и использовать скрипты для проведения нагрузочного тестирования.
10 июля, 20:00 — 21:30
СУБД в высоконагруженных проектах
В данном модуле изучим особенности проектирования хранилищ для работы в условиях высоких нагрузок, методы их резервирования и масштабирования
Индексы: структуры данных
проанализировать потребность в индексах;
рассмотреть особенности структур данных, на которых основаны индексы;
научиться пользоваться командой explain в PostgreSQL.
15 июля, 20:00 — 21:30
Индексы: оптимизация запросов // ДЗ
рассмотреть устройство Btree-индекса в PostgreSQL;
проанализировать предназначение и механизмы работы покрывающих индексов;
рассмотреть принципы построения планов запросов в PostgreSQL;
научиться строить индексы, позволяющие оптимизировать запросы;
научиться составлять запросы, позволяющие переиспользовать существующие индексы;
научиться пользоваться командой explain в PostgreSQL.
17 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Производительность индексов. 1) Сгенерировать любым способ 1,000,000 анкет. Имена и Фамилии должны быть реальными, чтобы учитывать селективность индекса. Так же можно воспользовать [уже готовым списком](https://raw.githubusercontent.com/OtusTeam/highload/master/homework/people.v2.csv) как основой.
2) Реализовать функционал поиска анкет по префиксу имени и фамилии (одновременно) в вашей социальной сети (реализовать метод [/user/search из спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json#L165)) (запрос в форме firstName LIKE ? and secondName LIKE ?). Сортировать вывод по id анкеты.
3) Провести нагрузочные тесты этого метода. Поиграть с количеством одновременных запросов. 1/10/100/1000.
4) Построить графики и сохранить их в отчет
5) Сделать подходящий индекс.
6) Повторить пункт 3 и 4.
7) В качестве результата предоставить отчет в котором должны быть:
- графики latency до индекса;
- графики throughput до индекса;
- графики latency после индекса;
- графики throughput после индекса;
- запрос добавления индекса;
- explain запросов после индекса;
- объяснение почему индекс именно такой;


ДЗ принимается в виде отчета по выполненной работе.
Репликация: основы и алгоритмы
обсудить смысл и назначение репликации;
рассмотреть преимущества и недостатки различных видов репликации;
сравнить особенности репликации в MySQL и PostgreSQL;
познакомиться с групповой репликацией в MySQL.
22 июля, 20:00 — 21:30
Репликация: виды репликации
рассмотреть принцип работы механизмов репликации с точки зрения синхронизации данных;
проанализировать проблемы асинхронной репликации и варианты их решения;
обсудить предназначение и потенциальные проблемы репликации вида master-master;
рассмотреть преимущества и недостатки безмастерной репликации.
24 июля, 20:00 — 21:30
Репликация: практическое применение // ДЗ
проанализировать отличия high availability и disaster recovery;
настроить потоковую и логическую репликацию в Postgres.
29 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Репликация. Инструкция к ДЗ доступна также по [ссылке](https://otusmetodist.yonote.ru/share/269b787b-4c2a-461c-8049-e4b693b841cd/doc/homework-3-replikaciya-JnhvFGijD6)

-----

1) Выбираем 2 запроса на чтение ([/user/get/{id}](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json#L127) и [/user/search](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json#L167) из [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json)).
Составить план нагрузочного тестирования, который шлет запросы на эти api.

2) Создаем нагрузку на чтение с помощью составленного на предыдущем шаге плана, делаем замеры.

3) Настроить 2 слейва и 1 мастер. Включить потоковую репликацию.

4) Добавить в проект replicated datasource:
Можно рассмотреть несколько несколько вариантов:
- Использование [MaxScale](https://github.com/mariadb-corporation/MaxScale) и [MySql Replication JDBC Driver](http://dev.mysql.com/doc/connector-j/en/connector-j-master-slave-replication-connection.html)
- Использование Database Proxy server like [MySQL Proxy](http://dev.mysql.com/doc/mysql-proxy/en/)
- Использование Replication DataSource: [kwon37xi/replication-datasource-boot](https://github.com/kwon37xi/replication-datasource-boot).

Рекомендуется последний вариант: написать `ReplicationRoutingDataSource`, который выбирает использовать master или slave в зависимости от типа транзакции.

Данное решение работает с [TransactionSynchronizationManager](http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html).

При использовании [Spring framework](http://spring.io/) достаточно установить `@Transactional(readOnly = true|false)`

Переносим запросы на чтение (transaction == read only) на чтение со слейва.

5) Создаем нагрузку на чтение с помощью составленного на предыдущем шаге плана, делаем замеры. Добавить сравнение результатов в отчет.

8) Настроить кворумную синхронную репликацию.
(Опционально) воспользоваться одним из кластерных расширения Postgres (например patroni).
9) Создать нагрузку на запись в любую тестовую таблицу. На стороне, которой нагружаем считать, сколько строк мы успешно записали.
Например, API.
Пример: [Дашборды для Grafana](https://grafana.com/grafana/dashboards/893)

10) Убиваем одну из реплик (`kill -9`, `docker stop`)

11) Заканчиваем нагрузку на запись.

12) Выбираем самый свежий слейв. Промоутим его до мастера. Переключаем на него второй слейв.
13) Проверяем, есть ли потери транзакций.


**Форма сдачи ДЗ**
- Предоставить ссылку на исходный код (github, gitlab, etc)
- Предоставить докеризированное приложение, которое можно запустить при помощи docker-compose (может лежать рядом с исходным кодом) ИЛИ развернутое приложение, доступное извне ИЛИ инструкция по запуску
- Предоставить отчет в свободной форме о проделанное работе
Кеширование // ДЗ
обсудить назначение кеширования;
познакомиться с различными подходами к организации кеширования;
осознать проблемы, связанные с применением кеширования;
познакомиться с различными подходами к инвалидации кеша.
31 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Лента постов от друзей. **1) Реализовать API (синхронный rest)**
- (опционально) Добавление/удаление друга (методы */friend/add*, */friend/delete* из [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json))
- (опционально) CRUD для постов пользователей (методы */post/create*, */post/update*, */post/delete*, */post/get* из [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json))
- Лента постов друзей (метод */post/feed* из [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json))

----------
**2) Разработать структуру БД для хранения постов пользователей.**

Наполнить БД тестовыми данными.

ссылка на сгенерированные тексты постов: https://github.com/OtusTeam/highload/blob/master/homework/posts.txt
(опционально, можно сгенерировать самостоятельно)

----------
**3) Реализовать кэширование ленты.**

Требования:
- Лента постов друзей формируется на уровне кешей
- В ленте держать последние 1000 обновлений друзей
- Лента должна кешироваться

----------

**
Дополнительные материалы**

Инструкция к ДЗ также доступна по [ссылке](https://otusmetodist.yonote.ru/share/94ee610e-2e76-4e80-93fc-ad74fe04e8d4/doc/homework-4-lenta-postov-ot-druzej-taoWO1XJvF).

----------
**
Форма сдачи ДЗ**
1. Предоставить ссылку на исходный код (github, gitlab, etc)
2. Предоставить докеризированное приложение, которое можно запустить при помощи docker-compose (может лежать рядом с исходным кодом) ИЛИ развернутое приложение, доступное извне
Транзакции в реляционных СУБД
объяснить, когда нужны транзакции, а когда нет;
познакомиться с понятием ACID и механизмами обеспечения этих свойств;
обсудить степень влияния транзакций на производительность системы.
5 августа, 20:00 — 21:30
Шардирование: основы и алгоритмы
обсудить смысл и назначение шардирования;
рассмотреть преимущества и недостатки различных стратегий шардирования;
рассмотреть механизмы осуществления перешардирования;
рассмотреть механизм консистентного хеширования.
7 августа, 20:00 — 21:30
Шардирование: практическое применение // ДЗ
выбрать правильный вариант решения задачи с использованием шардинга;
обосновать выбранное решение, применить его при разработке проекта и подготовке ДЗ.
12 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Масштабируемая подсистема диалогов. **Реализовать функционал:**
- Отправка сообщения пользователю (метод ```/dialog/{user_id}/send``` из [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json))
- Получение диалога между двумя пользователями (метод ```/dialog/{user_id}/list``` из [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json))
----------
**
Требования**
- Обеспечить горизонтальное масштабирование хранилищ на запись с помощью шардинга.
- Предусмотреть:
- Возможность решардинга
- (опционально) “Эффект Леди Гаги” (один пользователь пишет сильно больше среднего)
- Наиболее эффективную схему.
----------

**Форма сдачи ДЗ**
- Предоставить ссылку на исходный код (github, gitlab, etc)
- Предоставить докеризированное приложение, которое можно запустить при помощи docker-compose (может лежать рядом с исходным кодом) ИЛИ развернутое приложение, доступное извне ИЛИ инструкция по запуску
Очереди и отложенное выполнение #1
объяснить, в каких случаях имеет смысл применять асинхронную обработку;
познакомиться с возможностями и устройством таких инструментов как RabbitMQ и Kafka.
14 августа, 20:00 — 21:30
Очереди и отложенное выполнение #2 // ДЗ
на живых примерах разобрать, как происходит процесс работы с rabbitmq и kafka.
19 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Онлайн обновление ленты новостей. Инструкция к ДЗ доступна также по [ссылке](https://otusmetodist.yonote.ru/share/c459499e-8afb-430f-b86b-d3b08f3d2f2b/doc/homework-6-onlajn-obnovlenie-lenty-novostej-LmD0upnUDk)

---------

**1) Реализовать REST API:**
- Создание поста (метод ```/post/create``` из [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/openapi.json))

**2) Реализовать асинхронное API с websocket:**
- https://github.com/OtusTeam/highload/blob/master/homework/asyncapi.json (example.zip в материалах занятия)
- Реализовать отправку сообщений в канал ```/post/feed/posted``` через websocket согласно [спецификации](https://github.com/OtusTeam/highload/blob/master/homework/asyncapi.json)
- **Требования**: при добавлении нового поста друга подписчику websocket'а должно приходить событие о новом посте, тем самым обеспечивая обновление ленты в реальном времени

**4) Реализовать отложенную материализацию ленты:**
Требования
- Формирование лент работает через очередь (отложено)
- при реализации обязательно обеспечить отправку только целевым пользователям это событие (можно применить Routing Key из RabbitMQ)

**5) (Опционально) Формирование ленты производить через постановку задачи в очередь на часть друзей, чтобы избежать "эффекта Леди Гаги"/celebrity** (один пользователь пишет сильно больше среднего)

----------
**Что такое "эффект Леди Гаги"?**
Когда один пользователь пишет сильно больше среднего (поэтому такое название). На примере twitter, есть селебрити, посты которых читает огромное кол-во человек. можно взять подход twitter - пользователи делятся на селебрити и обычных. Для селебрити они просто добавляют посты, для обычных - добавляют посты и обновляют ленту

----------

**Форма сдачи ДЗ**
- Предоставить ссылку на исходный код (github, gitlab, etc)
- Предоставить докеризированное приложение, которое можно запустить при помощи docker-compose (может лежать рядом с исходным кодом) ИЛИ развернутое приложение, доступное извне ИЛИ инструкция по запуску
In-Memory СУБД // ДЗ
обсудить предназначение in-memory СУБД, их классификацию;
научиться применять memcached, рассмотреть способы масштабирования memcached;
научиться применять redis как кэш и in-memory СУБД;
рассмотреть способы масштабирования кластера redis, соответствие CAP теореме разных конфигураций кластера redis;
рассмотреть базовую терминологию Tarantool;
рассмотреть особенности работы Tarantool в “боевом” окружении.
21 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Применение In-Memory СУБД. **Инструкция:**

Для выполнения ДЗ понадобится In-Memory СУБД с поддержкой функциональности application server (возможность выполнять UDF над данными) - Tarantool. Redis, Apache Ignite, Hazelcast, …

1) Выбрать один из модулей приложения: например диалоги

2) Провести нагрузочное тестирование этого модуля для дальнейшего сравнения

3) Вынести хранение данных из SQL БД в In-Memory СУБД. Перенести логику из модуля в UDF в In-Memory СУБД.
Например: для общения с tarantool'ом использовать процедуры (функции lua), не использовать прямые запросы в space'ы при помощи драйвера.

4) Провести нагрузочное тестирование снова

5) Сравнить результаты нагрузочного тестирования

----------

**Форма сдачи ДЗ**
- Предоставить ссылку на исходный код (github, gitlab, etc)
- Предоставить докеризированное приложение, которое можно запустить при помощи docker-compose (может лежать рядом с исходным кодом) ИЛИ развернутое приложение, доступное извне ИЛИ инструкция по запуску
OLAP и OLTP
проанализировать различия между OLTP- и OLAP-системами;
познакомиться с принципами построения архитектур OLTP- и OLAP-систем.
26 августа, 20:00 — 21:30
Обзор ClickHouse
объяснить, что такое ClickHouse;
объяснить в каких случаях и каким образом используется ClickHouse;
рассмотреть архитектуру ClickHouse и особенности работы с ним.
28 августа, 20:00 — 21:30
Leaderless базы данных. Casandra
обсудить, зачем нужны Leaderless NoSQL СУБД, и какова область их применения;
рассмотреть организацию хранилища данных на примере Cassandra;
потренироваться в начальной установке, настройке и использовании Cassandra.
2 сентября, 20:00 — 21:30
Разработка бэкенда высоконагруженных сервисов
В данном модуле будут рассмотрены основные способы проектирования приложений, способных выдерживать высокие нагрузки.
Рассмотрим инфраструктуру таких приложений, средства мониторинга и отладки.
Поговорим о том, как не создавать точки отказа и обеспечить масштабируемость
Когда нужны микросервисы, а когда монолиты
объяснить, зачем нужны микросервисы;
проанализировать подходы к проектированию микросервисов;
проанализировать бессерверный подход.
11 сентября, 20:00 — 21:30
Паттерны декомпозиции системы на микросервисы
познакомиться с паттернами декомпозиции системы на микросервисы.
16 сентября, 20:00 — 21:30
Domain Driven Design
знать и понимать основные принципы DDD (Ubiquitous language, boundary context).
18 сентября, 20:00 — 21:30
Принципы организации микросервисов. Типы взаимодействий // ДЗ
проанализировать плюсы и минусы микросервисов;
объяснить какие инструменты используются для построения микросервисов.
23 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Разделение монолита на сервисы. **Реализовать функционал:**
- Вынести систему диалогов в отдельный сервис.
----------

**Требования**
- Взаимодействия монолитного сервиса и сервиса чатов реализовать на REST API или gRPC.
- Организовать сквозное логирование запросов (x-request-id).
- Предусмотреть то, что не все клиенты обновляют приложение быстро и кто-то может ходить через старое API (сохранение обратной совместимости).
----------

**Форма сдачи ДЗ**
- Предоставить ссылку на исходный код (github, gitlab, etc)
- Предоставить докеризированное приложение, которое можно запустить при помощи docker-compose (может лежать рядом с исходным кодом) ИЛИ развернутое приложение, доступное извне ИЛИ инструкция по запуску
Протокол HTTP #1
проанализировать основные принципы работы протоколов http и https;
поработать с основными требованиями архитектурного стиля REST;
поработать с web-серверами Apache и Nginx;
ускорить работу HTTPS в nginx и apache, а также вспомним их отличия.
25 сентября, 20:00 — 21:30
Протокол HTTP #2
проанализировать влияние TCP на HTTP;
поработать с HTTP 2.0 и узнать его отличия от HTTP 1.1.
30 сентября, 20:00 — 21:30
Балансировка и отказоустойчивость #1
пользоваться утилитой dig;
объяснить, как устроен DNS;
объяснить, как работает балансировка нагрузки.
2 октября, 20:00 — 21:30
Балансировка и отказоустойчивость #2 // ДЗ
конфигурировать UCARP;
конфигурировать HAProxy.
7 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Отказоустойчивость приложений. - Поднять несколько слейвов PostgreSQL.
- Реализовать соединение со слейвами PostgreSQL через haproxy.
- Поднять несколько приложений и обеспечить их балансировку через nginx.
- Воспроизвести нагрузку.
- Под нагрузкой с помощью "kill -9" отключить один из слейвов PostgreSQL. Убедится, что система осталась работоспособной.
- Под нагрузкой с помощью "kill -9" отключить один из инстансов бэкенда. Убедится, что система осталась работоспособной.
----------
**
Форма сдачи ДЗ**

ДЗ принимается в виде отчета по выполненным пунктам.
Использование асинхронности обработки
спроектировать архитектуру twitter приложения;
применять асинхронную обработку.
9 октября, 20:00 — 21:30
Распределенные транзакции // ДЗ
обеспечивать консистентность хранилищ разных БД;
объяснить различия гетерогенные и гомогенные транзакции.
14 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Сервис счетчиков. **Реализовать функционал:**

**Вариант 1**
1. Разработайте сервис счетчиков.
2. Учтите то, что на этот сервис будет большая нагрузка, особенно на чтение.
3. Продумайте, как обеспечить консистентность между счетчиком и реальным числом непрочитанных сообщений. Например, используйте паттерн SAGA.
4. Внедрите сервис для отображения счетчиков.

**Вариант 2**
Разработайте и внедрите функционал, в котором будет необходимость применения паттерна SAGA, этот функционал должны быть потенциально нагруженным.

---------
**Требования**
- обеспечение консистентности (SAGA в приоритете)
----------

**Форма сдачи ДЗ**
- Предоставить ссылку на исходный код (github, gitlab, etc)
- Предоставить докеризированное приложение, которое можно запустить при помощи docker-compose (может лежать рядом с исходным кодом) ИЛИ развернутое приложение, доступное извне ИЛИ инструкция по запуску
- Предоставить отчет об архитектуре (схема, словесное описание)
Инфраструктура микросервисов
проанализировать проблемы, возникающие в микросервисной архитектуре;
проанализировать инфраструктурные утилиты для микросервисной архитектуры.
16 октября, 20:00 — 21:30
Системы конфигурации
проанализировать средства конфигурирования сервисов;
проанализировать алгоритмы консенсуса.
21 октября, 20:00 — 21:30
Распределенное файловое хранилище
обсудить средства для обеспечения надежности;
научиться применять современные инструменты на практике.
23 октября, 20:00 — 21:30
Мониторинг и алертинг // ДЗ
объяснить для чего нужен мониторинг;
проводить постмортем;
проанализировать средства мониторинга.
28 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Мониторинг. **Необходимо:**
- развернуть [zabbix](https://www.zabbix.com/);
- развернуть [prometheus](https://prometheus.io/);
- развернуть [grafana](https://grafana.com/);
- начать писать в [prometheus](https://prometheus.io/) бизнес-метрики сервиса чатов по принципу RED;
- начать писать в [zabbix](https://www.zabbix.com/) технические метрики сервера с сервисом чатов;
- организовать дашборд в [grafana](https://grafana.com/);

**
Форма сдачи ДЗ**

Отчет со скриншотами
Средства описания архитектуры
познакомиться с ArchiMate, Arc42, C4.
научиться применять средства описания архитектуры.
30 октября, 20:00 — 21:30
Типовые проблемы Highload на примере разных архитектур
В этом модуле рассмотрим проблемы ХЛ архитектуры типовых веб-проектов: новостного портала, рекламной системы, облачного хранилища и сайта знакомств
Новостной портал, Сайт знакомств
разобрать типовые проблемы Highload на примере Новостного портала, Сайта знакомств;
обсудить способы их решения.
11 ноября, 20:00 — 21:30
Рекламная система, Видеостриминг, Облачное хранилище
разобрать типовые проблемы Highload на примере Рекламной системы, Видеостриминга, Облачного хранилища;
обсудить способы их решения.
13 ноября, 20:00 — 21:30
System Design на практике
Научимся находить единые точки отказа и узкие места в сервисах
System Design
разобрать и пройти на примере все основные этапы system design интервью.
18 ноября, 20:00 — 21:30
System Design: Сервис продажи билетов
разобраться в дизайне системы;
разобраться в фреймворке проектирования системы;
спроектировать самостоятельно систему.
20 ноября, 20:00 — 21:30
System Design: Сервис такси
разобраться в дизайне системы;
разобраться в фреймворке проектирования системы;
самостоятельно спроектировать систему.
25 ноября, 20:00 — 21:30
Проектная работа
Заключительный месяц курса посвящен проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей. Необходимо разработать отказоустойчивую и масштабирую архитектуру веб-проекта. Далее разработать MVP по данной архитектуре
Выбор темы и организация проектной работы // Проект
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
27 ноября, 20:00 — 21:30
Лектор: Виталий Юшкевич
Домашние задания: 1
ДЗ
Построение архитектуры системы. Создать документ описывающий архитектуру выбранной системы (в свободной форме, draw.io, arc42, c4).
- В начале проекта необходимо с наставником согласовать требования.
- Итогом будет защита архитектуры в очном или заочном формате.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
11 декабря, 20:00 — 21:30
Лектор: Виталий Юшкевич
Защита проектных работ
защитить проект по архитектуре и MVPи получить рекомендации экспертов.
25 декабря, 20:00 — 21:30
Лектор: Виталий Юшкевич

Преподаватель

Иван Ремень
Автор курса "Архитектор высоких нагрузок".

Учился в технопарке Mail.Ru. В 2013 году начал работать стажером в проекте "Почта" компании Mail.Ru. С 2015 года преподавал различные (в том числе и авторские) курсы в образовательных проектах Mail.Ru. С 2016 года занимал должность руководителя группы в Почте. В том же году получил диплом магистра по специальности "Программная инженерия" в МГТУ им. Н.Э. Баумана.

С 2018 года начал работать в Ситимобил на должности руководителя группы. С апреля 2019 года был назначен руководителем направления серверной разработки. Занимается развитием технических навыков людей, поддержкой их мотивации, развитием отказоустойчивых архитектур, внедрением новых технологий в процесс разработки (golang, tarantool).

Основные технические навыки:
Golang
C
MySQL
Tarantool
Highload architecture
Linux API
Мир, Труд, Май, Скидки!
-15% на курсы мая! Забрать скидку →