Это описание проблемы
У нас есть тысячи устройств (примерно 4–5 тыс.), Через которые мы должны считывать данные непрерывно, каждые 2 минуты или 30 секунд. Каждое устройство имеет свой уникальный IP.
Эти данные будут собраны и затем сохранены в базе данных. Эти устройства находятся в сотнях мест по всей стране.
Данные будут считываться не круглосуточно, а как минимум в течение 12 часов.
Существует веб-приложение, которое в какой-то момент запрашивает показ данных, которые собираются с помощью этих устройств.
Мы бы знали, какие данные с какого устройства запрашиваются.
Вот как мы думаем, что можем реализовать в Java
Раствор А :
В каждом месте назначьте одну машину, которая будет выполнять роль сервера и будет считывать данные с x-го количества устройств. Эти данные будут отправляться на центральный сервер каждые 1 час.
На этой назначенной машине данные извлекаются и хранятся локально (плоский файл или в базе данных памяти)
В этом случае у нас будет столько серверов, сколько мест. например, у нас может оказаться 1500 серверов / управление машиной, что станет кошмаром.
Раствор B :
У нас есть 8-10 центральных серверов, и каждый сервер считывает данные с нескольких машин. Данные помещаются в очередь и собираются в порядке поступления.
Серверы отправляют данные в базу данных.
Как клиент получает данные ?
В решении B клиент получает его из базы данных, предполагая, что данные помещены в базу данных и все еще не поставлены в очередь.
Как вы думаете, что должно работать лучше?
Есть ли альтернативный дизайн / решение?
Должны ли мы думать о программировании на сервере с Unix / Perl. Мы не хотим использовать C ++ по некоторым другим причинам.