Общие очереди VS Actor Model
В моем веб-приложении J2EE я должен отправлять счетчик для каждого вызова Web API в изолированный поток для подсчета количества вызовов. Возможности включают в себя:
а) Использовать атомные длинные. Я думаю, что это вызвало бы раздор, если бы у меня были миллионы звонков в минуту. Как, все потоки будут пытаться обновить одну переменную.
б) использовать общую очередь. Каждый поток обработки запросов будет вставлен в очередь, а выделенный поток счетчиков отключится от этой очереди и увеличит счетчик.
в) Используйте модель актера, скажем, с использованием библиотеки Akka. Отправьте асинхронное сообщение актеру, и это добавит его к счетчику.
Мой вопрос заключается в том, как метод (б) сравнить с (в). Какие плюсы и минусы, и чем они отличаются на низком уровне?
1 ответ
В вашем случае я считаю, что модель актера должна быть лучшим вариантом. Плюсы с аккой
- Модель Actor с Akka позаботится об управлении потоками, и ее легко внедрить
- Кроме того, в будущем, если вы захотите реализовать счетчик для другого типа запроса, вы можете просто добавить новый субъект для этого.
Существует аналогичный вопрос: когда использовать актеров вместо решений для обмена сообщениями, таких как WebSphere MQ или Tibco Rendezvous?