From 792fe1b4019fe6343f9eedbb3d1ced9962f90b8f Mon Sep 17 00:00:00 2001 From: dannc Date: Tue, 25 Oct 2022 10:34:54 +0700 Subject: [PATCH] homework 11.3: complete homework --- readme.md | 1 + src/homework/11-microservices/11.2/readme.md | 58 ++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/homework/11-microservices/11.2/readme.md diff --git a/readme.md b/readme.md index a0cd041..7cc5294 100644 --- a/readme.md +++ b/readme.md @@ -54,3 +54,4 @@ * [10.5. Sentry](/src/homework/10-monitoring/10.5) * [10.6. Инцидент-менеджмент](/src/homework/10-monitoring/10.6) * [11.1. Введение в микросервисы](/src/homework/11-microservices/11.1) +* [11.2. Микросервисы: принципы](/src/homework/11-microservices/11.2) diff --git a/src/homework/11-microservices/11.2/readme.md b/src/homework/11-microservices/11.2/readme.md new file mode 100644 index 0000000..1747dfe --- /dev/null +++ b/src/homework/11-microservices/11.2/readme.md @@ -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`, возможно только за счёт увеличения ресурсов для кластера.