¿Cuáles son los mejores casos de uso para el marco Akka [cerrado]
He oído muchas críticas sobre Akka. (plataforma de servicios Java/Scala), pero hasta ahora no he visto muchos ejemplos reales de casos de uso para los que sería bueno. Por eso me interesaría saber qué cosas los desarrolladores han utilizado con éxito.
Sólo una limitación: no incluya el caso de escribir un servidor de chat. (¿Por qué? Ya que esto se ha usado en exceso como ejemplo para muchas cosas similares)
Lo he usado hasta ahora en dos proyectos reales con mucho éxito. ambos están en el campo de información de tráfico casi en tiempo real (tráfico como el de los automóviles en las autopistas), distribuidos en varios nodos, integrando mensajes entre varias partes, sistemas backend confiables. Todavía no tengo la libertad de dar detalles sobre los clientes, cuando obtenga el visto bueno tal vez pueda agregarlo como referencia.
Akka realmente ha salido adelante en esos proyectos, a pesar de que comenzamos cuando estaba en la versión 0.7. (por cierto, estamos usando Scala)
Una de las grandes ventajas es la facilidad con la que se puede componer un sistema a partir de actores y mensajes casi sin repeticiones, se escala extremadamente bien sin todas las complejidades de los subprocesos hechos a mano y se obtiene el paso de mensajes asincrónicos entre objetos casi gratis.
Es muy bueno para modelar cualquier tipo de manejo de mensajes asincrónicos. Preferiría escribir cualquier tipo de sistema de servicios (web) en este estilo que en cualquier otro estilo. (¿Alguna vez ha intentado escribir un servicio web asincrónico (del lado del servidor) con JAX-WS? Eso es mucho trabajo). Entonces, diría que cualquier sistema que no quiera bloquear uno de sus componentes porque todo se llama implícitamente usando métodos sincrónicos, y ese componente está bloqueando algo. Es muy estable y la solución de falla let-it-crash + supervisor realmente funciona bien. Todo es fácil de configurar mediante programación y no es difícil realizar pruebas unitarias.
Luego están los excelentes módulos complementarios. El módulo Camel realmente se conecta bien con Akka y permite un desarrollo tan sencillo de servicios asincrónicos con puntos finales configurables.
Estoy muy contento con el marco y se está convirtiendo en un estándar de facto para los sistemas conectados que construimos.
Descargo de responsabilidad: soy el PO de Akka
Además de ofrecer una mezcla heterogénea de concurrencia sobre la que es mucho más sencillo razonar y corregir (actores, agentes, concurrencia de flujo de datos) y con control de concurrencia en forma de STM.
A continuación se muestran algunos casos de uso que podría considerar:
- Procesamiento de transacciones (juegos en línea, finanzas, estadísticas, apuestas, redes sociales, telecomunicaciones,...)
- ampliación, ampliación, tolerancia a fallos/HA
- Backend de servicio (cualquier industria, cualquier aplicación)
- servicio REST, SOAP, cometd etc
- actuar como centro de mensajes/capa de integración
- ampliación, ampliación, tolerancia a fallos/HA
- Simultaneidad/paralelismo de complementos (cualquier aplicación)
- Correcto
- Fácil de trabajar y entender.
- Simplemente agregue los archivos jar a su proyecto JVM existente (use Scala, Java, Groovy o JRuby)
- Procesamiento por lotes (cualquier industria)
- Integración de Camel para conectarse con fuentes de datos por lotes
- Los actores dividen y conquistan las cargas de trabajo por lotes
- Centro de comunicaciones (telecomunicaciones, medios web, medios móviles)
- ampliación, ampliación, tolerancia a fallos/HA
- Servidor de juegos (juegos en línea, apuestas)
- ampliación, ampliación, tolerancia a fallos/HA
- BI/minería de datos/procesamiento de propósito general
- ampliación, ampliación, tolerancia a fallos/HA
- inserte otros buenos casos de uso aquí
Un ejemplo de cómo lo usamos sería en una cola prioritaria de transacciones con tarjeta de débito/crédito. Tenemos millones de estos y el esfuerzo del trabajo depende del tipo de cadena de entrada. Si la transacción es del tipo CHECK tenemos muy poco procesamiento pero si es un punto de venta entonces hay mucho que hacer, como fusionar metadatos (categoría, etiqueta, etiquetas, etc.) y brindar servicios (alertas por correo electrónico/sms, detección de fraude, saldo de fondos bajo, etc.). Según el tipo de entrada, componemos clases de varios rasgos (llamados mixins) necesarios para manejar el trabajo y luego realizarlo. Todos estos trabajos llegan a la misma cola en modo de tiempo real desde diferentes instituciones financieras. Una vez que se limpian los datos, se envían a diferentes almacenes de datos para su persistencia, análisis o se envían a una conexión de socket o al actor Lift Comet. Los actores que trabajan constantemente equilibran la carga del trabajo para que podamos procesar los datos lo más rápido posible. También podemos incorporar servicios adicionales, modelos de persistencia ystmpara puntos críticos de decisión.
El mensaje estilo Erlang OTP que se transmite a la JVM es un excelente sistema para desarrollar sistemas en tiempo real sobre los hombros de bibliotecas y servidores de aplicaciones existentes.
Akka te permite pasar mensajes como lo harías en un sistema tradicional.esb¡pero con velocidad! También le brinda herramientas en el marco para administrar la gran cantidad de grupos de actores, nodos remotos y tolerancia a fallas que necesita para su solución.