diff --git a/docs/task/task/1.md b/docs/task/task/1.md index da03752..abe6bd4 100644 --- a/docs/task/task/1.md +++ b/docs/task/task/1.md @@ -4,7 +4,7 @@ ## Задание -Основной задачей первой лабораторной работы является создание проекта (`Baseline`), адаптируемого для работы в условиях высоких нагрузок в последующих лабораторных работах. +Основной задачей первой лабораторной работы является описание проекта приложения, которое будет работать в условиях высоких нагрузок. ### Выбор темы проекта @@ -12,18 +12,19 @@ #### Примеры тем: -- **Онлайн-магазин** (например, платформа для продажи книг, одежды или электроники). -- **Социальная сеть** (например, для обмена фотографиями, публикациями или контентом). -- **Сервис для обмена сообщениями** (например, мессенджер или платформа для командного общения). +- **Онлайн-магазин** (например, платформа для продажи книг, одежды или электроники); +- **Социальная сеть** (например, для обмена фотографиями, публикациями или контентом); +- **Сервис для обмена сообщениями** (например, мессенджер или платформа для командного общения). ::: important Важно -Заранее продумайте функциональность проекта, так как к концу курса он должен включать следующие элементы: -- **API** - реализованный в микросервисной архитектуре. -- **База данных** - на выбор студентов. -- **Балансировщик нагрузки** - Nginx. -- **Брокер сообщений** - на выбор студентов. -- **Кэш** - на выбор студентов. -- **ELK-стек** Elasticsearch, Logstash и Kibana, для сбора и анализа логов. +Заранее продумайте функциональность проекта, так как к концу курса она должна включать следующие элементы: + +- **API** - реализованный в микросервисной архитектуре; +- **База данных** - на выбор студентов; +- **Балансировщик нагрузки** - Nginx; +- **Брокер сообщений** - на выбор студентов; +- **Кэш** - на выбор студентов; +- **ELK-стек** Elasticsearch, Logstash и Kibana, для сбора и анализа логов; - **Мониторинг** Grafana и Prometheus. ::: @@ -59,19 +60,19 @@ - **Actor** пользователей или системы, взаимодействующих с приложением. - **Use case** основные действия и взаимодействия с системой. - ### Инициализация проекта + После выбора темы и формирования требований необходимо инициализировать репозиторий с исходным кодом проекта: -1. В репозитории курса [highload-2025](https://code.cloud.cosm-lab.science/itmo-teaching/highload-2025) создать отдельную ветку с названием, соответствующим ID вашего ИСУ. -1. Для своего проекта создайте `README.md` файл, в который добавите описание своего проекта. +1. В репозитории курса [highload-2025](https://code.cloud.cosm-lab.science/itmo-teaching/highload-2025) создать отдельную ветку с названием, соответствующим ID вашего ИСУ; +1. Для своего проекта создайте `README.md` файл, в который добавите описание своего проекта. ::: tip Примечание Не нужно создавать `pull request` для своей ветки, так как они не будут сливаться с `main`. Это позволит преподавателю вносить общие изменения в `main`, которые потом можно будет подтянуть в свои ветки по мере необходимости. ::: ### Реализация базового API -После инициализации проекта необходимо реализовать основную логику приложения и проверить её работоспособность. +После инициализации проекта необходимо реализовать основную логику приложения и проверить работоспособность полученной реализации. Под основной логикой подразумевается: @@ -81,10 +82,8 @@ - **ELK-стек**. ## Критерии оценки -1. Полнота и корректность выполнения всех этапов лабораторной работы. -1. Работоспособность API, наличие основных эндпоинтов. -1. Документированность кода и инструкции для запуска API. -1. Уровень владения информацией о проекте каждым участником группы. +1. Полнота и корректность выполнения всех этапов лабораторной работы; +1. Работоспособность API, наличие основных эндпоинтов; +1. Документированность кода и инструкции для запуска API; +1. Уровень владения информацией о проекте каждым участником группы; 1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. - - diff --git a/docs/task/task/2.md b/docs/task/task/2.md index 8603b1c..61afa86 100644 --- a/docs/task/task/2.md +++ b/docs/task/task/2.md @@ -6,12 +6,10 @@ Основным элементом отчета по результатам выполнения данной лабораторной работы является описание архитектуры системы, которое рекомендуется выполнять в виде одной или нескольких диаграмм, соответствующих нотации UML. Так, допускается использовать следующие типы диаграмм (в порядке увеличения степени детализации, сложности выполнения и количества баллов, которые можно получить по результатам выполнения данной лабораторной работы): -1. Диаграмма, не соответствующая нотации UML. -1. [Диаграмма компонентов](https://drive.google.com/file/d/1qoTxBFyAIKRhoO7N9tBUer_Oz8oX1hlz/view?usp=drive_link). - +1. Диаграмма, не соответствующая нотации UML; +1. [Диаграмма компонентов](https://drive.google.com/file/d/1qoTxBFyAIKRhoO7N9tBUer_Oz8oX1hlz/view?usp=drive_link); 1. [Диаграмма развертывания](https://drive.google.com/file/d/1qoTxBFyAIKRhoO7N9tBUer_Oz8oX1hlz/view?usp=drive_link). - ::: tip Рекомендация При создании детализированных диаграмм полезно разбить их на несколько частей. Используйте однообразность стиля при создании диаграммы, которая не соответствует UML нотации ([Пример диаграмм, не соответствующие натации UML](https://github.com/donnemartin/system-design-primer?tab=readme-ov-file)) ::: @@ -20,8 +18,8 @@ При оценке результатов лабораторной работы учитываются следующие аспекты предложенного решения: -1. Полнота описания архитектуры системы. -1. Точность соответствия представленных диаграмм нотации UML. -1. Уровень детализации описания архитектуры. -1. Умение аргументировать архитектурные решения, принятые при разработке архитектуры системы. +1. Полнота описания архитектуры системы; +1. Точность соответствия представленных диаграмм нотации UML; +1. Уровень детализации описания архитектуры; +1. Умение аргументировать решения, принятые при разработке архитектуры системы; 1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. diff --git a/docs/task/task/3.md b/docs/task/task/3.md index a4bea80..831555e 100644 --- a/docs/task/task/3.md +++ b/docs/task/task/3.md @@ -1,6 +1,6 @@ # 3. Развертывание системы -Данная лабораторная работа направлена на освоение навыков контейнеризации, настройки CI/CD и настройки мониторинга для отслеживания состояния системы. +Данная лабораторная работа направлена на освоение навыков контейнеризации, настройки CI/CD и мониторинга для отслеживания состояния системы. ## Задание @@ -9,29 +9,29 @@ Для выполнения лабораторной работы необходимо провести **контейнеризацию** всех разработанных сервисов с использованием **Docker**. Также необходимо подготовить файл `docker-compose.yml` для их **совместного развертывания**. ::: tip Рекомендация -- Для эффективной работы с Docker используйте volumes для хранения данных, чтобы сохранять их между перезапусками контейнеров. -- Для безопасного управления конфиденциальными данными используйте `.env` файлы, передавая переменные окружения в контейнеры. +- Для передачи конфиденциальных данных в контейнеры используйте переменные окружения. ::: ### Добавление мониторинга Добавьте мониторинг для отслеживания состояния системы, для этого выполните следующие пункты: -- Установите и настройте **Prometheus** для сбора метрик со всех сервисов. -- Подключите **Grafana** для визуализации данных. +- Установите и настройте **Prometheus** для сбора метрик со всех сервисов; +- Подключите **Grafana** для визуализации данных; - Настройте следующие базовые алерты в Prometheus: - - Использование процессора превышает 80%. - - Объем оперативной памяти превышает 75%. + - Использование процессора превышает 80%; + - Объем оперативной памяти превышает 75%; - Сервисы недоступны более 30 секунд. ### Добавление автотестов Реализуйте автоматическое тестирование системы, охватывающее ключевые аспекты работы приложения. Для этого напишите следующие виды тестирования: -- **Unit Tests**: Проверяйте отдельные модули или функции приложения, чтобы убедиться, что они работают корректно в изоляции. -- **Integration Tests**: Убедитесь, что различные компоненты системы взаимодействуют друг с другом без ошибок. +- **Unit Tests**: проверяйте отдельные модули или функции приложения, чтобы убедиться, что они работают корректно в изоляции; +- **Integration Tests**: убедитесь, что различные компоненты системы взаимодействуют друг с другом без ошибок. ### Настройка CI/CD -Настройте CI/CD пайплайн в Forgejo с использованием Jenkins для автоматизированной сборки, тестирования и развертывания проекта на предоставленных серверах в соответствии со следующими этапами: + +Настройте CI/CD пайплайн в `Forgejo` с использованием `Jenkins` для автоматизированной сборки, тестирования и развертывания проекта на предоставленных серверах в соответствии со следующими этапами: 1. Этап сборки: - Сборка Docker-образов для всех сервисов. @@ -39,16 +39,15 @@ - Запуск автотестов на собранных образах. - Генерация отчета о тестах. - ::: important Важно -Убедитесь, что ваши CI/CD конфигурации безопасны. Скройте `secrets` (например, ключи и пароли) через переменные среды Forgejo и Jenkins. +Убедитесь, что конфиденциальные данные (например, ключи и пароли) в CI/CD конфигурациях защищены. Используйте переменные окружения `Forgejo` и `Jenkins`. ::: ## Критерии оценки При оценке результатов лабораторной работы учитываются следующие аспекты проделанной работы: -1. Полнота и точность настройки системы мониторинга. -1. Полнота реализованных автотестов в пайплайне. -1. Умение аргументировать принятые решения при разработке `Dockerfile`, `docker-compose.yml`, `Jenkins` и конфигураций мониторинга. -1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. \ No newline at end of file +1. Полнота и точность настройки системы мониторинга; +1. Полнота реализованных автотестов в пайплайне; +1. Умение аргументировать принятые решения при разработке `Dockerfile`, `docker-compose.yml`, `Jenkins` и конфигураций мониторинга; +1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. diff --git a/docs/task/task/4.md b/docs/task/task/4.md index 4c53d78..7cf6120 100644 --- a/docs/task/task/4.md +++ b/docs/task/task/4.md @@ -10,30 +10,30 @@ ### Описание сценариев тестирования -Разработайте набор сценариев нагрузочного тестирования, который будет охватывать ключевые аспекты работы системы, такие как обработка запросов API, взаимодействие с базой данных и другие важные модули. +Разработайте набор сценариев нагрузочного тестирования, который будет охватывать основные аспекты работы системы, такие как корректная обработка запросов API, взаимодействие с базой данных и другие функции. -Включите следующие сценарии: +Должны быть предусмотрены следующие сценарии: -1. Много пользователей с низкой частотой запросов от каждого -2. Мало пользователей, но высокая частота запросов от каждого -3. Пиковая нагрузка с большим количеством пользователей и высокой частотой запросов +1. Много пользователей с низкой частотой запросов от каждого; +2. Мало пользователей, но высокая частота запросов от каждого; +3. Пиковая нагрузка с большим количеством пользователей и высокой частотой запросов. ### Проведение нагрузочного тестирования -Выполните нагрузочное тестирование системы, применяя ранее подготовленные сценарии для оценки производительности и устойчивости системы под различными условиями. +Выполните нагрузочное тестирование системы, применяя ранее подготовленные сценарии для оценки производительности и устойчивости системы при различных условиях. В ходе тестирования: -- Оцените поведение системы при различных типах нагрузки. -- Соберите данные о времени отклика, пропускной способности, использовании ресурсов и других метрик производительности. -- Проанализируйте результаты для выявления узких мест и определите, где система испытывает наибольшие трудности. +- Оцените работу системы при различных типах нагрузки; +- Соберите данные о времени отклика, пропускной способности, использовании ресурсов и других метрик производительности; +- Проанализируйте результаты для выявления узких мест, которые можно оптимизировать. После выполнения тестов сформируйте отчет, который должен включать: -- Графики, отображающие динамику производительности. -- Основные выводы, основанные на анализе тестирования. +- Графики, отображающие динамику производительности; +- Основные выводы по результатам тестирования; - Предложения по улучшению производительности и устранению выявленных проблем. ::: tip Рекомендация -Соберите данные не только о производительности, но и о состоянии системы в момент пиковых нагрузок. Для этого используйте **Prometheus** и **Grafana**. +Соберите данные не только о производительности, но и о загрузке системы в момент пиковых нагрузок. Для этого используйте **Prometheus** и **Grafana**. ::: ### Интеграция нагрузочных тестов в CI/CD @@ -46,4 +46,4 @@ 1. Качество и обоснованность составленных сценариев нагрузочного тестирования. 1. Умение анализировать результаты нагрузочного тестирования и выявлять узкие места в системе. -1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. \ No newline at end of file +1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. diff --git a/docs/task/task/5.md b/docs/task/task/5.md index 151f555..76a8b33 100644 --- a/docs/task/task/5.md +++ b/docs/task/task/5.md @@ -8,15 +8,15 @@ ### Вертикальное масштабирование -Для вертикального масштабирования увеличьте количество ядер, доступных для одного сервиса. Настройте ресурсы для одного сервиса с помощью **Docker**, увеличив количество выделяемых CPU или памяти, и проведите нагрузочное тестирование. Оцените, как увеличение ресурсов влияет на производительность сервиса и системы в целом. +Для вертикального масштабирования увеличьте количество ядер и оперативной памяти, доступных сервисам системы. Настройте доступные ресурсы для каждого сервиса по-отдельности с помощью **docker**, увеличив количество выделяемых CPU и памяти, затем проведите нагрузочное тестирование. Оцените, как увеличение ресурсов влияет на производительность сервиса и системы в целом. ::: tip Рекомендация -Основываясь на результатах нагрузочного тестирования, определите оптимальное количество выделяемых CPU или памяти. +Основываясь на результатах нагрузочного тестирования, определите оптимальное количество выделяемых CPU и памяти. ::: ### Горизонтальное масштабирование -Для горизонтального масштабирования создайте несколько экземпляров одного сервиса и запустите их на одном или нескольких узлах. Используя Docker Swarm, настройте развертывание нескольких контейнеров одного и того же сервиса. Проведите нагрузочное тестирование, чтобы оценить, как взаимодействуют экземпляры сервиса при высокой нагрузке. +Для горизонтального масштабирования создайте несколько экземпляров одного сервиса и запустите их на нескольких узлах. Используя `Docker Swarm`, настройте развертывание нескольких контейнеров одного и того же сервиса. Проведите нагрузочное тестирование, чтобы оценить, как меняется взаимодействие экземпляров сервисов при увеличении нагрузки. ::: tip Рекомендация Основываясь на результатах нагрузочного тестирования, определите оптимальное количество экземпляров сервисов. @@ -26,19 +26,19 @@ Добавьте балансировщик нагрузки **Nginx**, который будет распределять трафик между несколькими экземплярами вашего сервиса. Проведите тестирование различных методов распределения нагрузки, чтобы определить, какой метод подходит для вашего случая. -Настройте несколько методов балансировки: -- **Round-robin**. -- **Least-connections**. +Настройте несколько методов балансировки нагрузки: +- **Round-robin**; +- **Least-connections**; - **Random**. ### Анализ результатов -Проанализируйте производительность системы при различных подходах к масштабированию. Определите оптимальные настройки для баланса между производительностью и ресурсами. +Проанализируйте производительность системы при различных подходах к масштабированию. Определите оптимальные настройки для обеспечения баланса между производительностью и ресурсами. ## Критерии оценки -При оценке результатов лабораторной работы учитываются следующие аспекты проделанной работы: +При оценке результатов выполнения лабораторной работы учитываются следующие аспекты: -1. Полнота тестирования вертикального и горизонтального масштабирования. -1. Умение анализировать результаты тестирования и формулировать выводы о производительности системы. -1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. \ No newline at end of file +1. Полнота тестирования результатов вертикального и горизонтального масштабирования; +1. Умение анализировать результаты тестирования и формулировать выводы о производительности системы; +1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при ее защите. diff --git a/docs/task/task/6.md b/docs/task/task/6.md index b7d8dbd..2e01bfe 100644 --- a/docs/task/task/6.md +++ b/docs/task/task/6.md @@ -11,26 +11,25 @@ - уменьшения нагрузки на базу данных; - ускорения времени отклика системы. -Проведите тестирование влияния кэширования на производительность и время отклика системы. +Исследуйте, как меняется производительность и время отклика системы при добавлении кеширования. ::: tip Рекомендация -- Кэшируйте результаты сложных вычислений, часто выполняемых запросов или статические данные. -- Настройте **TTL** для кэша, чтобы избежать устаревания данных. +- Кэшируйте результаты сложных вычислений, часто выполняемых запросов или статические данные; +- Настройте **TTL** для автоматизации обновления устаревающих данных (необходимо найти компромисс между слишком частым и слишком редким обновлением кеша). ::: ### Репликация и шардирование -Настройте репликацию и шардирование базы данных для повышения отказоустойчивости и масштабируемости системы. -Настройте репликацию базы данных, выбрав **асинхронный** или **синхронный** режим в зависимости от требований к консистентности данных. - +Настройте репликацию и шардирование базы данных для повышения отказоустойчивости и масштабируемости системы; +Настройте репликацию базы данных, выбрав **асинхронный** или **синхронный** режим в зависимости от требований к консистентности данных; Проведите нагрузочное тестирование, чтобы оценить эффективность репликации и шардирования в условиях работы под нагрузкой. ### Анализ результатов Проанализируйте работу системы до и после внедрения: -- Кэширования. -- Репликации. +- Кэширования; +- Репликации; - Шардирования. Выявите оптимальные настройки для обеспечения высокой доступности и максимальной производительности системы. @@ -39,6 +38,6 @@ При оценке результатов лабораторной работы учитываются следующие аспекты проделанной работы: -1. Корректность настройки шардирования и репликации. -2. Эффективность реализации механизма кэширования. -4. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при её защите. +1. Корректность настройки шардирования и репликации; +1. Эффективность реализации механизма кэширования; +1. Точность и полнота ответов на вопросы преподавателя по содержанию лабораторной работы при её защите.