Finance Helper

project_preview_img

В этой статье я хочу написать о своем проекте. Я постараюсь объяснить структуру проекта. Этот проект еще не полностью завершен, но я уже хочу поделиться промежуточными результатами. Проект можно посмотреть здесь.

Причины начать проект:

  1. Улучшить мои навыки программирования.
    Улучшение навыков является наиболее важной причиной для начала этого проекта. До начала проекта у меня не было опыта с базой данных Mongo. Я хотел научиться работать с этой базой данных, потому что у Mongo есть много интересных функций.
  2. Лучше понять микросервисную архитектуру.
    Микросервисная архитектура является популярной темой в наши дни. Понимание микросервисной архитектуры в наше время перестало быть роскошью и стало необходимостью, и в этом проекте я решил попробовать свои силы и написать все на этой архитектуре.
  3. Улучшить навыки администрирования серверов.
    Чтобы развернуть и администрировать такую систему, требуются дополнительные навыки, такие как навыки развертывания и выбора параметров базы монго, развертывание микросервисов в докере и так далее.

Financial Helper - это приложение, которое станет личным финансовым помощником, и это поможет в эффективном планировании бюджета, мониторинга затрат и достижения финансовых целей.

Основные задачи приложения следующие:

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

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

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

Архитектура

arc_1

Давайте поймем архитектуру приложения. Диаграмма показывает два блока. Это блоки для сбора аналитики и услуг.

В блоке для сбора аналитики все довольно просто, Prometheus отвечает за сбор аналитики услуг (количество запросов, время выполнения запроса и т. Д.) и Grafana отвечает за отображение графиков.

Теперь давайте перейдем к более интересной части проекта, к блоку микросервисов. Вот 8 микросервисов:

  1. Spring Gateway
    Основной задачей этого сервиса является предоставление простого, но эффективного способа направления к API, также отфильтровал некоторые запросы, используя Auth Service для авторизации пользователей.
  2. Auth Service
    Сервис дает возможность регистрироваться, войти, генерировать и проверять токен JWT.
  3. Accounting service
    Этот сервис реализует всю логику, связанную с учетом стоимости и дохода.
  4. Telegram bot
    Telegram bot service implements all the logic of communication between the site's clients and the support service. All reviews and feedbacks will be sent directly to the support chat.
  5. Spring Cloud Config
    Service Telegram Bot реализует всю логику связи между клиентами сайта и службой поддержки. Все отзывы и отзывы будут отправлены непосредственно в чат поддержки.
  6. Discovery service
    Discovery service позволяет службам находить и общаться друг с другом без жесткого кодирования имени хоста и порта.
Во время разработки были случаи дублирования кода в некоторых услугах. Такая проблема часто возникает при написании микросервисов. Самая большая проблема с дублирования кода в разных микросервисах - сложность поддержания системы, поскольку, когда вы меняете дублированный код в одном микросервисе, вам необходимо изменить код во всех остальных. Чтобы решить эту проблему, была написана библиотека, которая содержит дублированный код.
База данных Mongo была выбрана в качестве базы данных. Основными причинами выбора этой базы данных являются:
  1. Аналитика
    MongoDB предназначен для написания сложных аналитических запросов.
  2. Структура данных
    Данные в этой базе данных хранятся в формате JSON, что позволяет легко изменить схему данных и оставлять тяжелые обертки, такие как ORM.
  3. Горизонтальное масштабирование
    Легкое горизонтальное масштабирование также является преимуществом этой базы данных, в первые дни я не буду масштабировать базу данных, поскольку не будет много данных. Я считал этот момент важным, так как у меня будет возможность масштабировать не только систему, но и базу данных в любое время.

Развертывание

Теперь, когда мы более или менее выяснили архитектуру приложения, появляется другая проблема. Как развернуть и управлять таким большим количеством услуг? Я использовал инструмент под названием Docker, вы можете использовать другие аналоги, такие как Podman. Docker - это программное обеспечение для автоматизации развертывания и управления приложениями в контейнерных средах, другими словами, контейнеризатор приложения. Докер также полезен для горизонтального масштабирования системы. Достаточно сказать докеру, что у нас есть несколько серверов, и он автоматически распределит нагрузку.

Заключение

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