разработка HA кластерных приложений - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать программный инструмент для устройств IoT, который в основном должен выполнять распределенную транзакцию.Он будет иметь мастер, развернутый в облачной инфраструктуре, который подключается к устройствам благодаря специальному установленному агенту-программному обеспечению.Хотя структура и функции агента (и других связанных инструментов) довольно просты, существуют некоторые требования к агенту, которые я нахожу сложными

  • Он должен быть в высокой степени доступен с использованием репликации
  • Он должен отслеживать частичное состояние распределенной транзакции, поэтому, если отказывает главный узел, отказоустойчивый узел может возобновить работу с того места, где он был прерван, и выполнить это
  • В конце концов, все устройства должны быть в одномстатус.Транзакция не является строго атомарной, но мастер должен иметь возможность в любой момент повторять попытку обновить неисправное устройство
  • Мастер предоставляет API через конечные точки http / ws

Mastr reference architecture

Я предположил возможное решение с использованием этих компонентов:

Сервер API отвечает за аутентификацию клиента, горизонтальные функции и отображение API.Каждый экземпляр за балансировщиком нагрузки соединяется с хорошо известным семенем Job Executor (JE), получает список реплик JE и запрашивает лидера, за которого проголосовало большинство ответов.

Руководитель Job Job Executor получает транзакциюзапрашивает и применяет широковещательную команду ко всем устройствам, затем начинает собирать ответы.Он повторяет попытку для каждого устройства, которое отправляет ответ об ошибке или не отвечает вообще (безусловно, он должен знать, когда устройство физически связано с механизмом пинг-понга).Лидер отправляет всем другим узлам список неисправных устройств, чтобы в случае сбоя выбирался новый лидер и мог продолжать попытки выполнить команду на ранее вышедших из строя устройствах

Нужно ли мне это или я?Можно просто предположить, что все реплики могут совместно использовать глобальное состояние в базе данных?В этом случае мне все еще нужны пассивные узлы или я могу выполнять активную репликацию?Поскольку это кажется довольно распространенной проблемой, можете ли вы предложить мне фреймворк / инструмент (например, zookeeper?) Для достижения моей цели?

Заранее спасибо

...