Научите как лучше построить работу сервера для сбора данных.
Я частично работаю в конторе, которая занимается разработкой и производством скважинной аппаратуры для геофизиков. Выпускаем приборы в виде трубы напичканой электроникой. Работают эти приборы при температуре 100-120 градусов и давлении до 600 атмосфер. Почти военка. В составе приборов большое количество датчиков - температура, давление, удельная электропроводность, шумомеры, датчики гамма-излучения и т.д...
Дак вот, появилась идея наладить выпуск автономных датчиков различного назначения подключаемых непосредственно к сетевому кабелю внутри корпоративных сетей. Установить серьезный сервер, который будет собирать инфу с этих датчиков. Т.е. доступ к данным должен быть из любой точки шарика.
Техническая сторона вопроса подключения датчиков к сетке решается использованием специализированных контроллеров поддерживающих TCP. А вот по организации работы сервера, есть много неясностей.
Мне видится примерно такой способ сбора показаний датчиков.
С некоторой периодичностью, например один раз в секунду, датчик выстреливает пакет данных на IP адрес сервера. Серверный скрипт складывает эти данные в базу. Но если этих выстрелов будет 100 000 или больше? Как организовать архитектуру сервака, чтобы он тянул такую нагрузку? Сами пакеты данных будут очень короткие, в диаппазоне 20-50 байт. Потянет ли база столько записей в секунду с постоянным соединением? Стоит ли базу выносить на отдельную машину? Потянет ли php такую нагрузку или следует использовать что то другое. Как вообще такие задачи решаются? Расскажите, если знаете или имеете представление. Мне будет полезна любая информация по этому вопросу, потому, как я ни чего не знаю :) .
1. никаких скриптовых языков. С++ демон.
2. разнесите прием данных и запись их в базу. т. е. - процесс коллектор - собирает "выстреленные" данные и кладет в какой то кэш. и забывает про них. абсолютно другой процесс - обрабатывает этот кэш.
Раз скрипты неуместны, значит скорее всего будем отдавать задачу программисту, но нужно хоть грамотно её поставить... :)
Можно ведь поставить отдельные машины для сбора данных, для базы и для клиентского сервера.
По кэшу. При таких маленьких объемах данных и таких низких ценах на DDR, наверное, можно устроить кэш в оперативке? Могут ли два процесса работать с одним стэком организованным в оперативной памяти? Я так то далек от C++ но в общих чертах с программированием знаком. :D "На пальцах" понимаю...
И может ли быть организован прямой доступ к памяти для сетевого драйвера? Если можно так организовать, то наверное можно разнести процессы на две машины, т.е. сделать, чтобы машина на которой крутится база сама забирала данные из оперативки машины сборщика. Так можно сделать? Или на одной машине будет быстрее?
Вопросов много... :)
Цитата: Ghirik
Ясно, Хочется максимально использовать ресурсы современного компьютера, потому наверное Windows неприемлема?
Раз скрипты неуместны, значит скорее всего будем отдавать задачу программисту, но нужно хоть грамотно её поставить... :)
Можно ведь поставить отдельные машины для сбора данных, для базы и для клиентского сервера.
Раз скрипты неуместны, значит скорее всего будем отдавать задачу программисту, но нужно хоть грамотно её поставить... :)
Можно ведь поставить отдельные машины для сбора данных, для базы и для клиентского сервера.
не очень понимаю что такое "клиентский сервер". по ОС - глядите в сторону FreeBSD или (лучше всего OpenSolaris)
Цитата:
По кэшу. При таких маленьких объемах данных и таких низких ценах на DDR, наверное, можно устроить кэш в оперативке? Могут ли два процесса работать с одним стэком организованным в оперативной памяти? Я так то далек от C++ но в общих чертах с программированием знаком. :D "На пальцах" понимаю...
ну раз далеки - пусть думает программист
Цитата:
И может ли быть организован прямой доступ к памяти для сетевого драйвера? Если можно так организовать, то наверное можно разнести процессы на две машины, т.е. сделать, чтобы машина на которой крутится база сама забирала данные из оперативки машины сборщика. Так можно сделать? Или на одной машине будет быстрее?
Вопросов много... :)
две или одна не приницпиально. но "прямой доступ к памяти чужой машины для сетевого адаптера" - это бред :)
Цитата:
но "прямой доступ к памяти чужой машины для сетевого адаптера" - это бред
Во, теперь почти умный стал :) , а то думалось если есть прямой доступ для других устройств, почему не быть для сетевухи....
Цитата:
ну раз далеки - пусть думает программист
Но мне ведь то же интересно... Тем более я в этом проекте буду принимать непосредственное участие, всю скриптовую часть, точно буду сам писать. Т.е. брать из базы и отдавать клиентам будут мои скрипты, там скорость не нужна.