Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Технический Проект, тема 2 #13

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

Leonidas51
Copy link

No description provided.

Copy link

@Alviner Alviner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здравствуйте!
Ознакомился с работой!
Это хорошо, что есть adr, они понятны и последовательны. Также схемы самодостаточны и понятны без дополнительных комментариев. Отличная работа!

Однако, есть небольшие замечания, которые нужно исправить:

  • adr это скорее лог принятие решений, основной документ все-таки notificator/software_architecture_document.md, который должен самодостаточно содержать текущее состояние системы, с описанием компонент, их взаимодействия, а также требования об ожидаемой нагрузки на основании чего можно будет делать предположения
  • еще можно добавить в adr к компонентам системы ссылки на материалы об особенностях, особенно с имплементацией выбранных паттернов
  • на основании схемы и описания будут строить систему, поэтому необходимы критерии оценки прототипа
  • внешние пользовали обращаются напрямую в систему, без прослоек, например, масштабировать такое решение выглядит сложным

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

Напоминаю, что работа не может быть принята без исправления всех критических ошибок! Желаю удачи!

Использовать Nginx API Gateway в качестве reverse-proxy.

#### Контекст:
Мы хотим ограничить доступ к нашему API, а также иметь возможность масштабировать систему. Остановились на Nginx для этой задачи в связи с высоким качеством документации и распространенностью технологии.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

у коллег, которые начнут ознакамливаться с системой возникнут вопросы, почему не что-то другое, рынок сейчас достаточно богат, поэтому нужно проводить исследования и составлять сравнительный анализ решений

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если мы не отталкиваемся от существующей команды (что, конечно, чит-код в этой домашке:)), есть ли некий порядок действий по сравнению нескольких +- аналогичных решений? Кроме очевидного "Окей гугл, что лучше..."

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

составляются критерии по выбору, потом проверяются аналоги по этим критериям и выбирается конкретный либо приводится перечень на выбор уже команде разработке

#### Положительные:
* Простота в использовании
* Подробная документация
* По сравнению с ActiveMQ, чуть выигрывает в перфомансе: https://digitalscholarship.unlv.edu/cgi/viewcontent.cgi?article=4749&context=thesesdissertations
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему это плохо?) Мне кажется это выглядит один из объективных плюсов решения безотносительно нагрузки

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если у команды нет опыта в этом продукте, но есть альтернативы, которые покрывают требования. Какой-то продукт просто удобнее использовать и легче сопровождать и поэтому можно пренебречь его меньшим перфомансом. Согласитесь, тогда бы не использовали никакой другой язык кроме c или assembler

* Подробная документация
* По сравнению с ActiveMQ, чуть выигрывает в перфомансе: https://digitalscholarship.unlv.edu/cgi/viewcontent.cgi?article=4749&context=thesesdissertations
#### Отрицательные:
* Могут возникнуть проблемы с горизонтальным масштабированием
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

еще не стоит забывать, что это все нужно еще поддерживать и сопровождать

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Согласен, обновил

Как я вижу, здесь подойдет любая достаточно распространенная современная технология, способная к масштабированию и интеграции с технологиями смежных контейнеров. В нашем случае это интеграции с MongoDB и RabbitMQ:
1. https://github.com/mongodb/mongo-go-driver
2. https://github.com/rabbitmq/amqp091-go
Разумеется, исходим из предположения, что у абстрактной команды разработки есть соответствующая экспертиза.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Действительно, навыки команды тоже ресурс, который стоит учитывать. Отличная работа!

* Быстрое реагирование в случае падения системы
#### Отрицательные:
* Требуется дополнительное время на внедрение
* Ошибки больше нельзя просто игнорировать
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а как это будет достигаться?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это скорее шутка) А если серьезно, такое решение нам поможет при интеграционном тестировании прототипа. Документ обновил

@Leonidas51
Copy link
Author

Leonidas51 commented Oct 12, 2023

Спасибо за подробное ревью! Замечания учел, только прошу пояснить поподробнее по двум моментам:

еще можно добавить в adr к компонентам системы ссылки на материалы об особенностях, особенно с имплементацией выбранных паттернов

Типа ссылок на доку? Или статей а-ля хабр "Как мы реализовали X на Y через Z"?

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

Тут не очень понимаю как это аффектит конечную архитектуру. Мы хотим иметь доп. контроллер между очередью и шлюзами доставки уведомлений?

@Alviner
Copy link

Alviner commented Oct 15, 2023

Спасибо за подробное ревью! Замечания учел, только прошу пояснить поподробнее по двум моментам:

еще можно добавить в adr к компонентам системы ссылки на материалы об особенностях, особенно с имплементацией выбранных паттернов

Типа ссылок на доку? Или статей а-ля хабр "Как мы реализовали X на Y через Z"?

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

Тут не очень понимаю как это аффектит конечную архитектуру. Мы хотим иметь доп. контроллер между очередью и шлюзами доставки уведомлений?

  1. и ссылок на доку, если в ней есть особенности и на форумы тоже можно, если там есть что подчеркнуть
  2. ну вот допустим вы используете pub/sub pattern, тогда нужно научиться собирать пачку сообщений для отправки в провайдер и сделать это без потерь. То есть если вы вычитали пачку и не смогли ее отправить, сообщения должны вернуться в очередь для отправки

Copy link

@Alviner Alviner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Видно, что вы вложили усилия в это задание, это несомненно. Однако есть несколько аспектов, которые можно улучшить:

  • c4 модели, указал на неточность в комментарии
  • не нашел краткое описание паттернов и их имплементации

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

Давайте доработаем и можем идти дальше

Предусмотреть хранилище для уведомлений, упавших на отправке, чтобы вернуть их в очередь для повторной попытки.

#### Контекст:
Мы не можем гарантировать 100% успеха по доставке уведомлений с первой попытки. Что мы можем предпринять: хранить упавшие уведомления и отправлять их обратно в очередь до N раз. Точное число выясним при интеграционном тестировании прототипа.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

есть гарантия, что мы прочитали сообщение, не смогли его отправить и не смогли сохранить, то
оно не потеряется?


Были рассмотрены три кандидата: Kafka, RabbitMQ и ActiveMQ.

Kafka не реализует маршрутизацию сообщений из коробки, поэтому от этого решения отказываемся. В конечном счете остановились на RabbitMQ. Мотивацию см. ниже. Последствия даны в сравнении с ActiveMQ.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

все так, а какого рода маршрутизация вам тут нужна? в кафке есть топики, создать топики на каждый тип сообщения вполне себе можно

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

на схеме еще не представлены слушатели из очередей, которые непосредственно отправляют во внешние шлюзы или складывает в хранилище неотправленных.

Но в таком случае коллекция в монго ставновится горячим хранилищем в которое и пишется и читается одновременно, но в документе adr такой сценарий не рассмотрен

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants