• Какая правильная архитектура с message bus для клиент-серверной IoT-системы?

    @yarkin
    Я не работал с IoT-устройствами, но мне кажется, что отдельная локальная шина звучит логично, так как позволит иметь наименьшие задержки и работать офлайн, а также, возможно, сэкономить батарею. Но зависит от задачи и ресурсов, может оказаться поначалу выгодней работать через серверв. RabbitMQ использовать на IoT-устройстве так себе идея, имхо, для простой отправки в маленьком масштабе он будет невыгоден по ресурсопотреблению.
    Ответ написан
    Комментировать
  • Что не так с Docker?

    @metajiji
    Дело не в Dockerfile, а в docker-compose
    А а именно, у вас судя по всему windows, и проблема с пробросом маунтов и в целостности имейджей. Попробуйте вайпнуть докер и запустите с чистого листа:)

    ERROR: for mysql Cannot start service mysql: b"error while creating mount source path '/host_mnt/e/webdev/mysql': mkdir /host_mnt/e: file exists"

    Проброс с хоста (windows) внутрь виртуальной машины с Линукс поломатый. Пересоздайте вм и будет счастье.
    Ответ написан
    Комментировать
  • Есть ли Стратегия борьбы со сбросом состояния RabbitMQ?

    @yarkin
    1) Разработчики RabbitMQ ко всем потерям данных на стороне самого RabbitMQ относятся критично, так что, если в какой-то момент будете уверены, что теряет данные именно он, то смело создавайте баг (с подробностями как повторить).
    2) Если админы не умеют настраивать стейтфул приложения в контейнерной среде или куча ручных операций, то это больше административная задача, чтобы научиться и, например, использовать шаблоны/чарты/т.п. для предотвращения сюрпризов. Но также RabbitMQ в контейнере нужно настраивать, чтобы не получать деградации и дампов.
    3) Со стороны самого RabbitMQ есть зеркалирование очередей (queue mirroring) для дублирования данных, что позволит внезапно терять ноды (но восстановление может обойтись высоким потреблением процессора).
    4) Также рекомендую логировать и идентифицировать каждое отправленное и полученное сообщение, чтобы оценивать проблему. Для большей достоверности можно включить логирование ещё и на уровне RabbitMQ (если позволяют ресурсы). На прошлой работе у нас был свой плагин для RabbitMQ, который получал копию всех полученных и отправленных сообщений, выгребал из них нужную метаинформацию и отправлял в Graylog.
    5) Ну и конечно нужно делать отправку и приём с подтверждением, но это, я думаю, Вы и без меня уже делаете.
    Ответ написан
    4 комментария
  • Каким образом делается взаимодействие с hardware в микросервисной архитектуре и Docker-контейнерах?

    @basrach
    COM, USB, принтеры и какие-то специфичные железяки для терминалов - та часть, где код должен быть по определению железо-зависимым. Контейнеры же про диаметрально противоположное, про абстракцию от железа и окружения. Т.е. писать софт для специфичной железяки и запускать его в контейнере, это как в истории про микроскоп и гвозди.
    Вы сделали правильный вывод. Нужно выносить в контейнеры только логику независящую от какого-либо железа или оборудования. А сервисы, взаимодействующие с железом, разворачивать там где и железо.
    Ответ написан
    Комментировать
  • Каким образом делается взаимодействие с hardware в микросервисной архитектуре и Docker-контейнерах?

    newross
    @newross
    Product owner
    Можно извернуться и сделать форвардинг COM\USB портов по TCP. Но это все будет работать нестабильно и через жопу.
    Все что относится к клиенту, должно работать на клиенте. Печать - ответственность только клиента, бэк в контейнере вообще ничего не должен об этом знать, только генерировать документы если надо.
    Работа внешним оборудованием тоже отвественность клиента. Если оборудование надо зашарить, то на клиенте подымается сервис.
    Ответ написан
    3 комментария