• Как лучше реализовать данную архитектуру?

    romesses
    @romesses
    Backend инженер
    Когда пользователь ждет пока агрегатор выполнит свою работу - это нехорошо. Правильнее, чтобы первый захотел некоторый контент и сразу мог получить его, прямиком с БД, а в идеале с кэша частозапрашиваемого контента.
    Для этого агрегатору необходимо регулярно выполнять свою работу независимо от посетителей, в фоне. Разумеется, пайплайн агрегатора должен заранее знать откуда заполучать контент или же одноразово получить список источников в начале, пройтись по ним и занести данные в БД. Затем регулярно обновлять с уже известных источников независимо от захода пользователей.

    Ну а если в БД пусто и позарез нужно выдать контент, то остается плохой вариант - дать пользователю ждать, пока контент не будет скачан, обработан агрегатором и получен обратно. В данном случае, при попытке получения контента можно выдать сообщение, что мол, "Извините-с-с, заходите чуток позже" или же "Подождите 5 сек, я быстро-быстро". А когда свежий контент уже был обработан, то отправить назад контент по SSE/WebSocket. Или же short polling просто клиент будет периодично выполнять запросы к API с надеждой получить контент.
    Вот здесь можно прочесть о способах взаимодействия

    Поэтому я вижу такую архитектуру при работе с пользователем:
    Client -> API -> cache/DB (read)
                 \
                  MQ
                     \
                   [Aggregator]
                          \
                          DB (write)

    Здесь [Aggregator] может означать как монолитный механизм скачивания-обработки, где все в одном, так и микросервисную архитектуру.

    По мне, так бизнес-логику на Go писать не очень удобно и ее лучше осуществлять на более высокоуровневых языках. Так что в Go я бы реализовывал механизм скачивания контента и извлечения нужных частей, а в Python/Ruby/Perl и т.д. - логику самого агрегатора (смешение, композитинг контента).
    Ответ написан
    1 комментарий
  • Как отправлять запросы на сайт из приложения?

    @lebron32rus
    Senior Software Engineer
    Инструменты на которых можно разработать компоненты для вашей задачи:
    • Mobile - Java/Kotlin (Android), Objective-C/Swift (IOS), React Native (Android, IOS)
    • Backend - С#, Java, JavaScript, PHP, Python, Ruby и много других
    • База данных - PostgreSQL, MySQL, MondoDB...

    Если у Вас нет опыта в программировании или опыт минимальный, то я советую сначала пройти курс freeCodeCamp Пройдя этот курс вы научитесь писать Frontend и Backend с использованием JavaScript а также основам работы с базами данных. После можно будет переключиться на разработку мобильного приложения на React Native (JavaScript). Я считаю это наиболее быстрый путь так как не придется изучать несколько технологий одновременно.
    Ответ написан
    1 комментарий