Skip to content

Latest commit

 

History

History
121 lines (82 loc) · 10.5 KB

11-microservices-03-approaches.md

File metadata and controls

121 lines (82 loc) · 10.5 KB

Домашнее задание к занятию "11.03 Микросервисы: подходы"

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

Задача 1: Обеспечить разработку

Предложите решение для обеспечения процесса разработки: хранение исходного кода, непрерывная интеграция и непрерывная поставка. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.

Решение должно соответствовать следующим требованиям:

  • Облачная система;
  • Система контроля версий Git;
  • Репозиторий на каждый сервис;
  • Запуск сборки по событию из системы контроля версий;
  • Запуск сборки по кнопке с указанием параметров;
  • Возможность привязать настройки к каждой сборке;
  • Возможность создания шаблонов для различных конфигураций сборок;
  • Возможность безопасного хранения секретных данных: пароли, ключи доступа;
  • Несколько конфигураций для сборки из одного репозитория;
  • Кастомные шаги при сборке;
  • Собственные докер образы для сборки проектов;
  • Возможность развернуть агентов сборки на собственных серверах;
  • Возможность параллельного запуска нескольких сборок;
  • Возможность параллельного запуска тестов;

Обоснуйте свой выбор.

Задача 2: Логи

Предложите решение для обеспечения сбора и анализа логов сервисов в микросервисной архитектуре. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.

Решение должно соответствовать следующим требованиям:

  • Сбор логов в центральное хранилище со всех хостов обслуживающих систему;
  • Минимальные требования к приложениям, сбор логов из stdout;
  • Гарантированная доставка логов до центрального хранилища;
  • Обеспечение поиска и фильтрации по записям логов;
  • Обеспечение пользовательского интерфейса с возможностью предоставления доступа разработчикам для поиска по записям логов;
  • Возможность дать ссылку на сохраненный поиск по записям логов;

Обоснуйте свой выбор.

Задача 3: Мониторинг

Предложите решение для обеспечения сбора и анализа состояния хостов и сервисов в микросервисной архитектуре. Решение может состоять из одного или нескольких программных продуктов и должно описывать способы и принципы их взаимодействия.

Решение должно соответствовать следующим требованиям:

  • Сбор метрик со всех хостов, обслуживающих систему;
  • Сбор метрик состояния ресурсов хостов: CPU, RAM, HDD, Network;
  • Сбор метрик потребляемых ресурсов для каждого сервиса: CPU, RAM, HDD, Network;
  • Сбор метрик, специфичных для каждого сервиса;
  • Пользовательский интерфейс с возможностью делать запросы и агрегировать информацию;
  • Пользовательский интерфейс с возможность настраивать различные панели для отслеживания состояния системы;

Обоснуйте свой выбор.

Задача 4: Логи * (необязательная)

Продолжить работу по задаче API Gateway: сервисы используемые в задаче пишут логи в stdout.

Добавить в систему сервисы для сбора логов Vector + ElasticSearch + Kibana со всех сервисов обеспечивающих работу API.

Результат выполнения:

docker compose файл запустив который можно перейти по адресу http://localhost:8081 по которому доступна Kibana. Логин в Kibana должен быть admin пароль qwerty123456

Задача 5: Мониторинг * (необязательная)

Продолжить работу по задаче API Gateway: сервисы используемые в задаче предоставляют набор метрик в формате prometheus:

  • Сервис security по адресу /metrics
  • Сервис uploader по адресу /metrics
  • Сервис storage (minio) по адресу /minio/v2/metrics/cluster

Добавить в систему сервисы для сбора метрик (Prometheus и Grafana) со всех сервисов обеспечивающих работу API. Построить в Graphana dashboard показывающий распределение запросов по сервисам.

Результат выполнения:

docker compose файл запустив который можно перейти по адресу http://localhost:8081 по которому доступна Grafana с настроенным Dashboard. Логин в Grafana должен быть admin пароль qwerty123456


Ответ

Задача 1: Обеспечить разработку

В целом все современные популярные решения для процесса разработки +/- обеспечивают требования предъявляемые к системе.

Это такие системы как:

  • GitLab Ci/CD, для использования собственных докер образов можно использовать docker hub или artifactory
  • Azure DevOps Services, для использования собственных докер образов можно использовать docker hub или artifactory
  • TeamCity, но помимо использования отдельного хранилища для собственных образов необходимо подключать и системы контроля версий, например GitHub.

Я бы предложил использовать Azure DevOps Services (Azure DevOps Server) так как он наиболее полно закрывает заявленные потребности, имеет наибольшую гибкость в настройке процессов и позволяет управлять и использовать все необходимые инструменты в одном окружении

Задача 2: Логи

В качестве решения задачи предлагаю использовать Telegraf для сбора и доставки логов, для БД использовать Elasticsearch, а пользовательский интерфейс обеспечит Kibana.

Решение Задача
Telegraf - Сбор логов в центральное хранилище со всех хостов обслуживающих систему
- Минимальные требования к приложениям, сбор логов из stdout
- Гарантированная доставка логов до центрального хранилища
Elasticsearch - Обеспечение поиска и фильтрации по записям логов
Kibana - Обеспечение пользовательского интерфейса с возможностью предоставления доступа разработчикам для поиска по записям логов
- Возможность дать ссылку на сохраненный поиск по записям логов

Полученное решение будет достаточно лёгким, удобным, надёжным и гибким в масштабировании

Задача 3: Мониторинг

Предлагаю использовать Prometheus и Grafana.

  • Prometheus с его многочисленными exporter позволит собирать и хранить метрики с чего угодно дополняя их своими кастомными метриками, а при необходимости можно написать свой exporter
  • Grafana - это мощное средство визуализации метрик хранящихся в Prometheus, позволяющее создавать свои панели и дашборды, или даже подобрать готовые. Так же Grafana позволяет настроить нотификации при возникновении предупреждений и включать в них снимки панелей, что бы наглядно видеть проблему не посещая саму систему