Прошу сообщество оценить идею... Постановка задачи - мягкий realtime. Есть железка и программка, которые в паре генерируют события (пишут телефонные разговоры и может извещать об этом сторонние программы). Есть сервер, который:
1. Визуализирует состояние железки (где запись ведется, где нет и тп)
2. Записывает события в базу
3. Принимает запросы о состоянии канала и состоянии записи от клиентов и команды о назначении дополнительных атрибутов записям
4. Сам проставляет записям нкоторые атрибуты
Причем работать это должно в режиме гарантированного отклика - клиент получает отклик в переделах 3 секунд, а время обработки события о начале или окончании записи не должно превышать одной секунды, вне зависимости от блокировок в СУБД и ее (СУБД) загрузки
Пока что построена система о пяти независсимых нитях:
DBThread - нить хранит список "грязных" объектов, которые надо сохранить в базе и собственно пишет в базу
QueueRunner - очередь активных записей и обработчик команд (сообщений), пришедших от других нитей. Другие нити могут только добавить сообщения в очередь. QueueRunner делает все действия какие надо, и складывает задания в очередь к DBThread.
Recorder - считывает сообщения с железки и обслуживающей ее программы и кладет их к QueueRunner.
Networker - слушает запросы от клиентов и складывает из в QueueRunner. Если клиенту надо "срочно" вернуть ответ, Networker может прочесть данные из записи, хранящейся в QueueRunner.
Есть также специальный singleton Context, который кэширует справочники из базы, чтобы лишний раз ее не дергать и сократить время реакции.
Visual - визуализирует состояние очередей и железки.
Все межнитиевые операции проводятся под защитой семафоров, причем в семафор выставляется только на время работы с соответствующей очередью (не более одной сотой секунды).
Есть какие-нибудь мысли как ЭТО все улучшить?