Expérience VonmoTrade. Partie 1: Échanges et technologie moderne


La série d'articles met en évidence la tentative de créer un système réactif par une seule personne avec un budget minimum et dans les plus brefs délais.


Objectifs de l'expérience:


  • Une meilleure comprĂ©hension du sujet et une meilleure expertise technique
  • Identification des forces et faiblesses de l'utilisation des langages fonctionnels et des projets open source dans le dĂ©veloppement de systèmes de trading
    Cet article présente la partie motivationnelle du projet et la décomposition de la tâche.

J'avais prévu de commencer l'expérience au printemps 2019, mais les circonstances ont déplacé les délais. Par conséquent, je m'excuse auprès des quelques abonnés qui attendaient des articles sur ce sujet.


Comment suis-je arrivé à une telle vie?


Quand j'ai réalisé que je me lassais de la routine des projets de travail, j'ai voulu faire quelque chose d'inhabituel. J'ai considéré divers sujets et orientations, dont le processus de mise en œuvre a été un défi pour moi. Les principales exigences du projet ont été formulées:


  • Un domaine de connaissance qui m'intĂ©resse;
  • Nature distribuĂ©e et hautement accessible de l'application;
  • Grande capacitĂ© d'information et grands volumes de donnĂ©es stockĂ©es caractĂ©ristiques des applications gourmandes en donnĂ©es;
  • Tirez le meilleur parti des projets open source.

Comme il y avait déjà une certaine expérience dans le développement d'entrepôts de données d'objets, l'idée est née de développer un thème et d'écrire une nouvelle implémentation de stockage compatible s3 en utilisant un codage redondant et des fonctions de hachage rapides. Mais je voulais quelque chose de plus intéressant. Du point de vue du développeur, les systèmes financiers sont curieux de connaître leur travail en mode quasi-temps réel, un grand nombre de mises à jour et la quantité de données stockées. J'ai donc décidé de faire ma mise en place du système d'échange.


Ă€ propos des Ă©changes


Au sens large, la bourse (du lat. Bursa - portefeuille) est un marché où les vendeurs et les acheteurs font des transactions. En fonction de ce qu'est un actif négocié (instrument), les spécificités de l'échange sont déterminées:


  • marchandise, y compris la bourse du travail
  • stock
  • monnaie
  • futures

Historiquement, les échanges ont en effet été le lieu de rassemblement des acheteurs, vendeurs et courtiers (intermédiaires) à l'heure fixée par laquelle les transactions ont été effectuées.
Les principales fonctions de l'Ă©change sont les suivantes:


  • Organisation du processus d'Ă©change de devises:
    • DĂ©finition des règles commerciales conformĂ©ment Ă  la loi applicable
    • Fixer des normes de produit
    • MatĂ©riel et dotation
  • ActivitĂ© d'information. Fournir des informations sur les prix des instruments, les marchĂ©s et les entreprises;
  • Élaboration de modèles de contrats;
  • Règlement des diffĂ©rends (arbitrage);
  • Fournir certaines garanties pour l'exĂ©cution des transactions.

Les bourses modernes sont des parquets organisés qui fonctionnent selon des règles spécifiques et concentrent l'offre et la demande. L'économie de l'échange est également très claire, plus il y a de transactions sur l'échange, plus la récompense de l'échange pour les services fournis est élevée.


Ainsi, les caractéristiques générales de la solution sont compréhensibles, il est maintenant nécessaire de limiter la quantité de travail afin que la mise en œuvre de l'idée puisse se rencontrer dans un délai raisonnable.


MVP


Des ressources limitées découle la fonctionnalité limitée du prototype. Mais des choses essentielles et fondamentales doivent être pleinement mises en œuvre.


Décomposition des problèmes et sélection de l'architecture


Sur le plan technique, l'échange est un système de mise en file d'attente dans lequel les participants génèrent un flux d'appels - commandes, et le système, selon des règles précédemment connues, effectue des actions sur eux.


Les commandes doivent être effectuées avec le moins de temps possible. L'échange doit être tolérant aux pannes et hautement accessible.


Nous divisons le projet en parties service et parties publiques. La partie service vous permettra de gérer les composants de la plateforme et le processus de trading de la bourse. La partie publique comprend les interfaces d'interaction client: API Web, API de trading, sous-système de notification. Les deux parties seront basées sur une plate-forme d'application distribuée responsable de l'évolutivité et de la fiabilité du système dans son ensemble.


Comme nous sommes limités par le budget, nous n'utiliserons que des solutions open source éprouvées pour organiser le stockage des données. Pour les données système chaudes, Tarantool est applicable, et pour PostgreSQL froid.


Nous allons décrire la composition prévue du système (l'image est cliquable):


On a le sentiment que l'architecture et le design ne sont pas différents des systèmes conventionnels. Où est le défi? Pour répondre, envisagez le processus de création d'ordres et de clôture des transactions pour l'échange de devises.


Création de commande


  1. VĂ©rifier l'autorisation
  2. Assurez-vous que l'utilisateur dispose actuellement de suffisamment de fonds pour créer une commande.
  3. Créer une commande
  4. Avertissez l'utilisateur de la création ou de l'erreur

Accord de clĂ´ture


  1. Trouver une commande de paire
  2. Vérifier l'adéquation des fonds au bilan des parties pour clôturer la transaction
  3. Transaction fixe: transfert entre comptes + transfert de commission d'Ă©change vers un compte de commission d'Ă©change.
  4. Sauvegardez l'historique des ordres exécutés.
  5. Mettre à jour les données d'informations: données de trading brutes et données agrégées pour les graphiques.
  6. Avertissez toutes les parties intéressées de la transaction.

Les difficultés commencent lorsque nous passons d'un monolithe fonctionnant sur la même machine à un système distribué tolérant aux pannes déployé sur un cluster. Je fixe la performance minimale du système au niveau de 5 à 7 000 transactions fermées par seconde pour chaque marché. Cela impose des restrictions supplémentaires sur l'architecture et le travail avec les données.


Conformément au principe KISS, chaque application ne doit exécuter que les fonctions nécessaires au traitement de l'entité qui y est implémentée: marché, compte, autorisation, etc.


VTrade est construit sur les principes de la mise à l'échelle horizontale. Chaque application peut être exécutée au pluriel. Cela vous permet d'atteindre la tolérance aux pannes et le niveau de performance requis.


Pile technologique


Afin de ne pas multiplier l'entropie, nous restreignons les langages et technologies utilisés.
Pour le serveur, cet ensemble comprendra:


  1. Erlang À mon avis, le langage idéal pour construire des choses d'infrastructure.
  2. Rouille. Idéal pour les choses système et les problèmes d'optimisation.
  3. PostgreSQL Comme base principale pour le stockage de données à long terme
  4. Tarantool. En tant que stockage de données à chaud (uniquement pour le temps de MVP)
  5. Clickhouse. Pour analyser les journaux et les capacités d'analyse approfondie.
  6. Linux Le système doit prendre en charge les distributions modernes.

Le logiciel client est implémenté à l'aide du cadre Vue à l'aide de Vuex.


Étant donné que le projet implique initialement un grand nombre de composants, afin d'assurer le bon niveau de qualité de la solution finale, nous écrirons un grand nombre de tests basés sur les propriétés et de tests d'intégration.


Ă€ propos des plans


Dans un avenir proche, je prévois d'analyser les fondements de la théorie et de me plonger dans la pratique dans les domaines suivants:


  • Des mandats. Types, fonctionnalitĂ©s de traitement. Aspects du stockage des informations commerciales.
  • Livre des mandats. ReprĂ©sentation visuelle du marchĂ©.
  • Historique des enchères. Impressions, graphiques, histoire personnelle.

Comme on dit ... Si intéressé, comme, abonnement)

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


All Articles