3 años más tarde, una nota para las personas que navegan por aquí. Piensa por QUÉ quieres usar el middleware de colas de mensajes. Si la razón es para distribuir las tareas dentro de un grupo, mira Celery. Funciona a un nivel de abstracción superior al de las soluciones de estilo MQ, utiliza RabbitMQ para mover mensajes, pero tiene un excelente soporte para la semántica específica de tareas. Ndash Chris Johnson Aug 28 13 at 20:22 17 Respuestas Editar sección Mi respuesta inicial tenía un fuerte enfoque en AMQP. Decidí reescribirlo para ofrecer una visión más amplia sobre el tema. Estas 3 tecnologías de mensajería tienen diferentes enfoques en la construcción de sistemas distribuidos: RabbitMQ es una de las principales implementación del protocolo AMQP (junto con Apache Qpid). Por lo tanto, implementa una arquitectura de intermediario, lo que significa que los mensajes se colocan en cola en un nodo central antes de ser enviados a los clientes. Este enfoque hace que RabbitMQ sea muy fácil de usar e implementar, ya que los escenarios avanzados como enrutamiento, equilibrio de carga o colas persistentes de mensajes se admiten en sólo unas pocas líneas de código. Sin embargo, también lo hace menos escalable y lento porque el nodo central añade latencia y los sobres de mensaje son bastante grandes. ZeroMq es un sistema de mensajería muy ligero especialmente diseñado para escenarios de alto rendimiento / baja latencia como el que se puede encontrar en el mundo financiero. Zmq soporta muchos escenarios avanzados de mensajería, pero a diferencia de RabbitMQ, tendrás que implementar la mayoría de ellos tú mismo combinando varias piezas del framework (por ejemplo, sockets y dispositivos). Zmq es muy flexible pero tendrás que estudiar las 80 páginas de la guía (que recomiendo leer para cualquiera que escribe un sistema distribuido, incluso si no usas Zmq) antes de poder hacer algo más complicado que enviar mensajes entre 2 pares. ActiveMQ se encuentra en el medio. Al igual que Zmq, se puede implementar con topologías tanto de broker como de P2P. Al igual que RabbitMQ, su más fácil de implementar escenarios avanzados, pero por lo general a costa de rendimiento bruto. Es el cuchillo suizo de la mensajería :-). Finalmente, los 3 productos: tienen apis de cliente para los idiomas más comunes (C, Java, Net, Python, Php, Ruby,) tienen una documentación sólida son activamente soportados Reply Nov 6 09 at 13:46 Nawaz 206k 9679 64 9679 454 9679 659 Si bien es cierto, no estoy seguro si la adopción de AMQP tiene una fuerte correlación con la pregunta original. Creo que hay consideraciones más importantes para la elección de una cola de mensajes que el protocolo de cable subyacente que utiliza. Ndash StaxMan May 13 10 at 22:26 La pregunta no menciona requerir AMQP, pero esta respuesta se centra en AMQP. Si tuviéramos que asumir JMS como un requisito, entonces la respuesta sería básicamente la inversa: ActiveMQ es más popular, RabbitMQ tiene cierto apoyo que probablemente debería funcionar. Si no se asume ningún protocolo de cable: vea otras respuestas. Ndash Fletch Dec 2 10 at 10:53 Después de haber trabajado en RabbitMQ y ActiveMQ le recomendaría que se mantenga alejado de ActiveMQ. Los lanzamientos son muy buggy, y yo no tenía ningún final de problemas con las máquinas que bajan y fugas de memoria, etc RabbitMQ por otro lado sólo funciona. Después de conectarlo, nunca he tenido que mirarlo de nuevo. Simplemente hace lo que necesita. Si te gusta Tengo un simple tutorial de RabbitMQ en mi blog Servidor de cola de mensajes Los servidores de cola de mensajes están disponibles en varios idiomas: Erlang (RabbitMQ), C (beanstalkd), C Ruby (Starling o Sparrow), Scala (Kestrel, Kafka) o Java (ActiveMQ). Un breve resumen se puede encontrar aquí escrito por Alex MacCaw Sparrow es una cola de peso ligero escrito en Ruby que habla memcache escrito por Blaine Cook en Twitter Starling es un servidor Message Queue basado en MemCached escrito en Ruby almacena trabajos en la memoria (cola de mensajes) Algunos buenos tutoriales, por ejemplo el railscast sobre starling y workling o esta entrada de blog sobre starling escrito por Robey Pointer Starling clon escrito en Scala (un puerto de Starling de Ruby a Scala) Las colas se almacenan en la memoria, pero conectado en el disco RabbitMQ es un Message Queue Server en Erlang almacena los trabajos en la memoria (cola de mensajes) ActiveMQ es un corredor de mensajes de código abierto en Java escrito por Philotic, Inc. para mejorar el tiempo de respuesta de una aplicación de Facebook en la memoria del servicio de workqueue escrito en C Docu: nubyonrails / Escrito en LinkedIn en Scala Utilizado por LinkedIn para descargar el procesamiento de todas las páginas y otras vistas De forma predeterminada a utilizar la persistencia, utiliza caché de disco del sistema operativo para los datos en caliente (tiene un rendimiento más alto que cualquiera de los siguientes) Con la persistencia activada) Soporta tanto en línea como fuera de línea de procesamiento La biblioteca de socket que actúa como un marco de concurrencia Más rápido que TCP, para productos en clúster y supercomputación Lleva mensajes a través de inproc, IPC, TCP y multicast Conectar N a N A través de fanout, pubsub, pipeline, E / S de Asynch de solicitud de respuesta para aplicaciones escalables de mensajes multicore EagleMQ es un gestor de colas de código abierto, de alto rendimiento y ligero. Escrito en C Almacena todos los datos en la memoria y admite la persistencia. Tiene su propio protocolo. Soporta trabajo con colas, rutas y canales. IronMQ escrito en Go Servicio de cola completamente administrado Disponible tanto como versión en la nube como en el local Espero que esto sea útil para nosotros. Fuente Michael - quiero elaborar un poco más El problema es la entrega en tiempo real en un sistema de chat en grupo. Si entiendo correctamente, usted está hablando de un mecanismo duradero de almacenamiento de mensajes como un punto final (bandeja de entrada). Si es así, entonces no encaja en la factura, quieren que el chat se entregue de inmediato y los clientes sean suscriptores directos. Tener un montón de colas de tema basado no es un caso de uso optimizado ndash Josh Oct 16 10 at 20:38 Realmente depende de su caso de uso. Comparar 0MQ con ActiveMQ o RabbitMQ no es justo. ActiveMQ y RabbitMQ son sistemas de mensajería que requieren instalación y administración. Ofrecen featurewise mucho más que ZeroMQ. Tienen colas persistentes verdaderas, ayuda para las transacciones etc. ZeroMQ es una aplicación ligera orientada mensaje del zócalo. También es adecuado para la programación asincrónica en proceso. Es posible ejecutar un Enterprise Messaging System sobre ZeroMQ, pero tendrías que implementar un montón por tu cuenta. ActiveMQ, RabbitMQ, Websphere MQ y MSMQ son colas de mensajes empresariales ZeroMQ es una biblioteca orientada a mensajes IPC. Theres una comparación entre RabbitMQ y ActiveMQ aquí. Out of the box, ActiveMQ está configurado para garantizar la entrega de mensajes - lo que puede dar la impresión de su lento en comparación con los sistemas de mensajería menos fiables. Siempre puede cambiar la configuración de rendimiento si lo desea y obtener al menos un rendimiento tan bueno como cualquier otro sistema de mensajería. Al menos tienes esa opción. Theres una gran cantidad de información sobre los foros y el FAQ ActiveMQ para la configuración de escalado, rendimiento y alta disponibilidad. Además, ActiveMQ soportará AMQP 1.0 cuando se complete la especificación, junto con otros formatos de cable, como STOMP. Otra ventaja para ActiveMQ es su proyecto Apache, por lo que hay diversidad en la comunidad de desarrolladores y no está vinculada a una empresa. No he utilizado ActiveMQ o RabbitMQ pero he utilizado ZeroMQ. La gran diferencia que yo veo entre ZeroMQ y ActiveMQ, etc es que 0MQ es sin corretaje y no tiene construido en fiabilidad para la entrega de mensajes. Si está buscando una API de mensajería fácil de usar que soporte muchos patrones de mensajería, transportes, plataformas y enlaces de idiomas, entonces 0MQ definitivamente vale la pena mirar. Si está buscando una plataforma de mensajería completa, entonces 0MQ puede no encajar en la factura. Vea zeromq. org/docs:cookbook para ver ejemplos de cómo se puede usar 0MQ. I con éxito usando 0MQ para el paso del mensaje en una aplicación de la supervisión del uso de la electricidad (ve rwscott. co. uk/2010/06/14/currentcost-envi-cc128-part-1/) contestó el 24 de agosto 10 en 7:28 Im using zeroMQ . Quería un simple sistema de paso de mensajes y no necesito la complicación de un corredor. Yo también no quiero un sistema de gran empresa orientada a Java. Si quieres un sistema rápido y sencillo y necesitas soportar múltiples idiomas (yo uso C y. net) entonces yo recomiendo mirar 0MQ. Respondió Jul 28 10 at 16:18 También usando ZMQ en C / C ambiente. Muy rapido. Usando el patrón del corredor. Un buen ajuste para nuestra aplicación VOIP watch-dog en tiempo real haciendo micro-pmts para granjas de servidores kamailio SIP. Estoy bastante seguro de que podría escribir un corredor muy sofisticado utilizando ZMQ, pero evaluar algunos productos adicionales antes de comprometerse con eso. Ndash RocketRoy Nov 7 13 at 6:26 Sólo puedo añadir mis 2 centavos sobre ActiveMQ, pero ya que este es uno de los más populares: El idioma en el que desea escribir puede ser importante. Aunque ActiveMQ tiene un cliente para la mayoría, su implementación C está lejos de ser completa en comparación con la biblioteca Java. Esto significa que algunas funcionalidades básicas son flaky (fall-over el protocolo que bien falla en algunos casos, no hay soporte de redelivery) y otros simplemente no está allí. Desde. NET no parece ser tan importante para el proyecto, el desarrollo es bastante lento y no parece ser ningún plan de liberación. Tronco a menudo se rompe por lo que si usted considera esto, es posible que desee considerar la posibilidad de contribuir al proyecto si desea que las cosas van adelante. Luego está ActiveMQ en sí que tiene un montón de características agradables, pero algunos temas muy extraño también. Utilizamos la versión Fuse (Progreso) de activemq por razones de estabilidad, pero aún así hay un par de bichos extraños que usted quiere tener en cuenta: Corredores que dejan de enviar mensajes en algunas ocasiones Diario Errores haciendo la cola muestran mensajes que no están allí (Que no se entregan al consumidor, pero aún) La prioridad todavía no se aplica (está en la lista de temas desde el comienzo de la especie humana), etc, etc. Todo y todo, es un producto bastante bueno SI usted puede vivir con su Problemas: A) no tienen miedo de involucrarse activamente cuando se utiliza. NET B) desarrollar en java -) respondió Oct 29 09 at 9:47 Minor Update: Desde hace un tiempo, KahaDB es la tienda de persistencia por defecto para ActiveMQ. Sin embargo: no es estable en absoluto. En nuestras pruebas, hemos visto la corrupción de bases de datos (algunos restaurables, otros nos cuesta aproximadamente 15.000.000 mensajes) CUIDADO DE ESTE ndash Noctris Apr 4 11 at 8:25 ZeroMQ es realmente con cero colas Es un error realmente No tiene colas , Temas, persistencia, nada Es sólo un middleware para sockets API. Si es lo que busca, de lo contrario olvídese de que no es como activeMQ o rabbitmq. Hay una comparación de las características y el rendimiento de RabbitMQ ActiveMQ y QPID dado en bhavin. directi / rabbitmq-vs-apache-activemq-vs-apache-qpid / Personalmente he intentado todos los tres anteriores. RabbitMQ es el mejor rendimiento de acuerdo a mí, pero no tiene opciones de recuperación y conmutación por error. ActiveMQ tiene la mayoría de las características, pero es más lento. Actualizar. HornetQ también es una opción que puede buscar, es JMS queja, una opción mejor que ActiveMQ si está buscando una solución basada en JMS. Respondió 23 de agosto a las 11:05 escribí sobre mi experiencia inicial con respecto a AMQP, Qpid y ZeroMQ aquí: ron. shoutboot / 2010/09/25 / is-ampq-for-you / Mi opinión subjetiva es que AMQP está bien si usted Realmente necesita las instalaciones de mensajería persistente y no está demasiado preocupado de que el corredor puede ser un cuello de botella. Además, el cliente C está actualmente desaparecido para AMQP (Qpid no ganó mi apoyo no estoy seguro sobre el cliente ActiveMQ sin embargo), pero tal vez el trabajo en curso. ZeroMQ puede ser de otra manera. He utilizado ActiveMQ en un entorno de producción durante unos 3 años. Mientras que consigue el trabajo hecho, alineando versiones de las bibliotecas del cliente que funcionan correctamente y son sin errores puede ser un problema. Estamos buscando actualmente la transición a RabbitMQ. Respondió May 14 11 at 18:12 Hay alguna discusión en los comentarios de esta entrada del blog. Sobre Twitter escribiendo su propia cola de mensajes, lo cual puede ser interesante. Steve hizo extensa carga y prueba de estrés de ActiveMQ, RabbitMQ, etc ActiveMQ es realmente muy lento (mucho más lento que Kestrel), RabbitMQ constantemente se bloquea con demasiados productores y muy pocos consumidores. Usted probablemente no tendrá Twitter-como la carga inicialmente sin embargo :) respondió Apr 8 09 at 20:33 Pocas aplicaciones tienen tantas configuraciones de ajuste como ActiveMQ. Algunas características que destacan ActiveMQ son: Tamaño Prefetch configurable. Enhebrado configurable. Failover configurable. Notificación administrativa configurable a los productores. Detalles en: respondió Jul 20 10 at 19:17 Abie, todo se reduce a su caso de uso. En lugar de depender de alguien que tenga en cuenta su caso de uso, no dude en publicar su caso de uso en la lista rabbitmq-discussion. Pedir en twitter te dará algunas respuestas también. Mis mejores deseos, alexis respondió May 18 09 at 13:07 Acerca de ZeroMQ aka 0MQ, como ya sabrás, es el que te obtendrá la mayoría de los mensajes por segundo (eran alrededor de 4 millones por segundo en su servidor de ref la última vez que Comprobado), pero como usted también podría saber, la documentación es inexistente. Tendrá dificultades para encontrar cómo iniciar el servidor (s), y mucho menos cómo usarlos. Supongo que es en parte por qué nadie contribuyó sobre 0MQ todavía. Respondió May 15 10 at 3:06 Hay ejemplos en el libro de cocina zeromq. org/docs:cookbook y hay un manual api. zeromq. org/zmq. html. Ndash Nick Jul 28 10 at 16:13 while zmq es rápido y tiene un api fácil, tenga en cuenta esto: sin persistencia, sin transacciones. No hay detección de consumidores falidos o lentos (los mensajes simplemente se descartan sin ninguna notificación al programa de productores). Sidenote: zmq es serverless, por lo que won39t encontrar documentos para iniciar los servidores. Tienen un servidor proxy si tienes necesidad de algo así. Ndash nos Jul 28 10 at 16:33 Si usted también está interesado en las implementaciones comerciales, usted debe echar un vistazo a Nirvana de mi-canales. Nirvana se utiliza en gran medida dentro de la industria de Servicios Financieros para las plataformas de distribución de precios y de transacciones de baja latencia a gran escala. Hay soporte para una amplia gama de lenguajes de programación de clientes en los dominios empresarial, web y móvil. Las capacidades de agrupamiento son extremadamente avanzadas y merecen la pena ver si HA transparente o balanceo de carga es importante para usted. Nirvana es libre de descargar para propósitos de desarrollo. En los datos de copiado de redes de alto rendimiento se considera perjudicial para el rendimiento y se evita tanto como sea posible. La técnica de evitar todas las copias se conoce como quotzero-copyquot. Este artículo demuestra el impacto de una sola copia de los datos en latencia. Se muestra, por ejemplo, que para 256 MB de datos, una sola copia puede aumentar la latencia en 0,1 segundos Obviamente, los datos se copian de la memoria a la tarjeta de interfaz de red y viceversa, se copian en el espacio de usuario / Linux Journal da una explicación detallada de lo que está pasando bajo el capó del sistema operativo y cuáles son las maneras de acercarse lo más posible a la copia cero. Sin embargo, en este blog vamos a discutir sólo una sola instancia de copiar los datos, es decir, copiar datos de usuario en mensajes MQ. Considere el siguiente ejemplo. Bueno, crear un mensaje de millones de bytes de largo y copiar los datos de usuario en él antes de enviar: La parte memcpy parece sospechoso. Tenemos los datos en el búfer ya, ¿por qué no enviar el búfer en sí en lugar de copiarlo en el mensaje es MQ capaz de tal cosa En realidad, sí. Lo es y lo ha sido siempre. Todo lo que tenemos que hacer es definir la función de desasignación para el búfer y pasarlo a MQ junto con el búfer: Una vez definida la función de desasignación, podemos crear un mensaje quotzero-copyquot y pasarle la función buffer y deallocation: Tenga en cuenta que el buffer Es ahora propiedad del mensaje. Se desasignará una vez que se envíe el mensaje. No debemos desasignar el búfer también. Observe también el parámetro de sugerencia. Se puede utilizar si se utiliza un mecanismo de asignación más complejo. Digamos que hemos asignado el fragmento usando algún objeto quotallocatorquot y tenemos que desasignarlo a través del mismo objeto. En tal caso, podemos pasar el puntero al asignador como una sugerencia a zmqmsginitdata y modificar la función de asignación de la siguiente manera: Weve se deshizo de la copia, bien Bueno, no por completo. En algunos casos lo anterior puede funcionar. En otros casos es insuficiente. Consideremos el caso cuando tenemos dos matrices grandes 8212 cada 100MB largo 8212 que queremos transferir. Desafortunadamente no son contiguos en la memoria. Cada uno fue asignado usando la invocación de malloc separada y por lo tanto no podemos describir ambos usando un solo puntero de datos. ¿Por qué no enviarlos como dos mensajes separados y luego considerar el socket REQ. Se carga mensajes de saldos. En otras palabras, si hay dos conectores REP conectados a él, el envío de dos mensajes daría como resultado que la primera matriz se envíe a un socket REP mientras que el segundo al otro socket REP. Esto no es lo que queremos. Queremos que las dos matrices formen una unidad atómica de transferencia. Nunca deben ser separados. Parece que en este caso necesitamos algo equivalente a las matrices de recopilación POSIX. Para aquellos que no están familiarizados con la API de socket de Berkeley, la matriz de recopilación es una matriz de fragmentos de datos enviados a la pila de red mediante una sola llamada. Pero que cuenta de todos los posibles escenarios Theres todavía un escenario donde no va a ayudar. Es decir, cuando las dos matrices no existen al mismo tiempo. Primero se crea, se envía y se desasigna, luego el segundo. En tal caso, la matriz de recopilación sería inútil. Theres ningún punto único en el tiempo cuando poseemos todos los datos y por lo tanto son capaces de llenar la matriz de recopilación. La nueva característica de MQ llamada quotmulti-part messagequot resuelve el problema. Para decirlo simplemente, le permite concatenar varios mensajes en un único mensaje: Parece casi exactamente como si estuviera enviando dos mensajes separados, excepto para pasar ZMQSNDMORE bandera a la primera enviar. El punto importante a tener en cuenta es que aunque todas las partes del mensaje se tratan como una sola unidad atómica de transferencia, los límites entre las partes del mensaje se conservan estrictamente. En otras palabras, si envía un mensaje que consta de dos partes de mensaje, cada 100 bytes de largo, en el otro lado nunca recibirá una sola parte de mensaje de 200 bytes de largo. O dos partes de mensaje, 50 y 150 bytes de largo. O incluso cuatro partes de mensaje, cada 50 bytes de largo. Obtendrá exactamente lo que ha enviado 8212 dos partes de mensaje, cada 100 bytes de largo en el mismo orden en que fueron enviados. Este hecho permite usar mensajes de varias partes para agregar estructura de grano grueso a su mensaje. El ejemplo con dos matrices ilustra el punto. Envíe las dos matrices como dos partes de mensaje y así evitar la copia. Sin embargo, al mismo tiempo, las matrices están separadas de forma limpia, cada una de ellas residiendo en su propia parte de mensaje y se garantiza que la separación se mantendrá incluso en el lado receptor. En consecuencia, usted no tiene que poner el tamaño de la matriz en el mensaje o inventar cualquier tipo de delimitadores quotmatrix. Otro uso interesante de los mensajes de varias partes es combinarlos con los zócalos PUB / SUB. El patrón de mensajería de publicación / suscripción permite suscribirse a un subconjunto particular de mensajes. La suscripción es un pedazo de los datos suministrados por el receptor, diciendo quotplease, me envían todos los mensajes que comienzan con estos datos: Obviamente, el remitente tiene que colocar los datos apropiados al principio del mensaje para hacerlo entregado al suscriptor específico: La parte de El mensaje que se comprueba contra las suscripciones se llama tema. En nuestro caso el tema es quotABCquot. Cuando el tema es de longitud variable que necesita un delimitador para separar es del resto del mensaje, por lo que el mecanismo de suscripción doesnt incidentalmente considerar el inicio de los datos para ser una continuación del tema. El ejemplo siguiente utiliza el símbolo del quotpipequot como delimitador: Mientras que esto trabaja, su un poco feo. Aún más importante, si el tema pasa a ser datos binarios, theres ningún símbolo de repuesto que podemos utilizar como el delimitador. La solución elegante es utilizar un mensaje de dos partes. Las suscripciones siempre se evalúan sólo en la primera parte del mensaje, por lo que podemos colocar el tema en la primera parte del mensaje mientras el resto de los datos en el segundo (o incluso en varias partes del mensaje posterior): Una observación final. Al recibir un mensaje puede saber que cada mensaje consta de dos partes, digamos quottopicquot y quotvaluequot. Sin embargo, en otros escenarios puede que no tenga idea de cuántas partes de mensajes hay en el mensaje. En tal caso, MQ le permite preguntar al socket si hay más partes del mensaje que se deben recibir o no. Esto se hace usando ZMQRCVMORE opción de socket: Escrito: 08 de mayo de 2010 09:58 Revisado: 01 de agosto 2012 10:33 Si encontró esta página útil, por favor calificarlo para que otros lo encontrarán. Código fuente La vinculación de Java requiere una versión reciente De 0MQ, que puede descargar desde el área de descarga. O la última versión de desarrollo, que puede descargar y construir desde el repositorio github. Construir e instalar plataformas similares a UNIX Obtenga el código fuente jzmq clonando el git jzmq o usando la función de descarga de githubs y luego haga lo siguiente: En Linux debe ejecutar el comando ldconfig como root después de ejecutar make install para asegurarse de que la caché de la biblioteca del sistema actualizado. Asegúrese de que ha establecido el Java ClassPath en el directorio donde residen las clases MQ. Por último, para que Java encuentre las bibliotecas compartidas libzmq y libjzmq, debe asegurarse de que java. library. path se establece en el directorio donde se instalan (normalmente / usr / local / lib en sistemas similares a UNIX). Ejemplo de línea de comandos para ejecutar un programa de prueba de Java en Linux: Fedora Instrucciones específicas de Fedora de Steven McCoy en la lista de correo: Lista de correos de informes de errores
Análisis Técnico Promedios Las medias móviles se utilizan para suavizar las oscilaciones a corto plazo para obtener una mejor indicación de la tendencia de los precios. Los promedios son indicadores que siguen las tendencias. Una media móvil de precios diarios es el precio medio de una acción durante un período determinado, que se muestra día a día. Para calcular el promedio, usted tiene que elegir un período de tiempo. La elección de un período de tiempo es siempre una reflexión sobre, más o menos lag en relación con el precio en comparación con un mayor o menor suavizado de los datos de precios. Los promedios de los precios se utilizan como indicadores de tendencia tras los indicadores y, principalmente, como referencia para el soporte de precios y la resistencia. En general, los promedios están presentes en todo tipo de fórmulas para suavizar los datos. Oferta especial: quotCaptura de ganancias con análisis técnico Media simple de movimiento Una media móvil simple se calcula sumando...
Comments
Post a Comment