Experimento VonmoTrade. Parte 1: intercambios y tecnología moderna


La serie de artículos destaca el intento de crear un sistema reactivo por una persona con un presupuesto mínimo y en el menor tiempo posible.


Objetivos del experimento:


  • Una comprensión más profunda del área temática y una mejor experiencia técnica.
  • Identificación de las fortalezas y debilidades del uso de lenguajes funcionales y proyectos de código abierto en el desarrollo de sistemas comerciales.
    Este artículo presenta la parte motivadora del proyecto y la descomposición de la tarea.

Planeaba comenzar el experimento en la primavera de 2019, pero las circunstancias cambiaron los plazos. Por lo tanto, pido disculpas a los pocos suscriptores que esperaban artículos sobre este tema.


¿Cómo llegué a tal vida?


Cuando me di cuenta de que me estaba cansando de la rutina de los proyectos de trabajo, quise hacer algo inusual. Consideré varios temas y direcciones, cuyo proceso de implementación fue un desafío para mí. Se formularon los principales requisitos para el proyecto:


  • Un área de conocimiento que me interesa;
  • Naturaleza distribuida y altamente accesible de la aplicación;
  • Alta capacidad de información y grandes volúmenes de datos almacenados característicos de aplicaciones intensivas en datos;
  • Aproveche al máximo los proyectos de código abierto.

Como ya había cierta experiencia en el desarrollo de almacenes de datos de objetos, nació la idea de desarrollar un tema y escribir una nueva implementación de un almacenamiento compatible con s3 utilizando codificación redundante y funciones de hash rápidas. Pero quería algo más interesante. Desde el punto de vista del desarrollador, los sistemas financieros sienten curiosidad por su trabajo en modo casi en tiempo real, una gran cantidad de actualizaciones y la cantidad de datos almacenados. Entonces decidí hacer mi implementación del sistema de intercambio.


Sobre intercambios


En un sentido amplio, el intercambio (del lat. Bursa - billetera) es un mercado donde los vendedores y compradores realizan transacciones. Dependiendo de lo que es un activo negociado (instrumento), se determinan los detalles del intercambio:


  • mercancía, incluida la bolsa de trabajo
  • stock
  • moneda
  • futuros

Históricamente, los intercambios han sido el lugar donde los compradores, vendedores y corredores (intermediarios) se reunieron en el momento señalado a través del cual se realizaron las transacciones.
Las funciones principales del intercambio incluyen:


  • Organización del proceso de intercambio comercial:
    • Definición de normas comerciales de conformidad con la ley aplicable
    • Establecer estándares de producto
    • Material y personal
  • Actividad de información. Suministro de información sobre precios de instrumentos, mercados y empresas;
  • Desarrollo de contratos modelo;
  • Solución de controversias (arbitraje);
  • Brindar ciertas garantías para la ejecución de transacciones.

Los intercambios modernos son pisos comerciales organizados que operan de acuerdo con reglas específicas y concentran la oferta y la demanda. La economía del intercambio también es muy clara, cuantas más transacciones en el intercambio, mayor será la recompensa del intercambio por los servicios prestados.


Por lo tanto, las características generales de la solución son comprensibles, ahora es necesario limitar la cantidad de trabajo para que la implementación de la idea se pueda cumplir en un tiempo razonable.


MVP


De los recursos limitados se sigue la funcionalidad limitada del prototipo. Pero las cosas vitales y fundamentales deben implementarse completamente.


Descomposición de problemas y selección de arquitectura


En el aspecto técnico, el intercambio es un sistema de colas en el que los participantes generan un flujo de llamadas: órdenes, y el sistema, de acuerdo con reglas previamente conocidas, realiza acciones sobre ellos.


Las órdenes de servicio deben hacerse con la menor cantidad de tiempo. El intercambio debe ser tolerante a fallas y altamente accesible.


Dividimos el proyecto en el servicio y partes públicas. La parte de servicio le permitirá administrar los componentes de la plataforma y el proceso de negociación del intercambio. La parte pública incluye interfaces de interacción con el cliente: API web, API comercial, subsistema de notificación. Ambas partes se basarán en una plataforma de aplicación distribuida responsable de la escalabilidad y confiabilidad del sistema en su conjunto.


Como estamos limitados por el presupuesto, utilizaremos solo soluciones de código abierto probadas para organizar el almacenamiento de datos. Para los datos del sistema en caliente, se aplica Tarantool y para PostgreSQL en frío.


Representaremos la composición planificada del sistema (se puede hacer clic en la imagen):


Uno tiene la sensación de que la arquitectura y el diseño no son diferentes de los sistemas convencionales. ¿Dónde está el desafío? Para responder, considere el proceso de creación de pedidos y cierre de ofertas para el cambio de divisas.


Creación de pedidos


  1. Comprobar autorización
  2. Asegúrese de que el usuario tenga fondos suficientes para crear un pedido.
  3. Crear orden
  4. Notificar al usuario de la creación exitosa o error

Acuerdo de cierre


  1. Encuentra un pedido par
  2. Verifique la adecuación de los fondos en los balances de las partes para cerrar la transacción
  3. Arreglar transacción: transferencia entre cuentas + transferencia de comisión de cambio a cuenta de comisión de cambio.
  4. Guarde el historial de órdenes ejecutadas.
  5. Actualice los datos de información: datos comerciales sin procesar y datos agregados para gráficos.
  6. Notificar a todas las partes interesadas de la transacción.

Las dificultades comienzan cuando pasamos de un monolito que se ejecuta en la misma máquina a un sistema distribuido tolerante a fallas implementado en un clúster. Establezco el rendimiento mínimo del sistema en el nivel de 5-7k transacciones cerradas por segundo para cada mercado. Esto impone restricciones adicionales en la arquitectura y el trabajo con datos.


Siguiendo el principio KISS, cada aplicación debe realizar solo aquellas funciones que son necesarias para procesar la entidad implementada en ella: mercado, cuenta, autorización, etc.


VTrade se basa en los principios de escala horizontal. Cada aplicación se puede ejecutar en plural. Esto le permite lograr tolerancia a fallas y el nivel requerido de rendimiento.


Pila tecnológica


Para no multiplicar la entropía, restringimos los idiomas y las tecnologías utilizadas.
Para el servidor, este conjunto incluirá:


  1. Erlang En mi opinión, el lenguaje ideal para construir cosas de infraestructura.
  2. Óxido. Ideal para cosas del sistema y problemas de optimización.
  3. PostgreSQL Como base principal para el almacenamiento de datos a largo plazo.
  4. Tarantool Como almacenamiento de datos en caliente (solo para el momento de MVP)
  5. Clickhouse. Para analizar registros y capacidades de análisis profundo.
  6. Linux El sistema debe admitir distribuciones modernas.

El software del cliente se implementa usando el marco Vue usando Vuex.


Dado que el proyecto inicialmente involucra una gran cantidad de componentes, para asegurar el nivel adecuado de calidad de la solución final, escribiremos una gran cantidad de pruebas basadas en propiedades y pruebas de integración.


Acerca de los planes


En un futuro próximo planeo analizar los fundamentos de la teoría y profundizar en la práctica en las siguientes áreas:


  • Warrants Tipos, características de procesamiento. Aspectos de almacenamiento de información comercial.
  • Libro de warrants. Representación visual del mercado.
  • Historial de ofertas Impresiones, gráficos, historia personal.

Como dicen ... Si está interesado, como, suscripción)

Source: https://habr.com/ru/post/481016/


All Articles