19 мая 2016 г.

OrangePI + GO -> Easy MQTT Broker

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

Hard


В качестве железки я выбрал Orange PI PC. Во-первых, он лежал сверху в коробке с прочими гиковскими ништяками, которые я периодически покупаю для собственного развлечения. Во-вторых, когда-то я его уже запихал в корпус, который, по счастливому стечению обстоятельств выдержал неоднократные встречи с младшим наследником. В-третьих, вполне приличный (пусть и прожорливый) H3 Quad-core Cortex-A7, 1 гиг оперативки DDR3 и, если повар нам не врет, вполне себе честный Ethernet. Из минусов можно отметить только необходимость блока питания на 2А (подошла зарядка "для планшетов", как их величают в салонах связи) и нестандартный джек для питания ("как для старых планшетов"). А еще - не забудьте наклеить на процессор какой-нибудь радиатор - сковородка еще та, если верить интернетам и моим "пальчиковым" замерам.
Ubuntu 14.04.3 (образ есть на сайте производителя этих железяк) взгромоздился без проблем. Точно так же без каких-либо приключений обновился до 14.04.4 и добавил свой любимый демонизатор. На этом все подготовительные работы закончены. Остается только "потушить" сервер и сделать полноценный образ из чистой системы со всеми вновь установленными пакетами.

Soft

Для начала избавимся от протокольного велосипеда. Для этого подойдет MQTT: во-первых, он достаточно просто и легковесен, во-вторых, работает поверх голого tcp/ip. В-третьих, у него прекрасная идеология: есть темы, на которые можно подписываться, если сообщения, публикуемые в этих темах, и есть сервер (брокер), который занимается доставкой сообщений подписчикам. И это не все: есть масса готовых библиотек практически для всех языков, скрывающих всю низкоуровневую рутину.
Остается решить вопрос, на чем писать? Нет, интриги не будет - golang. Во-первых, он мне нравится, во-вторых, у меня есть некоторый опыт его использования, в-третьих, решается проблема сборки приложения на сервере: кросскомпилляция из коробки со сборкой в самодостаточный бинарник. При разработке использовал surgemq - по отзывам, самая полноценная и шустрая библиотека, реализующая как функционал сервера, так и функционал клиента.
Остается только плавно переписать сервер "Удобного дома" (кстати, тоже на Go), оставив на нем только логику управления устройствами, избавив от роли брокера сообщений, и не забыть модифицировать прошивки для всяких Arduino/ESP8266. Но и тут проблем возникнуть не должно, потому как опять же - масса готовых библиотек для с/с++. Об этом как-нибудь в следующий раз.

Комментариев нет:

Отправить комментарий