Я пытаюсь найти решение для следующей проблемы.
У меня есть число N
клиентов (число фиксируется где-то между 5000
и 6000
) и Server
.
На этом сервере есть локальные cache
клиентов, где он хранит некоторые данные для каждого клиента.
public class Client
{
public bool inGroup;
}
Этот сервер периодически запрашивает некоторую базу данных и получает список этих clients
и он обновляет свой локальный кеш.Всякий раз, когда он обнаруживает расхождения (данные клиента - это просто bool
) между cache
и свежими данными из базы данных, он должен информировать конкретных клиентов.
Теперь я не знаю, следует ли мне реализоватьрешение на основе PULL
или PUSH
.Если выбрать PULL
, то это означает, что каждый клиент будет опрашивать сервер с фиксированным интервалом где-то около 30 минут.Это будет означать 30 / 6000 = 300 ms
между каждым запросом.
Если выбрать решение на основе PUSH
, это будет означать, что сервер будет опрашивать базу данных через определенные промежутки времени и передавать только определенным клиентам.Теперь проблема заключается в том, что каждый клиент также станет сервером, поэтому сервер также должен хранить таблицу IP
-s и Ports
.
Рабочие часы клиентов также аналогичны, поэтомуэто также означало бы, что в целевые часы будут всплески, когда каждый клиент отправит свои IP
и PORT
на сервер, чтобы проверить, был ли он модифицирован.
Есть ли какое-либо другое промежуточное решение?И если нет, то каким будет хорошее решение:
- Число клиентов довольно постоянное (5000-6000)
- Клиенты
IP
и PORT
обычно не меняются. - Клиенты будут запрашивать сервер один раз в 30 минут, если на основе Pull
- Сервер будет запрашивать базу данных каждые 1 минуту и отправлять запросы целевым клиентам, если на основе Push