amazon-web-services - signin - sms service
Kafka o SNS o algo más? (2)
Lo siento si es una pregunta para novatos. Pero estoy tratando de entender qué debería usar. Por lo que yo entiendo, Kafka es:
Apache Kafka es un sistema distribuido de mensajería de publicación y suscripción.
Y SNS también es un sistema de pub / sub.
Mi objetivo es utilizar algún sistema de mensajería de cola en AWS con una aplicación que se distribuirá en pocos servidores. Por cierto (el idioma principal es Python). Y debido a que está en Amazon, mi primer pensamiento fue usar SNS y SQS. Pero vi a mucha gente usando Kafka en AWS. ¿Cuáles son las ventajas una sobre otra?
Este es un intercambio clásico:
Herramientas de AWS (SQS, SNS)
Serán más fáciles de configurar y se integrarán con el resto de su arquitectura, especialmente si la mayoría ya se está ejecutando en AWS. Probablemente también sea más barato al principio, ya que tienen un buen modelo de pago por uso, pero el costo no se ampliará también, por lo que debes pensar en eso.
Apache Kafka
Aquí está utilizando un modelo PUB / SUB muy popular (no moderno) distribuido (esto es importante si cree que escalará mucho). Hoy en día, este modelo parece ser más preferido, ya que ejecutar analíticas sobre los datos que pasan por las tuberías es muy común, y generalmente con una arquitectura SOA puedes tener una multitud de pequeños servicios consumiendo los mensajes y haciendo eso, sin tener los datos ser eliminado de la cola. También tiene muchas opciones de configuración, por lo que, dependiendo de su caso de uso, puede ajustarlo a sus necesidades. Esto significa más trabajo, pero un servicio más optimizado en el futuro.
Resumen
Este es un clásico equilibrio entre la velocidad de desarrollo y la facilidad de desarrollo frente a la mejor solución, muy modular y personalizable, que tiene más sobrecarga para la primera implementación, pero se escala mejor.
Asesoramiento personal
Si estás creando prototipos de algo, favorece la velocidad de desarrollo, por lo que las herramientas de AWS. Si sus requisitos están congelados y requieren una escala significativa, definitivamente tómese el tiempo para usar kafka. También soy un gran creyente en el uso-open-source-makes-the-world-better, pero ese no es el mayor argumento para usar.
Los casos de uso para Kafka y Amazon SQS / Amazon SNS son bastante diferentes.
Kafka, como escribiste, es un sistema distribuido de publicación y suscripción. Está diseñado para un rendimiento muy elevado, procesando miles de mensajes por segundo. Por supuesto, necesita configurarlo y agruparlo usted mismo. Es compatible con múltiples lectores, que pueden "ponerse al día" con la secuencia de mensajes en cualquier momento (bueno, siempre y cuando los mensajes estén todavía en el disco). Puede usarlo como una cola (usando grupos de consumidores) y como un tema.
Una característica importante es que no puede reconocer selectivamente los mensajes como "procesados"; la única opción es reconocer todos los mensajes hasta un cierto desplazamiento.
SQS / SNS por otro lado:
- sin configuración / sin mantenimiento
- ya sea una cola (SQS) o un tema (SNS)
- varias limitaciones (en cuanto al tamaño, cuánto dura un mensaje, etc.)
- rendimiento limitado: puede realizar solicitudes por lotes y simultáneas, pero aun así lograr altos rendimientos sería costoso
- No estoy seguro si los mensajes se replican; sin embargo, al menos una vez la entrega de la garantía en SQS sugeriría
- SNS tiene notificaciones para correo electrónico, SMS, SQS, HTTP incorporado. Con Kafka, probablemente tendrías que codificarlo tú mismo
- sin concepto de "transmisión de mensajes"
En general, diría que SQS / SNS son adecuados para tareas más simples y cargas de trabajo con un menor volumen de mensajes.