В настоящее время я разрабатываю сервер для спутникового мониторинга объектов.
В своем текущем состоянии он очень эффективен и стабилен в сценариях с высокой нагрузкой.
Сервер должен иметь возможность обрабатывать 50 + млн сообщений в день или более, если используется балансировка нагрузки.
Он состоит из шлюза данных gps (singleton), «databroker» (singleton), который отвечает за сохранение данных, предоставление их по запросу и оповещение подписчиков о новых данных, услугах входа в систему (за вызов) и обслуживания клиентов (за сеанс) отвечает за подписку и работу с веб-интерфейсом и многофункциональным клиентом.
В этом состоянии я могу предвидеть следующие проблемы:
- Рост сложности при добавлении новых услуг.
- Герметичное соединение.
- Сложно настроить.
- Множество низкоуровневого кода для обработки подписок и т. Д. В будущих службах bl (например, для отчетов).
Для решения этих проблем я хочу использовать что-то вроде ServiceBus.
Решения MS стоят дорого для наших клиентов, NServiceBus меня немного пугает из-за его источников с открытым исходным кодом (и Class1 в исходном коде = D), и CIO попросил избегать его использования.
Поэтому я решил написать свою собственную простую шину и столкнулся с проблемами при адресации и подписке на разные типы услуг (синглтон, на сеанс, на вызов), а также существует потребность в балансировке нагрузки.
Я нашел довольно элегантное решение для этого: использовать «адаптеры» для сервисов bus - wcf для решения некоторых специфических вопросов работы со службами, таких как балансировка нагрузки. Так что шина будет видеть только адаптеры и маршрутизировать сообщения между ними, и они будут пересылать сообщения дальше. Но я беспокоюсь о производительности и всей идее ..
Буду очень рад услышать мысли обо всем этом =)
Шина PS и адаптеры используют MSMQ для связи между ними, но другие службы могут использовать привязки http, tcp.
PS2 Извините за мой английский, это не мой родной язык =)