Pregunta Buen caso de uso para Akka [cerrado]


He escuchado muchas alabanzas sobre Akka marco (plataforma de servicios de Java / Scala), pero hasta ahora no se han visto muchos ejemplos reales de casos de uso para los que sería bueno. Entonces me interesaría saber qué han usado los desarrolladores con éxito.

Solo una limitación: no incluya el caso de escribir un servidor de chat. (¿Por qué? ya que esto se ha usado en exceso como un ejemplo para muchas cosas similares)


557
2017-12-20 19:15


origen


Respuestas:


Lo he utilizado 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 en los automóviles en las carreteras), distribuidos en varios nodos, integrando mensajes entre varias partes, sistemas back-end confiables. No estoy en libertad de dar detalles sobre los clientes todavía, cuando obtengo el OK tal vez se puede agregar como referencia.

Akka realmente ha trabajado en esos proyectos, a pesar de que comenzamos cuando estaba en la versión 0.7. (estamos usando Scala por cierto)

Una de las grandes ventajas es la facilidad con la que puede componer un sistema a partir de actores y mensajes casi sin repetición, se escala extremadamente bien sin todas las complejidades del enhebrado enrollado a mano y obtiene mensajes asincrónicos entre objetos casi gratis.

Es muy bueno en el modelado de cualquier tipo de tratamiento de mensajes asincrónico. Preferiría escribir cualquier tipo de sistema de servicios (web) en este estilo que cualquier otro estilo. (¿Alguna vez trataste de escribir un servicio web asíncrono (en el lado del servidor) con JAX-WS? Eso es mucha fontanería). Por lo tanto, diría que cualquier sistema que no quiere colgar en uno de sus componentes porque todo se llama implícitamente utilizando métodos síncronos, y ese componente se está bloqueando en algo. Es muy estable y la solución de falla let-it-crash + supervisor realmente funciona bien. Todo es fácil de configurar de forma programática y no difícil de probar.

Luego están los excelentes módulos adicionales. El módulo Camel realmente se conecta bien con Akka y permite un desarrollo tan fácil de los servicios asíncronos 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.


299
2017-12-20 22:17



Descargo de responsabilidad: Yo soy el PO de Akka

Además de ofrecer una mezcla heterogénea de concurrencia que es mucho más simple de razonar y corregir (actores, agentes, concurrencia de flujo de datos) y con control de concurrencia en forma de STM.

Aquí hay algunos casos de uso que podría considerar:

  1. Procesamiento de transacciones (en línea juegos, finanzas, estadísticas, apuestas, redes sociales, telecomunicaciones, ...)
    • escalar, escalar, tolerancia a fallas / HA
  2. Servicio backend (cualquier industria, cualquier aplicación)
    • servicio REST, SOAP, cometd, etc.
    • actuar como eje de mensaje / capa de integración
    • escalar, escalar, tolerancia a fallas / HA
  3. Snap-in concurrency / parallelism (cualquier aplicación)
    • Correcto
    • Simple de trabajar y entender
    • Simplemente agregue las jarras a su proyecto de JVM existente (use Scala, Java, Groovy o JRuby)
  4. Procesamiento por lotes (cualquier industria)
    • Integración camello para conectar con fuentes de datos por lotes
    • Los actores dividen y conquistan las cargas de trabajo por lotes
  5. Centro de comunicaciones (telecomunicaciones, medios web, medios móviles)
    • escalar, escalar, tolerancia a fallas / HA
  6. Servidor de juego (juegos en línea, apuestas)
    • escalar, escalar, tolerancia a fallas / HA
  7. BI / minería de datos / crujido de propósito general
    • escalar, escalar, tolerancia a fallas / HA
  8. inserte otros casos de uso agradables aquí

210
2017-12-20 22:27



Un ejemplo de cómo lo usamos estaría en una cola de prioridad de transacciones de 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 de tipo CHECK, tenemos muy poco procesamiento, pero si se trata de un punto de venta, entonces hay mucho por hacer, como fusionarse con metadatos (categoría, etiqueta, etiquetas, etc.) y proporcionar servicios (alertas de correo electrónico / SMS, detección de fraude, bajo saldo de fondos, etc.). Según el tipo de entrada, componemos clases de varios rasgos (llamados mixins) necesarios para manejar el trabajo y luego realizar el trabajo. Todos estos trabajos entran en la misma cola en modo de tiempo real de diferentes instituciones financieras. Una vez que se limpian los datos, se envían a diferentes almacenes de datos para persistencia, análisis, o se los envía a una conexión de socket, o para levantar al actor del cometa. Los actores que trabajan constantemente equilibran la carga de forma automática para que podamos procesar los datos lo más rápido posible. También podemos incluir servicios adicionales, modelos de persistencia y  para puntos críticos de decisión.

El mensaje de estilo Erlang OTP que pasa en la JVM es un gran sistema para desarrollar sistemas en tiempo real sobre las bibliotecas y servidores de aplicaciones existentes.

Akka te permite hacer un mensaje que pasa como lo harías en una tradicional  pero con velocidad! También le brinda herramientas en el marco para administrar la gran cantidad de agrupaciones de actores, nodos remotos y tolerancia a fallas que necesita para su solución.


76
2017-12-20 22:16



Usamos Akka para procesar llamadas REST de forma asíncrona, junto con el servidor web asincrónico (basado en Netty) podemos lograr una mejora de 10 veces en la cantidad de usuarios atendidos por nodo / servidor, en comparación con el hilo tradicional por modelo de solicitud de usuario.

¡Dígale a su jefe que su factura de alojamiento de AWS se reducirá en un factor de 10 y es una obviedad! Shh ... no se lo digas a Amazon ... :)


41
2017-11-17 15:10



Si abstraes el nivel del servidor de chat, obtienes la respuesta.

Akka ofrece un sistema de mensajería similar a la mentalidad de Erlang de "dejar que se cuelgue".

Así que los ejemplos son cosas que necesitan distintos niveles de durabilidad y confiabilidad de los mensajes:

  • Servidor de chat
  • Capa de red para un MMO
  • Bomba de datos financieros
  • Sistema de notificación para una aplicación de iPhone / móvil / lo que sea
  • Servidor REST
  • Tal vez algo parecido a WebMachine (adivinar)

Las cosas buenas de Akka son las opciones que ofrece para la persistencia, es la implementación de STM, el servidor REST y la tolerancia a fallas.

No se enfade con el ejemplo de un servidor de chat, piense que es un ejemplo de una cierta clase de solución.

Con toda su excelente documentación, siento que una brecha es esta pregunta exacta, casos de uso y ejemplos. Teniendo en cuenta los ejemplos no son triviales.

(Escrito con solo experiencia de ver videos y jugar con la fuente, no he implementado nada usando akka).


36
2017-12-20 21:54



Estamos utilizando Akka en un proyecto Telco a gran escala (lamentablemente no puedo revelar muchos detalles). Los actores Akka se despliegan y se accede de forma remota mediante una aplicación web. De esta forma, tenemos un modelo de RPC simplificado basado en el protobuffer de Google y logramos el paralelismo con Akka Futures. Hasta ahora, este modelo ha funcionado brillantemente. Una nota: estamos usando la API de Java.


36
2017-12-21 12:34



Usamos Akka en varios proyectos en el trabajo, el más interesante de los cuales está relacionado con la reparación de accidentes automovilísticos. Principalmente en el Reino Unido, pero ahora se está expandiendo a los EE. UU., Asia, Australasia y Europa. Utilizamos actores para garantizar que la información de reparación de choques se proporcione en tiempo real para permitir la reparación segura y rentable de los vehículos.

La pregunta con Akka es realmente más '¿qué no puedes hacer con Akka'? Su capacidad para integrarse con marcos potentes, su poderosa abstracción y todos los aspectos de tolerancia a fallas lo convierten en un conjunto de herramientas muy completo.


23
2017-12-21 15:55



Puedes usar Akka para diferentes tipos de cosas.

Estaba trabajando en un sitio web, donde migré la pila de tecnología a Scala y Akka. Lo usamos para casi todo lo que sucedió en el sitio web. Aunque pienses que un ejemplo de chat es malo, todos son básicamente los mismos:

  • Actualizaciones en vivo en el sitio web (por ejemplo, visitas, Me gusta, ...)
  • Mostrando comentarios de usuarios en vivo
  • Servicios de notificación
  • Búsqueda y todos los demás tipos de servicios

Especialmente las actualizaciones en vivo son fáciles ya que se reducen a lo que es un ejemplo de chat. La parte de servicios es otro tema interesante porque puede elegir usar actores remotos e incluso si su aplicación no está agrupada, puede implementarla en diferentes máquinas con facilidad.

También estoy utilizando Akka para una aplicación de autorrutador de PCB con la idea de poder escalar desde una computadora portátil a un centro de datos. Mientras más poder le dé, mejor será el resultado. Esto es extremadamente difícil de implementar si intenta utilizar la simultaneidad habitual porque Akka también le brinda transparencia de ubicación.

Actualmente como proyecto de tiempo libre, estoy construyendo un marco web usando solo actores. Una vez más, los beneficios son la escalabilidad de una sola máquina a un conjunto completo de máquinas. Además, utilizar un enfoque basado en mensajes hace que su servicio de software se oriente desde el principio. Tiene todos esos componentes agradables, hablando entre sí, pero no necesariamente conociéndose entre sí, viviendo en la misma máquina, ni siquiera en el mismo centro de datos.

Y desde que Google Reader se apagó, comencé con un lector de RSS, usando Akka, por supuesto. Se trata de servicios encapsulados para mí. Como conclusión: el modelo de actor en sí mismo es lo que debe adoptar primero y Akka es un marco muy confiable que le ayuda a implementarlo con una gran cantidad de beneficios que recibirá en el camino.


23
2017-08-09 12:00



Estamos utilizando akka con su complemento camel para distribuir nuestro análisis y procesamiento de tendencias para twimpact.com. Tenemos que procesar entre 50 y 1000 mensajes por segundo. Además del procesamiento multinodo con camello, también se usa para distribuir trabajo en un solo procesador a varios trabajadores para obtener el máximo rendimiento. Funciona bastante bien, pero requiere cierta comprensión de cómo manejar las congestiones.


18
2017-12-21 13:10