Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
186 changes: 86 additions & 100 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,117 +1,103 @@
# Домашнее задание к занятию "`Название занятия`" - `Фамилия и имя студента`


### Инструкция по выполнению домашнего задания

1. Сделайте `fork` данного репозитория к себе в Github и переименуйте его по названию или номеру занятия, например, https://github.com/имя-вашего-репозитория/git-hw или https://github.com/имя-вашего-репозитория/7-1-ansible-hw).
2. Выполните клонирование данного репозитория к себе на ПК с помощью команды `git clone`.
3. Выполните домашнее задание и заполните у себя локально этот файл README.md:
- впишите вверху название занятия и вашу фамилию и имя
- в каждом задании добавьте решение в требуемом виде (текст/код/скриншоты/ссылка)
- для корректного добавления скриншотов воспользуйтесь [инструкцией "Как вставить скриншот в шаблон с решением](https://github.com/netology-code/sys-pattern-homework/blob/main/screen-instruction.md)
- при оформлении используйте возможности языка разметки md (коротко об этом можно посмотреть в [инструкции по MarkDown](https://github.com/netology-code/sys-pattern-homework/blob/main/md-instruction.md))
4. После завершения работы над домашним заданием сделайте коммит (`git commit -m "comment"`) и отправьте его на Github (`git push origin`);
5. Для проверки домашнего задания преподавателем в личном кабинете прикрепите и отправьте ссылку на решение в виде md-файла в вашем Github.
6. Любые вопросы по выполнению заданий спрашивайте в чате учебной группы и/или в разделе “Вопросы по заданию” в личном кабинете.

Желаем успехов в выполнении домашнего задания!

### Дополнительные материалы, которые могут быть полезны для выполнения задания

1. [Руководство по оформлению Markdown файлов](https://gist.github.com/Jekins/2bf2d0638163f1294637#Code)

---
# Домашнее задание к занятию "Микросервисы: принципы" - `Молоствов Андрей`

### Задание 1

`Приведите ответ в свободной форме........`

1. `Заполните здесь этапы выполнения, если требуется ....`
2. `Заполните здесь этапы выполнения, если требуется ....`
3. `Заполните здесь этапы выполнения, если требуется ....`
4. `Заполните здесь этапы выполнения, если требуется ....`
5. `Заполните здесь этапы выполнения, если требуется ....`
6.
### Сравнение решений для API Gateway

```
Поле для вставки кода...
....
....
....
....
```
**1. Kong Gateway (Open Source)**
* **Маршрутизация:** Да, на основе конфигурации (Admin API или декларативные файлы).
* **Аутентификация:** **Отлично**. Богатая экосистема плагинов: JWT, OAuth2, Key-Auth, LDAP и др.
* **HTTPS:** Поддерживается терминация HTTPS.
* **Особенности:** Построен на NGINX, требует БД (или DB-less режим), огромная библиотека плагинов.

`При необходимости прикрепитe сюда скриншоты
![Название скриншота 1](ссылка на скриншот 1)`
**2. NGINX (Open Source)**
* **Маршрутизация:** Да, через конфигурационные файлы (.conf, блоки localhost).
* **Аутентификация:** **Слабо**. Базовая HTTP-аутентификация; для JWT/OAuth2 нужна компиляция модулей или сложные скрипты.
* **HTTPS:** **Эталонная реализация**, лучшая в классе.
* **Особенности:** Высочайшая производительность, но требует ручного написания конфигов и reload при изменениях.

**3. Traefik**
* **Маршрутизация:** Да, отличная интеграция с Docker, Kubernetes, Swarm.
* **Аутентификация:** **Хорошо**. Встроенные middleware (Basic, Digest, JWT, ForwardAuth).
* **HTTPS:** Да, автоматическое получение сертификатов Let's Encrypt.
* **Особенности:** Низкий порог входа в контейнерных средах, динамическая конфигурация.

---

### Задание 2
**4. Yandex API Gateway (SaaS)**
* **Маршрутизация:** Да, на основе спецификации OpenAPI.
* **Аутентификация:** Да, интеграция с Yandex IAM и Cloud Functions.
* **HTTPS:** Да (полностью управляется платформой).
* **Особенности:** Serverless-решение, не требует администрирования, масштабируется автоматически, но привязывает к провайдеру.

`Приведите ответ в свободной форме........`
### Обоснование выбора (API Gateway)

1. `Заполните здесь этапы выполнения, если требуется ....`
2. `Заполните здесь этапы выполнения, если требуется ....`
3. `Заполните здесь этапы выполнения, если требуется ....`
4. `Заполните здесь этапы выполнения, если требуется ....`
5. `Заполните здесь этапы выполнения, если требуется ....`
6.
На основе сравнительного анализа в качестве основного решения предлагается использовать **Kong Gateway (Open Source)**.

```
Поле для вставки кода...
....
....
....
....
```
**Почему Kong Gateway?**

`При необходимости прикрепитe сюда скриншоты
![Название скриншота 2](ссылка на скриншот 2)`
1. **Полное соответствие требованиям:** Kong из коробки решает все три поставленные задачи:
* Гибкая маршрутизация запросов на основе конфигурации (через Admin API или декларативные файлы).
* Мощная система аутентификации (JWT, OAuth2, Key-Auth, Basic Auth и другие плагины).
* Поддержка терминации HTTPS с управлением SSL-сертификатами.

2. **Богатая экосистема:** В отличие от чистого NGINX, Kong предлагает библиотеку из более чем 100 готовых плагинов. Это позволяет добавлять функциональность (аутентификацию, rate limiting, трансформацию запросов) без написания сложного кода и перекомпиляции модулей.

---
3. **Баланс функциональности и сложности:** Kong проще в эксплуатации, чем "чистый" NGINX с самописными скриптами, но при этом не привязывает к конкретному облачному провайдеру (в отличие от Yandex API Gateway).

### Задание 3
**Почему не другие варианты?**

`Приведите ответ в свободной форме........`
* **NGINX:** Хотя NGINX превосходно справляется с маршрутизацией и HTTPS, его возможности аутентификации "из коробки" минимальны. Реализация JWT или OAuth2 потребовала бы сложной доработки (компиляция сторонних модулей или написание скриптов на Lua), что усложняет поддержку системы.
* **Traefik:** Отличное решение для контейнерных сред (Kubernetes, Docker Swarm). Однако Kong предлагает более богатую экосистему именно для управления API (тонкая настройка политик безопасности, трансформация трафика, аналитика) и чаще выбирается, когда требуется не просто прокси-сервер, а полноценный API Gateway.
* **Yandex API Gateway (SaaS):** Это хороший managed-вариант, если инфраструктура полностью развернута в Yandex.Cloud. Однако он привязывает архитектуру к конкретному провайдеру (vendor lock-in), тогда как Kong — платформонезависимое решение, которое можно развернуть где угодно: в любом облаке или on-premises.

1. `Заполните здесь этапы выполнения, если требуется ....`
2. `Заполните здесь этапы выполнения, если требуется ....`
3. `Заполните здесь этапы выполнения, если требуется ....`
4. `Заполните здесь этапы выполнения, если требуется ....`
5. `Заполните здесь этапы выполнения, если требуется ....`
6.

```
Поле для вставки кода...
....
....
....
....
```

`При необходимости прикрепитe сюда скриншоты
![Название скриншота](ссылка на скриншот)`

### Задание 4

`Приведите ответ в свободной форме........`

1. `Заполните здесь этапы выполнения, если требуется ....`
2. `Заполните здесь этапы выполнения, если требуется ....`
3. `Заполните здесь этапы выполнения, если требуется ....`
4. `Заполните здесь этапы выполнения, если требуется ....`
5. `Заполните здесь этапы выполнения, если требуется ....`
6.

```
Поле для вставки кода...
....
....
....
....
```
### Задание 2

`При необходимости прикрепитe сюда скриншоты
![Название скриншота](ссылка на скриншот)`
### Сравнение решений для брокера сообщений

**1. RabbitMQ**
* **Кластеризация и надежность:** Да (кластеризация, очереди с зеркалированием / Quorum queues).
* **Хранение на диске:** Да (персистентные сообщения, запись на диск до подтверждения).
* **Скорость работы:** Высокая (миллисекунды, до десятков тысяч сообщений в секунду).
* **Форматы сообщений:** Любые (бинарный массив данных).
* **Разделение прав:** Да (пользователи, vhosts, ACL).
* **Простота эксплуатации:** **Очень высокая** (интуитивный веб-интерфейс, понятная документация, легко настраивать).

**2. Apache Kafka**
* **Кластеризация и надежность:** **Эталонная** (репликация партиций, строгая согласованность).
* **Хранение на диске:** Да (основной режим работы, хранение с retention-политиками).
* **Скорость работы:** **Очень высокая** (миллионы сообщений/сек).
* **Форматы сообщений:** Любые (поддержка Avro, Protobuf через Schema Registry).
* **Разделение прав:** Да (SSL, SASL, ACL для топиков).
* **Простота эксплуатации:** Средняя (требует понимания партиционирования, ZooKeeper/KRaft, сложный мониторинг).

**3. ActiveMQ (Artemis)**
* **Кластеризация и надежность:** Да (кластеризация, репликация).
* **Хранение на диске:** Да.
* **Скорость работы:** Средняя/Высокая.
* **Форматы сообщений:** Любые (поддержка JMS).
* **Разделение прав:** Да (JAAS, ACL).
* **Простота эксплуатации:** Высокая (консоль, JMX).

**4. NATS (с JetStream)**
* **Кластеризация и надежность:** Да (NATS JetStream, кластеризация, репликация).
* **Хранение на диске:** Да (только в режиме JetStream).
* **Скорость работы:** **Экстремальная**.
* **Форматы сообщений:** Любые.
* **Разделение прав:** Да (пользователи, разрешения на pub/sub).
* **Простота эксплуатации:** Высокая (легковесный, простой запуск).

### Обоснование выбора (Брокер сообщений)

На основе сравнительного анализа в качестве основного решения предлагается использовать **RabbitMQ**.

**Почему RabbitMQ?**

1. **Баланс скорости и надежности:** RabbitMQ обеспечивает высокую скорость работы (достаточную для подавляющего большинства микросервисных архитектур) и гарантирует сохранность сообщений благодаря записи на диск и кластеризации (Quorum queues).
2. **Гибкость форматов:** Брокер не накладывает ограничений на форматы — можно передавать JSON, XML, Protobuf, Avro и любые бинарные данные.
3. **Безопасность из коробки:** Поддерживает гибкое разделение прав доступа через пользователей и виртуальные хосты (vhosts).
4. **Простота эксплуатации:** Это ключевое преимущество. RabbitMQ имеет лучший в своем классе веб-интерфейс для мониторинга, отладки и управления очередями, что критически важно для команд, эксплуатирующих систему.

**Почему не другие варианты?**

* **Apache Kafka:** Это индустриальный стандарт для потоковой обработки данных и сбора логов. Однако он избыточен и сложен в эксплуатации для типовых задач микросервисной коммуникации (простые очереди задач, RPC). Требование "высокая скорость" у RabbitMQ выполняется с запасом для стандартных сценариев, а эксплуатация Kafka значительно сложнее (управление партициями, офсетами, ZooKeeper/KRaft).
* **ActiveMQ:** Уступает RabbitMQ по скорости и удобству современного мониторинга.
* **NATS:** В режиме JetStream обеспечивает высокую скорость и надежность, но экосистема RabbitMQ более зрелая, а сообщество — шире, что облегчает поиск решений типовых проблем и интеграцию.
Binary file added img/1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/3.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/4.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.