Высокопроизводительный распределенный асинхронный RPC в Java
Я хотел бы сделать RPC для списка клиентов со следующими требованиями:
- сервер не знает клиентов (подразумевает своего рода брокера?), а клиенты не знают сервера
- может быть несколько клиентов - они разделяют нагрузку для обработки RPC
- RPC асинхронный
- очень быстро (в оба конца < 1 мс)
- опционально: предлагает механизм отработки отказа.
Это можно сделать с помощью базовых инструментов, которые на самом деле не предназначены для этого (например, Hazelcast).
Что бы вы использовали для таких требований?
Спасибо!
2 ответа
Я бы использовал ActiveMQ, так как с ним легко начать и тестировать модуль.
Он может поддерживать 20K сообщений в секунду, которых, вероятно, будет достаточно.
Если вам нужно быстрее, подумайте об использовании HornetQ, но вам нужно будет проверить, подходит ли он для ваших потребностей в высокой производительности.
Можно довольно легко переключить одного провайдера JMS на другого.
Если вам нужна действительно высокая производительность, вы можете рассмотреть библиотеку Java Chronicle, которую я написал. Он не предназначен для балансировки нагрузки, но может поддерживать более миллиона сообщений в секунду от одного производителя.
См. эту асинхронную структуру: https://github.com/reactor/reactor и слайды: http://www.slideshare.net/eonnen/high-performance-network-programming-on-the-jvm-oscon-2012.