Как организовать сервер для опроса и хранения данных 10000 датчиков?
Попробую сформулировать задачу, есть некая система контроля солнечной энергии, мозги этой системы я разрабатываю лично и с нуля, теоретически, во власти есть абсолютно любой интерфейс передачи данных в компьютер... Пока прототип мозгов работает автономно, то есть без участия человека (почти), но не суть.. Нужно организовать сервер для того, что бы все данные с этих мозгов отображались в веб-интерфейсе, пользоваться сторонними хостингами не хочу, так как параллельно разработке осваиваю debian и хотелось бы не зависеть ни от кого.
Для начала, в планах сделать такую систему:
Есть, например, 1000 домов с такими мозгами все они осуществляют передачу данных о работе системы на головной компьютер через интернет. Данные представляют из себя значения разнообразных датчиков типа, температуры, напряжения, тока, освещенности и много чего еще...
Я думаю, что мне нужна база данных, в которую бы писались значения каждых мозгов и по требованию, я мог прочитать всё об их состоянии. Естественно через веб - интерфейс.
Какие требованиями должно обладать железо для такой задачи?
И как вообще организуются подобные системы?
Что курить, чтобы понять как это все работает?
@L3n1n К сожалению, мои понятия о "любом железе" давно устарели.. Сам работаю на компьютере, который с натягом тянет графическую оболочку KDE... Поэтому, первый вопрос это выбор конкретного железа, понятно, что видеокарта не нужна крутая, все через консоль делать буду, однако, такой потом информации мое нынешнее железо точно не потянет.. Если не сложно, напишите хотя бы примерные характеристики? Мм..прошивку для мозгов пишу на С++, для интерфейса знаю только html+css.. Но как по мне, это уже мелочи.. Больше интересуют мануалы по базам данных, как с ними общаться и что это такое вообще, в Wiki вяло написано, а больше не знаю каким статьям верить, везде по своему написано..
@hola_engineer Поверьте, для Ваших задач хватит почти любого железа. У меня 2 проекта крутились на сервере с 512 рам и одним одноядерным процессором 2007го года. База занимала порядка 2Гб+1Тб дисков+ 100-200 постоянный онлайн людей.
@L3n1n То есть, моё железо: процессор - celeron 1.7ghz/128/400, видеокарта nvidia на 64мб, 2Гб оперативки и жесткого диска на 80 Гб вполне достаточно? Только нужен еще один накопитель на терабайт и дело в шляпе?
@L3n1n Датчики будут опрашиваться ~ раз в 10 секунд, так как мозги находятся в режиме бета - тестирования и будут там еще долгое время, поэтому нужно иметь возможность быстро принимать решение. Смотрите, как я вижу всю эту систему: Есть 10 датчиков, они подключены, например через микроконтроллер к usb пользовательского компьютера, на котором имеется софт, который через интернет передает данные этих датчиков на мой сервер. Далее, сервер принимает пакет данных, расшифровывает какие они и от кого получены, выбирает ячейку памяти базы данных, записывает их туда и хранит. Далее, я провожу "ревизию", через интерфейс выбираю нужный дом, база данных предоставляет данные в виде таблички со всеми параметрами. Так же должен быть обработчик событий (он следит, чтобы значения были в определенных пределах, если что не так, то он выполняет определенный сценарий, в котором оповещает пользователя и в определенном случае посылает сигнал об отключении системы или корректировке каких то параметров. Электронная часть фигня, реализуется не так сложно, интерфейс я тоже напишу, но блин, хоть убейте, не могу понять как их соединить..
А скажите зачем складывать в БД записи раз в 10 сек, не проще ли складывать в БД только изменения данных ? и почему ваши мозги не могут это фильтровать до того, как это попадет к вам на сервер ?
Судя по этому комментарию, вы хотите хотите сделать всё "с нуля". Тогда вам понадобится что-то вроде этого: Boost Asio. Или любая другая подобная библиотека. На хабре было много статей по этой теме (Asio, libevent). Ну, а соединение с базой данных - это уже меньшая проблема - есть много биндингов к C++, например MySQL; есть даже такое.
Если же вам не хочется мучится с "низкоуровневыми" сокетами, многопоточностью и отладкой всего этого, то можете попробовать Erlang. Для решения вашей задачи он подойдёт идеально.
Напишите себе Web_API для работы с базой. На стороне каждого дома реализуйте клиент который будет использовать это API.
2)Напишите веб-морду для отображения данных из базы
Спасибо, за ответ! Мои знания несколько посредственны, я инженер - разработчик электронных устройств, по сути программирование не моё, но придется, подкинте, пожалуйста конкретные рецепты, как все это можно сделать, не нужно готовое, хочу писать сам чтобы разобраться
С железом вопросов вообще нет, все уже придумано, наполовину реализовано, это всего лишь вопрос времени, так как от работы не убежишь, хотя начальник заинтересован в таком устройстве и готов выделять мне на это время, но трактора сами не поедут (по работе я разрабатываю и реализовываю электронику для промышленной техники)
Посмотрите на graphite.wikidot.com
Тут и база данных и простой API для добавления, и веб-интерфейс и куча разных агрегатных функций и масштабируемый и используется в куче подобных систем и приложений, и графики строит, причем по любым значениям, и данные можно вводить скопом и за любой интервал времени. Достаточно прост в установке и освоении. Можно использовать как в малых инсталляциях для мониторинга десятков значений, так и например в яндексе пользуют для сбора параметров с десятков тысяч объектов.