Каковы языковые и товарные альтернативы Akka?
Сейчас я смотрю на Play Framework и мне это очень нравится. Акка- одна из частей, рекламируемых среди функций, предлагаемых в Play.
Чтобы лучше понять Akka и как правильно его использовать, расскажите, какие есть альтернативы на других языках или в других продуктах?
Как RabbitMQ сравнивается с этим? Есть много совпадений? Практично ли использовать их вместе? В каких случаях?
6 ответов
Лучшее место для начала - отличная официальная документация Акки. Я думаю, что ближайший продукт / фреймворк для Akka - это язык эрланга. Я думаю (я не использовал Play Framework) Akka используется для реализации Comet и другой асинхронной обработки.
rabbitmq несколько похож на идеи (инфраструктура для отправки сообщений), обратите внимание, что RabbitMQ даже написан на erlang, но у них немного другие варианты использования. Я бы сказал, что хотя RabbitMQ фокусируется на передаче сообщений, Akka больше ориентируется на участников (получателей и отправителей сообщений).
Я использую RabbitMQ + Spring AMQP + EventBus от Guava для автоматической регистрации Actor-подобных мессенджеров, используя EventBus от Guava для сопоставления с образцом полученных сообщений.
Сходство с Spring AMQP и Akka странное. SimpleMessageListenerContainer + MessageListener в Spring AMQP в значительной степени эквивалентен Actor.
Однако для всех намерений и целей RabbitMQ является более мощным, чем Akka, так как он имеет множество клиентских реализаций на разных языках, обеспечивает постоянство (долговременные очереди), топологическую маршрутизацию и подключаемые алгоритмы QoS.
Это значит, что Akka намного удобнее, и теоретически Akka может выполнить все вышеперечисленное, и некоторые люди написали расширения, но большинство просто используют Akka, а затем Akka доставляет сообщения через RabbitMQ. Также контейнер Spring AMQP SimpleMessageListener довольно тяжелый, и неясно, что произойдет, если вы создадите пару миллионов из них.
Оглядываясь назад, я хотел бы рассмотреть возможность использования Akka для RabbbitMQ вместо Spring AMQP для будущих проектов.
Лучший совет, который я могу предложить, поскольку я также прошел через тот же мыслительный процесс, когда Play 2.0 присоединился к Typesafe и начал больше использовать Akka, - это поиск "Модель актера".
Википедия - отличный ресурс - http://en.wikipedia.org/wiki/Actor_model. Он имеет список языков программирования, которые могут поддерживать модель актора, а также список структур (включая Akka), основанных на модели актера.
Проще говоря, модель Actor основана на концепции акторов в модели параллельных вычислений. Актеры не обязательно означают передачу сообщений, но в наиболее распространенных случаях использования акторы будут передавать сообщения (именно в этом и заключается сходство с rabbitMQ).
Вы также можете рассмотреть возможность использования Vertx, которая также является реактивной платформой http://vertx.io/
Там, где вы можете рассмотреть Verticle ( http://vertx.io/docs/vertx-core/java/), похожий на парадигму актера. И EventBus, похожий на Databus of Akka ( http://vertx.io/docs/vertx-core/java/)
Akka - это инструментарий и среда исполнения для создания параллельных и распределенных систем. Для этого Акка использует модель актера. Если вы ищете альтернативу для Akka, я думаю, что вы не можете найти полное решение, такое как Akka, потому что Akka имеет несколько функций, которые позволяют вам разрабатывать надежную параллельную и распределенную систему:
- Актер актер
- Актерская маршрутизация, надзор и мониторинг
- Асинхронный и неблокирующий обмен сообщениями
- Акка Кластер (для управления кластером)
- Постоянство Akka (для реализации источника событий, субъекта постоянства и обмена сообщениями At-Least-Once Delivery)
- Akka I / O (для связи по TCP и UDP)
- Акка HTTP (для связи HTTP как клиент или сервер)
- Akka Stream (для потоковой обработки)
- ...
Но я предлагаю взглянуть на Erlang/OTP и Quasar.
http://scalecube.io/ - библиотека микросервисов с малой задержкой. комплексное решение, которое позволит вам разработать надежную параллельную и распределенную систему.
Как Акка: - это основано на протоколе сплетен и плавания. - его сообщение, основанное на protobuf (полный дуплекс). - это для JVM. - низкая задержка и примерно в 6 раз быстрее. - использует RxJava, который оказался быстрее, чем потоки akka.
В отличие от Акки: - менее упрямый - не рамки. - не заставлять актерский паттерн как целостный паттерн.