diff --git a/README.md b/README.md index 996e02f..c9752e1 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,12 @@ ----- -### [04. Лента новостей социальной сети](test/dz004/README.md) (в процессе) +### [04. Масштабируемая подсистема диалогов](test/dz004/README.md) (не начата) +### [05. Лента новостей социальной сети](test/dz005/README.md) (в процессе) ----- -### [05. Репликация из MySQL в tarantool](test/dz005/README.md) (не начата) -### [06. Масштабируемая подсистема диалогов](test/dz006/README.md) (не начата) +### [06. Репликация из MySQL в tarantool](test/dz006/README.md) (не начата) ### [07. Онлайн обновление ленты новостей](test/dz007/README.md) (не начата) ### [08. Разделение монолита на сервисы](test/dz008/README.md) (не начата) ### [09. Отказоустойчивость приложений](test/dz009/README.md) (не начата) diff --git a/test/dz001/README.md b/test/dz001/README.md index e84c0db..1706238 100644 --- a/test/dz001/README.md +++ b/test/dz001/README.md @@ -1,5 +1,7 @@ -#[ЗАЧТЕНА](https://otus.ru/learning/61597/#/homework-chat/9332/) -#[РАБОЧИЙ СЕРВИС](http://lab.tiburon.su:8080/) +#ЗАЧТЕНА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12337/) / [РАБОЧИЙ СЕРВИС](http://lab.tiburon.su:8080/) + +----- + # Заготовка для социальной сети Цель: В результате выполнения ДЗ вы создадите базовый скелет социальной сети, который будет развиваться в дальнейших ДЗ. diff --git a/test/dz002/README.md b/test/dz002/README.md index 1e3ac2f..e7cf1c4 100644 --- a/test/dz002/README.md +++ b/test/dz002/README.md @@ -1,5 +1,7 @@ -#[ЗАЧТЕНА](https://otus.ru/learning/61597/#/homework-chat/9333/) -#[ОТЧЕТ](REPORT.md) +#ЗАЧТЕНА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12338/) / [ОТЧЕТ](REPORT.md) + +----- + # Производительность индексов Цель: В результате выполнения ДЗ вы создадите набор тестовых данных для проведения нагрузочного тестирования, подберете наиболее подходящие индексы и проведете тесты производительности. diff --git a/test/dz003/README.md b/test/dz003/README.md index 8623334..68d8092 100644 --- a/test/dz003/README.md +++ b/test/dz003/README.md @@ -1,5 +1,7 @@ -#[ЗАЧТЕНА](https://otus.ru/learning/61597/#/homework-chat/9334/) -#[ОТЧЕТ](REPORT.md) +#ЗАЧТЕНА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12339/) / [ОТЧЕТ](REPORT.md) + +----- + #Полусинхронная репликация В результате выполнения ДЗ вы настроите полусинхронную репликацию, протестируете ее влияние на производительность системы и убедитесь, что теперь вы не теряете транзакции в случае аварии. diff --git a/test/dz004/README.md b/test/dz004/README.md index 8900811..923cc2d 100644 --- a/test/dz004/README.md +++ b/test/dz004/README.md @@ -1,26 +1,27 @@ -#[В ПРОЦЕССЕ](https://otus.ru/learning/61597/#/homework-chat/9336/) -#[ОТЧЕТ](REPORT.md) -#Лента новостей социальной сети -Цель: В результате выполнения ДЗ вы создадите ленту новостей социальной сети +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12342/) / [ОТЧЕТ](REPORT.md) + +----- + +# Масштабируемая подсистема диалогов + +В результате выполнения ДЗ вы создадите базовый скелет микросервиса, который будет развиваться в дальнейших ДЗ. + ### В данном задании тренируются навыки: -- работа с кешами; -- работа с очередями; -- проектирование масштабируемых архитектур. +- декомпозиции предметной области; +- построения элементарной архитектуры проекта; -# План выполнения: -1) Разработать страницу добавления поста. -2) Разработать ленту новостей, содержащую посты пользователей на которых подписан текущий пользователь. - - Создается отдельная страница, куда пишутся все обновления друзей. Для этого нужно хранить подписчиков. - - Лента формируется на уровне кешей. - - Формирование ленты производить через постановку задачи в очередь на часть подписчиков, чтобы избежать эффекта леди Гаги. - - В ленте держать последние 1000 обновлений друзей. - - Лента должна кешироваться. +### План выполнения: +1) Необходимо написать систему диалогов между пользователями. +2) Обеспечить горизонтальное масштабирование хранилищ на запись с помощью шардинга. +3) Предусмотреть: + - Возможность решардинга. + - “Эффект Леди Гаги” (один пользователь пишет сильно больше среднего). + - Наиболее эффективную схему. + +ДЗ принимается в виде исходного кода на github и отчета по выполненной работе. -ДЗ сдается в виде ссылки на гитлаб и демонстрации работающего проекта, развернутого в интернете. -Критерии оценки: Оценка происходит по принципу зачет/незачет. +Требования: +- Верно выбран ключ шардирования с учетом "эффекта Леди Гаги" +- В отчете описан процесс решардинга без даунтайма -### Требования: -Верно работает инвалидация кеша. -Обновление лент работает через очередь. -Есть возможность перестройки кешей из СУБД. -Рекомендуем сдать до: 17.02.2021 \ No newline at end of file +###Рекомендуем сдать до: 17.11.2021 \ No newline at end of file diff --git a/test/dz005/README.md b/test/dz005/README.md new file mode 100644 index 0000000..16dfa34 --- /dev/null +++ b/test/dz005/README.md @@ -0,0 +1,29 @@ +#В ПРОЦЕССЕ: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12340/) / [ОТЧЕТ](REPORT.md) + +----- + +#Лента новостей социальной сети +Цель: В результате выполнения ДЗ вы создадите ленту новостей социальной сети +### В данном задании тренируются навыки: +- работа с кешами; +- работа с очередями; +- проектирование масштабируемых архитектур. + +### План выполнения: +1) Разработать страницу добавления поста. +2) Разработать ленту новостей, содержащую посты пользователей на которых подписан текущий пользователь. + - Создается отдельная страница, куда пишутся все обновления друзей. Для этого нужно хранить подписчиков. + - Лента формируется на уровне кешей. + - Формирование ленты производить через постановку задачи в очередь на часть подписчиков, чтобы избежать эффекта леди Гаги. + - В ленте держать последние 1000 обновлений друзей. + - Лента должна кешироваться. + +ДЗ сдается в виде ссылки на github и демонстрации работающего проекта, развернутого в интернете. +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- Верно работает инвалидация кеша. +- Обновление лент работает через очередь. +- Есть возможность перестройки кешей из СУБД. + +### Рекомендуем сдать до: 17.02.2021 \ No newline at end of file diff --git a/test/dz006/README.md b/test/dz006/README.md new file mode 100644 index 0000000..856c063 --- /dev/null +++ b/test/dz006/README.md @@ -0,0 +1,27 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12341/) / [ОТЧЕТ](REPORT.md) + +----- + +#Репликация из MySQL в tarantool +Цель: В результате выполнения ДЗ вы настроите репликацию из MySQL в tarantool, а также напишите запрос на lua. +### В данном задании тренируются навыки: +- администрирование MySQL; +- администрирование tarantool; +- разработка хранимых процедур для tarantool; + +# План выполнения: +1) Выбрать любую таблицу, которую мы читаем с реплик MySQL. +2) С помощью программы https://github.com/tarantool/mysql-tarantool-replication настроить реплицирование в tarantool (лучше всего версии 1.10). +3) Выбрать любой запрос и переписать его на lua-процедуру на tarantool. +4) Провести нагрузочное тестирование, сравнить tarantool и MySQL по производительности. + +ДЗ сдается в виде ссылки на гитлаб и отчета о выполнении ДЗ. +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- Репликация из MySQL в tarantool работает. +- Хранимые процедуры в tarantool написаны корректно. +- Хранимые процедуры выполнены по code style на примере репозитория Mail.Ru. +- Нагрузочное тестирование проведено. + +### Рекомендуем сдать до: 22.12.2021 \ No newline at end of file diff --git a/test/dz007/README.md b/test/dz007/README.md new file mode 100644 index 0000000..51afb47 --- /dev/null +++ b/test/dz007/README.md @@ -0,0 +1,26 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12343/) / [ОТЧЕТ](REPORT.md) + +----- + +# Онлайн обновление ленты новостей + +Цель: В результате выполнения ДЗ вы научитесь обновлять ленту новостей без перезагрузки страницы. + +### В данном задании тренируются навыки: +- работа с WebSocket; + +### План выполнения: +1) Разработать компонент, куда будет подключаться клиент при открытии страницы ленты. Сервис должен слушать очередь обновлений ленты. При получении подписанным клиентом сообщения, отправлять его в браузер по WebSocket. +2) Учесть возможность масштабирования сервиса. То есть сообщение должно доставляться только на тот экземпляр компонента, куда соединен клиент. Для этого можно использовать, например Routing Key из Rabbitmq. + +ДЗ принимается в виде исходного кода на github, документации по архитектуре и демонстрации работоспособности развернутого в интернете приложения. + +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- При добавлении поста у друга, лента должна обновляться автоматически (с небольшой задержкой). +- Корректная работа сервиса вебсокетов. +- Линейная масштабируемость сервиса вебсокетов. +- Описан процесс масштабирования RabbitMQ. + +### Рекомендуем сдать до: 27.12.2021 \ No newline at end of file diff --git a/test/dz008/README.md b/test/dz008/README.md new file mode 100644 index 0000000..a3d4538 --- /dev/null +++ b/test/dz008/README.md @@ -0,0 +1,28 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12344/) / [ОТЧЕТ](REPORT.md) + +----- + +# Разделение монолита на сервисы + +Цель: В результате выполнения ДЗ вы перенесете бизнес-домен монолитного приложения в отдельный сервис. +###В данном задании тренируются навыки: +- декомпозиции предметной области; +- разделение монолитного приложения; +- работа с HTTP; +- работа с REST API и gRPC; + +### План выполнения: +1) Вынести систему диалогов в отдельный сервис. +2) Взаимодействия монолитного сервиса и сервиса чатов реализовать на Rest API или gRPC. +3) Организовать сквозное логирование запросов. +4) Предусмотреть то, что не все клиенты обновляют приложение быстро и кто-то может ходить через старое API. + +ДЗ сдается в виде исходного кода на github и отчета по устройству системы. +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- Описан протокол взаимодействия. +- Поддержаны старые клиенты. +- Новые клиенты верно ходят через новый API. + +### Рекомендуем сдать до: 10.01.2022 \ No newline at end of file diff --git a/test/dz009/README.md b/test/dz009/README.md new file mode 100644 index 0000000..5ae1802 --- /dev/null +++ b/test/dz009/README.md @@ -0,0 +1,29 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12345/) / [ОТЧЕТ](REPORT.md) + +----- + +# Отказоустойчивость приложений +Цель: В результате выполнения ДЗ вы уменьшите число точек отказа в вашем приложении. +###В данном задании тренируются навыки: +- проектирование отказоустойчивых архитектур; +- настройка nginx; +- настройка HAProxy; +- Поднять несколько слейвов MySQL; + +### План выполнения: +1) Реализовать соединение со слейвами mysql через haproxy. +2) Поднять несколько приложений и обеспечить их балансировку через nginx. +3) Воспроизвести нагрузку. +4) Под нагрузкой с помощью "kill -9" отключить один из слейвов MySQL. Убедится, что система осталась работоспособной. +5) Под нагрузкой с помощью "kill -9" отключить один из инстансов бэкенда. Убедится, что система осталась работоспособной. + +ДЗ принимается в виде отчета по выполненным пунктам. +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- В отчете верно описана конфигурация haproxy. +- В отчете верно описана конфигурация nginx. +- В отчете верно описаны условия эксперимента. +- В отчете должны быть логи работы системы. + +### Рекомендуем сдать до: 17.01.2022 \ No newline at end of file diff --git a/test/dz010/README.md b/test/dz010/README.md new file mode 100644 index 0000000..836f6d9 --- /dev/null +++ b/test/dz010/README.md @@ -0,0 +1,26 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12346/) / [ОТЧЕТ](REPORT.md) + +----- + +# Сервис счетчиков + +Цель: В результате выполнения ДЗ вы создадите сервис счетчиков. Сервис будет хранить такие счетчики, как число непрочитанных сообщений. +### В данном задании тренируются навыки: +- разработка отказоустойчивых сервисов; +- использование кешей; + +### План выполнения: +1) Разработайте сервис счетчиков. +2) Учтите то, что на этот сервис будет большая нагрузка, особенно на чтение. +3) Продумайте, как обеспечить консистентность между счетчиком и реальным числом непрочитанных сообщений. Например, используйте паттерн SAGA. +4) Внедрите сервис для отображения счетчиков. + +ДЗ сдается в виде демонстрации работоспособности сервиса, ссылки на репозиторий github, отчета по архитектуре. + +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- Верно описан выбранный паттерн обеспечения консистентности. +- Выбранная архитектура сервиса подходит для решения задачи. + +### Рекомендуем сдать до: 24.01.2022 \ No newline at end of file diff --git a/test/dz011/README.md b/test/dz011/README.md new file mode 100644 index 0000000..45c1d84 --- /dev/null +++ b/test/dz011/README.md @@ -0,0 +1,29 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12347/) / [ОТЧЕТ](REPORT.md) + +----- + +# Внедрение docker и consul + +Цель: В результате выполнения ДЗ вы интегрируете в ваш проект социальной сети docker и auto discovery сервисов с помощью consul +### В данном задании тренируются навыки: +- использование docker; +- использование consul; +- построение auto discovery; + +### План выполнения: +1) Обернуть сервис диалогов в docker +2) Развернуть consul в вашей системе +3) Интегрировать auto discovery в систему диалогов +4) Научить монолитное приложение находить и равномерно нагружать все поднятые узлы сервиса диалогов +5) Опционально можно использовать nomad + +6) ДЗ сдается в виде репозитория с исходными кодами на github и отчетом о выполненных шагах. + +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- Верно настроен docker. +- Обеспечено распределение нагрузки по экземплярам сервиса. +- Описан процесс развертки новых экземпляров. + +### Рекомендуем сдать до: 31.01.2022 \ No newline at end of file diff --git a/test/dz012/README.md b/test/dz012/README.md new file mode 100644 index 0000000..d5f8728 --- /dev/null +++ b/test/dz012/README.md @@ -0,0 +1,30 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12348/) / [ОТЧЕТ](REPORT.md) + +----- + +# Мониторинг + +Цель: В результате выполнения ДЗ вы организуете мониторинг своего сервиса чатов. +### В данном задании тренируются навыки: +- эксплутация prometheus; +- эксплутация grafana; +- эксплутация zabbix; +- +### План выполнения: +1) развернуть zabbix; +2) развернуть prometheus; +3) развернуть grafana; +4) начать писать в prometheus бизнес-метрики сервиса чатов по принципу RED; +5) начать писать в zabbix технические метрики сервера с сервисом чатов; +6) организовать дашборд в grafana. + +ДЗ сдается в виде отчета со скриншотами. + +Критерии оценки: Оценка происходит по принципу зачет/незачет. + +### Требования: +- Сбор технических метрик осуществляется верно. +- Сбор бизнес метрик осуществляется верно по принципу RED. +- В grafana организован дашборд. + +### Рекомендуем сдать до: 16.02.2022 \ No newline at end of file diff --git a/test/dz013/README.md b/test/dz013/README.md new file mode 100644 index 0000000..88c9291 --- /dev/null +++ b/test/dz013/README.md @@ -0,0 +1,21 @@ +#НЕ НАЧАТА: [ЧАТ](https://otus.ru/learning/61597/#/homework-chat/12349/) / [ОТЧЕТ](REPORT.md) + +----- + +# Разработать MVP по данной архитектуре + +### Варианты проектов: +- Новостной ресурс +- Сайт знакомств +- Ресурс для персональных блогов +- Интернет-магазин +- Или любой другое проект, кроме социальной сети + +Необходимо выбрать тему проекта и отправить её в чат с преподавателем. + +### План выполнения: +1) В начале проекта необходимо с наставником согласовать требования. +2) Разработать MVP по данной архитектуре. +3) Итогом будет защита архитектуры и MVP + +Критерии оценки: Готовый проект + защита проекта \ No newline at end of file