Как работает модель актора (в Akka), когда вам нужно выполнить ввод-вывод (т.е. операцию с базой данных)?
Насколько я понимаю, операция блокировки вызовет исключение (и по существу разрушит весь параллелизм из-за равномерной природы Netty, которую использует Akka). Следовательно, мне придется использовать Future
или что-то подобное - однако я не понимаю модель параллелизма.
- Может ли один субъект обрабатывать несколько сообщений одновременно?
- Если субъект делает блокирующий вызов в
будущем
(т.е. будущем. get ()
) блокирует ли это выполнение только текущего актора, или предотвратит ли это выполнение для всех акторов до тех пор, пока блокирующий вызов не завершится?
- Если он блокирует все выполнение, как использовать будущий вспомогательный параллелизм (т.е. не будет вызывать блокирующие вызовы в будущем, все равно будет означать создание актора и выполнение блока ng call)?
- Как лучше всего справиться с многоэтапным процессом (т.е. читать из базы данных; вызвать блокирующий веб-сервис; читать из базы данных; запись в базу данных), где каждый шаг зависит от последнего?
Основной контекст таков:
- Я использую сервер Websocket, который будет поддерживать тысячи сеансов.
- Каждый сеанс имеет определенное состояние (например, сведения об аутентификации и т. Д.);
- Клиент Javascript отправит сообщение JSON-RPC на сервер, который передаст его соответствующему субъекту сеанса, который выполнит его и вернет результат.
- Выполнение вызова RPC будет включать в себя некоторые операции ввода-вывода и блокирующие вызовы.
- Будет большое количество одновременных запросов (каждый пользователь будет делать значительное количество запросов через соединение WebSocket, и там будет много пользователей).
Есть ли лучший способ добиться этого?
задан AhmetB - Google 30 June 2011 в 06:42
поделиться