homework 11.3: complete homework

This commit is contained in:
2022-10-25 10:34:54 +07:00
parent 6aec724e6f
commit 792fe1b401
2 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
Выполнение [домашнего задания](https://github.com/netology-code/devkub-homeworks/blob/main/11-microservices-02-principles.md)
по теме "11.2. Микросервисы: принципы"
## Q/A
### Задание 1
> Предложите решение для обеспечения реализации API Gateway.
> Составьте сравнительную таблицу возможностей различных программных решений. На основе таблицы сделайте выбор решения.
>
> Решение должно соответствовать следующим требованиям:
> - Маршрутизация запросов к нужному сервису на основе конфигурации
> - Возможность проверки аутентификационной информации в запросах
> - Обеспечение терминации HTTPS
// todo
| Решение | Маршрутизация | Проверка аутентификации | Терминация HTTPS | Конфигурация |
|------------------------------------------------|---------------|-------------------------|------------------|-------------------------------------------------------------------------------------|
| [nginx](https://nginx.org/ru/) | есть | есть | есть | [ссылка](https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/) |
| [haproxy](http://www.haproxy.org/) | есть | есть | есть | [ссылка](https://www.haproxy.com/blog/using-haproxy-as-an-api-gateway-part-1/) |
| [traefik](https://doc.traefik.io/traefik/) | есть | есть | есть | нет готовых примеров в открытом доступе |
| [kong](https://docs.konghq.com/gateway/3.0.x/) | есть | есть | есть | [ссылка](https://konghq.com/blog/kong-gateway-tutorial) |
Таким образом, все стандартные решения, которые изначально используются в качестве web-сервисов, могут быть настроены в качестве api-gateway.
Но есть специальные приложения, например `kong`, которые разработаны с учётом использования в качестве api-gateway.
Таким образом, в выборе решения по заданным условиям лучше опираться на экспертизу внутри команды.
В случае отсутствия экспертизы, скорее всего, стоит отдать предпочтение специализированному решению.
### Задание 2
> Составьте таблицу возможностей различных брокеров сообщений.
> На основе таблицы сделайте обоснованный выбор решения.
>
> Решение должно соответствовать следующим требованиям:
> - Поддержка кластеризации для обеспечения надежности
> - Хранение сообщений на диске в процессе доставки
> - Высокая скорость работы
> - Поддержка различных форматов сообщений
> - Разделение прав доступа к различным потокам сообщений
> - Простота эксплуатации
>
> Обоснуйте свой выбор.
| Критерий \ Решение | redis | rabbitmq | kafka |
|-------------------------------------------------------|------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| Поддержка кластеризации для обеспечения надежности | [да](https://redis.io/docs/manual/scaling/) | [да](https://www.rabbitmq.com/clustering.html) | да (изначально спроектирован под использование в кластере) |
| Хранение сообщений на диске в процессе доставки | [да](https://redis.io/docs/manual/persistence/) | [да](https://www.rabbitmq.com/persistence-conf.html) | [да](https://developer.ibm.com/articles/how-persistence-works-in-apache-kafka/) |
| Высокая скорость работы | [~42k req/s per node](https://facsiaginsa.com/redis/comparing-redis-persistence-options) | [38 Mb/s](https://www.confluent.io/blog/kafka-fastest-messaging-system/) | [605 MB/s](https://www.confluent.io/blog/kafka-fastest-messaging-system/) |
| Поддержка различных форматов сообщений | любое строковое сообщение | любое строковое сообщение | любое строковое сообщение |
| Разделение прав доступа к различным потокам сообщений | нет | да | да |
| Простота эксплуатации | простая настройка и эксплуатация | средняя сложность эксплуатации, необходимость погружения в конфигурацию для настройки под high-load | сложная настройка и эксплуатация |
Таким образом, если ожидается сильная нагрузка на брокеров сообщений, то `kafka` - оптимальный выбор, но придётся мириться
с высокой сложностью конфигурации и эксплуатации. При отсутствии экспертизы возможно использовать `rabbitmq`,
но добиться такой же производительности, что и `kafka`, возможно только за счёт увеличения ресурсов для кластера.