Tenemos aplicaciones (RackSpace nube) Ruby y Java alojados en la nube que interactuarán de la siguiente manera:manera rápida y confiable para Clojure (Java) y Ruby aplicaciones para comunicarse
- Rubí aplicación envía una solicitud a Java aplicación. La solicitud consiste en una estructura de mapa que contiene cadenas, enteros, otros mapas y listas (análoga a JSON).
- La aplicación Java analiza los datos y envía una respuesta a la aplicación Ruby.
Estamos interesados en la evaluación de ambos formatos de mensajería (JSON, Buffer Protocols, Thrift, etc.), así como canales de transmisión de mensajes/técnicas (enchufes, colas de mensajes, RPC, REST, SOAP, etc.)
Nuestros criterios:
- corto tiempo de ida y vuelta.
- Baja desviación estándar del tiempo de ida y vuelta. (Entendemos que las pausas de recolección de basura y los picos de uso de la red pueden afectar este valor).
- Alta disponibilidad.
- Escalabilidad (es posible que deseemos tener varias instancias de la aplicación Ruby y Java intercambiando mensajes punto a punto en el futuro).
- Facilidad de depuración y creación de perfiles.
- Buena documentación y apoyo de la comunidad.
- Puntos de bonificación para el soporte de Clojure.
- Soporte de buen lenguaje dinámico.
¿Qué combinación de formato de mensaje y método de transmisión recomendaría? ¿Por qué?
que he reunido aquí algunos materiales que ya hemos recogido para su revisión:
- Comparison of various java serialization options
- Comparison of Thrift and Protocol Buffers (old)
- Comparison of various data interchange formats
- Comparison of Thrift and Protocol Buffers
- Fallacies of Protocol Buffers RPC features
- Discussion of RPC in the context of AMQP (Message-Queueing)
- Comparison of RPC and message-passing in distributed systems (pdf)
- Criticism of RPC from perspective of message-passing fan
- Overview of Avro from Ruby programmer perspective
- Overview of Thrift from Ruby programmer perspective
- Overview of Thrift from Java programmer perspective
- Introduction to MessagePack
- Introduction to BERT by dynamic language enthusiast
- Message Queue Evaluation Notes
- ZeroMQ and Clojure
Está seguro de querer fiabilidad (del título)? En el contexto de la clase de mensajes de la que está hablando, significa que los mensajes nunca se pierden (y posiblemente también que se entreguen en el orden en que se enviaron), lo cual es * muy * costoso. Por supuesto, la fiabilidad aquí se refiere a ser resistente incluso contra cosas como un ataque de retroexcavadora (es decir, la destrucción física de la red o la infraestructura de energía). En su mayoría prefiero tener una entrega oportuna y hacer que las aplicaciones sean resistentes a las fallas, porque eso es mucho más fácil ... –
Hola, queremos una confiabilidad razonablemente buena y no nos importa la entrega en pedido. Nuestro sistema puede tolerar fallas ocasionales, aunque es importante mantener la tasa de fallas bastante baja. – jkndrkn