2 votos

Arquitectura para transmitir y almacenar datos en tiempo real

Tengo datos de ticks en tiempo real que provienen de Bloomberg B-PIPE para miles de acciones y opciones de capital. Tengo múltiples instancias de docker con subprocesos múltiples, cada una procesando un subconjunto de los ticks. Los datos procesados se envían a un canal utilizando redis pub/sub. También uso redis para almacenar los ticks antes de publicarlos. Tengo un script que toma una instantánea de esos datos cada un minuto y los almacena en postgresql para luego usarlos si es necesario.

Tengo otro microservicio que escucha ese canal de redis y realiza cálculos de PNL para cada cartera que contiene el ticker con la actualización.

Estoy pensando en cambiar de redis pub/sub a algo diferente. El problema que enfrento con redis pub/sub ahora es que si tengo múltiples instancias escuchando el mismo canal, podría estar procesando la misma información del ticker varias veces. ¿Existe alguna forma de solucionar esto o es hora de usar kafka, lo cual sería complicado de configurar? Y si uso kafka, ¿tendría más sentido tener un canal/tema para cada ticker individual?

Me encantaría seguir usando redis para almacenar los datos de ticks intradiarios. Estoy usando redis enterprise en Azure y me encanta el paquete de series temporales. Es muy fácil recuperar los datos en mi sistema frontal y hacer análisis. Tengo un plan de nivel bajo y no estoy seguro de si es factible actualizar a un nivel más alto ya que se vuelve mucho más caro. Ahora el servidor se ralentiza de vez en cuando e incluso se cae cerca del cierre del mercado con solo 10,000 ops/seg. ¿Existen alternativas más económicas? Espero que la estrategia siga creciendo en tamaño y procesando muchos más ticks.

Agradecería cualquier ayuda de aquellos de ustedes que tengan experiencia construyendo sistemas similares.

0voto

Chathu Puntos 21

He construido y estoy construyendo algo así, pero no está muy claro qué es exactamente lo que quieres resolver aquí.

Sin embargo, por lo que entiendo es que deseas una solución escalable que pueda funcionar mejor que el actual redis evitando kafka.

  1. Yo diría que uses NATS con JetStream en lugar de redis, o si puedes usar AWS SQS y SNS. Eso resolvería muchos problemas de escalado.
  2. Utiliza AreoSpike, clickhouse o TimescaleDB para análisis de series temporales y otras cosas.

Avísame si necesitas más información sobre esta configuración, o si estás buscando algo más.

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