40 votos

¿Qué tan rápido es QuickFix ?

En mi empresa estamos comenzando un nuevo SGR (Sistema de Gestión de pedidos) proyecto y hay un debate sobre si la utilizamos Quickfix o vamos por un profesional de la revisión del motor? Porque no es una duda habitual que QuickFix no es lo suficiente rápido y obviamente no vamos a obtener ningún soporte técnico. He oído que en BOVESPA ha sido utilizado por un tiempo. Están cambiando con un pago ahora. Bueno, eso es suficiente para mí. Si el uso que la voy a usar.

Debo elegir un profesional de más de QuickFix? No es lo suficientemente bueno?

31voto

slhck Puntos 433

En orden a responder a su pregunta (para usted) usted necesita algo para comparar. Necesitaría números para saber si es más lento/más rápido, cuánto, y si tendrá un impacto en su sistema en general. También conocer sus objetivos de rendimiento podría reducir las opciones.

Mi consejo es tomar un vistazo a su arquitectura general del sistema tiene o pretende construir. A mirar QuickFIX es bastante sentido sin el toda la cadena involucrada en el procesamiento de la información y reaccionar frente a ella. Como ejemplo, decir QuickFIX es 100 veces más rápido que alguna parte (en la cadena de procesamiento) tiene o construir. Ahora, en sustitución de QuickFIX con otra parte que es 100 veces más rápido que QuickFIX no cambiaría nada porque aún está retenido por el punto de más lento. Y recuerde que los saltos de red normalmente es muy caro en comparación con el procesamiento de la memoria de datos.

Si por alguna razón no se pueden comparar los diferentes candidatos, uno contra el otro, ¿por qué no comenzar con, por ejemplo, QuickFIX, pero hacer que el sistema de tal manera que puede ser sustituido por algo más rápido después.

Generalmente hablando, QuickFIX no es la opción más rápida, pero el punto clave es que podría no ser así. Si el rendimiento es muy crítico y uno tiene recursos, que por lo general terminan comprando algo o la construcción de algo por sí mismo. Inconvenientes aquí tiene recursos como tiempo, dinero y gente experta.

Para responder a su pregunta mejor que uno necesitaría para conocer otros aspectos como los recursos disponibles (dinero, tiempo, habilidad), en general descripción general del sistema, las expectativas de rendimiento y otros factores que limitan las decisiones. E. g. si el dinero no es un factor limitante, acaba de encontrar la opción más rápida y comprarlo.

20voto

Adam Robinson Puntos 128

Yo trabajo en un gran hedge fund y nuestra DMA está enteramente basado en la quickfixj con cientos de operaciones de un día y miles de rellenos.

Quickfixj se encuentra al final de la OMS conectar a varias entidades de contrapartida y está en uso desde el 2009, creo. Número de órdenes varían, posiblemente 150-450 un día y que, obviamente, mucho más llena que viene de vuelta de ese número. La latencia de una orden de entrar a la OMS para la revisión mensaje que se envía es quizás 150ms-no estamos apuntando a ser de baja latencia a todos aunque.

El uso de quickfixj es absolutamente libre de dolor.

14voto

Greg Hurlman Puntos 10944

¿Qué tan rápido usted necesita? Has medido tiempos de ida y vuelta a la bolsa y determina que usted necesita una solución mejor?

Yo no llamaría a QuickFix rápido; tiene un montón de sobrecarga innecesaria (objetos temporales, temporales de cadenas de caracteres, funciones anidadas, etc). Pero lo he utilizado en los proyectos antes sin demasiados problemas.

En definitiva, es posible hacer mucho más rápida de ARREGLAR el motor desde cero. Usted puede utilizar descriptores de acceso en línea, llame a writev() en lugar de concatenación de cadenas, etc. Luego hay los requisitos de la norma, como la reproducción de viejos REVISIÓN de los mensajes o el manejo de varios valores por una clave. Es un montón de trabajo para hacer algo como eso correctamente, por lo que tendrás que evaluar cuánto dolor que usted está dispuesto a ir a través de.

No he utilizado ninguna de las commercial off-the-self motores; esperemos que alguien más puede intervenir con una recomendación específica hay. Lo ideal es que el costo de lo que será una fracción de hacerlo en casa.

10voto

jimluschen Puntos 1

No he probado QuickFIX rendimiento, pero pensé que me gustaría compartir las cifras de rendimiento de dos de código abierto REVISIÓN de los motores que he escrito.

Libtrading, una REVISIÓN del motor escrito en C, tiene 16 µs tiempo de ida y vuelta para NewOrderSingle-ExecutionReport prueba de ping-pong. La prueba se ejecuta en una 2-forma de 2.7 GHz Sandy Bridge i7 CPU corriendo Fedora 19 con Linux 3.11.6 con el cliente y el servidor se ejecuta en la misma máquina. Las cifras incluyen el tiempo dedicado en Linux pila TCP/IP que es de alrededor de 5 µs RTT en la máquina. Esto se traduce en aproximadamente 6 µs sobrecarga por mensaje FIX.

Falcon, experimental, REVISIÓN de motor, escrito en Java, tiene 23 µs tiempo de ida y vuelta para una prueba similar donde el servidor es realmente proporcionada por libtrading. Este es de alrededor de 9 µs por mensaje de sobrecarga que es un 50% más que el C REVISIÓN del motor.

8voto

MikeeMike Puntos 924

Quickfix derivado con un gran número de optimizaciones, mucho más rápido que la versión actual, especialmente para los mensajes cortos. Incluye la aplicación de ejemplo de que las medidas de latencia en la interfaz de bucle invertido.

https://github.com/akorobka/quickfix/tree/quickerfix

Resumen de las mejoras

Hay varias cosas que tienen un impacto adverso en el desempeño de la actual implementación de referencia.

La mayoría de ellos tienen que ver con una gran cantidad de despedidos objeto de copia, las conversiones de tipo implícito y pequeño bloque de asignaciones de memoria. Estos cambios intentar reducir estos tanto como sea posible a través de un rediseño del objeto, el uso más eficiente de campo de los contenedores (Boost, Google Sparsehash) con una piscina de asignación y racionalización de Tx/Rx de tuberías.

Otros cambios son básicamente la fuerza bruta de las optimizaciones con un uso más eficiente de la serialización/deserialización de código, aportando cada uno de 0-20% para el total de la aceleración.

Extensiones

Cada tipo de campo se define un anidada tipo de Paquete que se puede utilizar en lugar de la construcción sobre el terreno cuando se añade un campo para el mensaje,

msg.setField( REVISIÓN::ClOrdID::Pack( "4" ) );

Doble campo de los constructores de obtener un bool opcional argumento que especifica si el valor debe ser redondeada.

msg.setField( REVISIÓN::DoubleField( campo, el valor, la precisión, true ) );
msg.setField( REVISIÓN::Precio( valor, precisión, true ) );
msg.setField( REVISIÓN::precio: Precio:Pack( valor, precisión, true ) );

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X