@plcboy

Язык и инструменты для разработки системы диспетчеризации/сбора данных/мониторинга?

Всех приветствую. Являюсь дилетантом-разработчиком) Если более конкретно, то по образованию инженер-программист, имею поверхностные знания по написанию кода на C, C++, Python (фреймворк Bottle), JS. Есть понимание работы железа, ОС и сетей.

В ближайшем будущем предстоит разработка системы, которая должна заниматься сбором данных от удаленных клиентов и, в редких случаях будет отправлять им управляющие сигналы (например, перезагрузить железо). Клиент - это какая-нибудь железка с linux на борту. Сбор данных должен вестись 24/7 и желательно в реальном времени. Если в какой-то момент времени у клиента пропадает доступ в сеть, то соответственно, данные копятся в очередь и отправляются сразу при возобновлении работы сети. Предполагаю, что на сервере все данные от клиентов будут лежать в реляционной БД (о структуре еще не думал, буду дополнительно изучать теорию баз). Количество клиентов предсказать сложно, в ближайшие годы их будет не более 500 при грубой оценке. При этом набор данных передаваемых от клиентов может быть разным. Задача очень похожа на сервис мониторинга самокатов, много клиентов, при этом разных(разные модели самокатов и железа), данные которых необходимо собирать, и иногда управлять клиентам. Также желательное наличие API, чтобы можно было прикрутить ТГ бота например.
У системы будет визуализация, сайт, или ПО, но этим будет заниматься другой человек. Мне лишь стоит это учесть.

Теперь вопросы:

1. Сервер я представляю как бэкенд разработку. Не могу определиться с выбором языка и фреймворка. Есть опыт работы с фреймворком bottle на Python. Но хочется что-то более серьезное и актуальное, потому что проект в перспективе будет разрастаться. Метаюсь между JS (node.js), GO, и Java. В глубине души есть желание познать все три ЯП, но тогда стоит определиться, какой из них лучше выбрать первым?
2. Поскольку клиентов будет много, необходима асинхронная или параллельная работа сервера. Правильно ли я понимаю, что Python в этом плане проигрывает js, go и java? И все потому, что питон однопоточный. Конечно есть asyncio , но, все таки это неполноценная параллельность
3. Стоит ли разбивать подобные проекты на микросервисы? То есть использовать брокер сообщений, который будет раскидывать сообщения от клиентов разным сервисам.
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 5
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
А нужно непременно писать свое? Берете nagios-core и адаптируете, например. Веб-морду можете нарисовать модно-стильно-молодежную, она у него сильно простяцкая.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
1. Сервер я представляю как бэкенд разработку.
Это она и есть в чистом виде.

Метаюсь между JS (node.js), GO, и Java.
Странные метания, языки не сказать чтобы были сопоставимы. ИМХО:

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

Го будет норм, НО это довольно молодой язык, с одной стороны достаточно производительный (что не сказать чтобы как-то сильно его положительно выделяло в представленной задаче), с другой - спецов в него сильно меньше и поддержка выльется в боль с поиском сотрудников и достаточно дорогими спецами.

Ява видится как вариант очевидного выбора среди перечисленных альтернатив. Большое коммюнити, хорошо отлаженный процесс разработки всего для корпоративного сектора, включая все необходимые сертификации по безопасности. Спецы есть, ценник на них повыше чем на яваскриптеров, но пониже гошников.

имею поверхностные знания по написанию кода на C, C++,
Тогда можно еще глянуть в сторону RUST, но опять же, оно молодое и дороговатое.

Если предполагается что писать будете в одно лицо, скорее всего выйдет либо фигня, либо затянется на годы. Нормальные проекты требуют хоть какой-то команды, толкового тимлида, хорошо понимающего в архитектуре и коде, и четкого тз, тогда есть шанс что все будет реализовано в реальный срок.

3. Стоит ли разбивать подобные проекты на микросервисы? То есть использовать брокер сообщений, который будет раскидывать сообщения от клиентов разным сервисам.
Зависит, для микросервисов архитектура создает еще один дополнительный уровень сложности, а при предполагаемом небольшом (до сотен тысяч) клиентов особой нагрузки вроде быть не должно. Проще построить монолит и, если возникает нагрузка на определенный внутренний функционал, выносить его в сервис, там есть нюансы и порог с которого все это имеет смысл, так что начинать достаточно типовой проект стоит с монолита в любом случае.
Ответ написан
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
Наймите 2х специалистов, которые:
1. Напишет ТЗ (первый специалист).
2. Выберет необходимый инструмент исходя из п1 (второй специалист).
3. Разработает проект из п1 (второй специалист).
4. Примет (или нет) выполненную работу из п3. (первый специалист).
Являюсь дилетантом-разработчиком)

Не могу определиться с выбором языка и фреймворка.

Ваша задача - оплатить выполненную работу, и уж тем более не выбирать, какие инструменты при этом будут использоваться.
Ответ написан
Комментировать
@Komrus
CIO
Клиент - это какая-нибудь железка с linux на борту

Вопрос:
клиент - это, (а) скорее, просто комп с Линуксом на борту?
Или (б) это какой-то специализированный контроллер автоматики, в котором линукс где-то глубоко-глубоко в фундаменте (так, что и не видно, и не достучишься), а поверх накручено много слоёв абстракции и прикладных софтин?

Например - контроллер для автоматизации инженерных систем. (То, что в мирное время Siemens или Sauter ставили, а сейчас - какие-нибудь Сегнетики). Там в глубине может быть Линукс, но к нему доступа нет. А наружу торчат специфические для мира автоматики/диспетчеризации протоколы: Modbus, Bacnet и т.п.

В таком случае и диспетчеризировать это проще с использованием софтин из мира автоматики - смотри на SCADA системы.
Ответ написан
tentrun
@tentrun
Fullstack (asp.net /react, vue, angular) deletant
1. Если не использовать сокеты, то я бы смотрел вообще в сторону asp net core с signalr, для IoT тоже есть signalr насколько я помню
2. JS можно смело выкинуть, GO как и сказали весьма молодой язык, но, не является плохим вариантом, java могу предположить что для клиента будет тяжеловат в связи с jvm
3. Вопрос в нагрузке, в решение, которое предложил я, условные 500rps это не нагрузка
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы