Experiência VonmoTrade. Parte 1: Trocas e tecnologia moderna


A série de artigos destaca a tentativa de criar um sistema reativo por uma pessoa com um orçamento mínimo e no menor tempo possível.


Objetivos do experimento:


  • Uma compreensão mais profunda da área de atuação e aprimoramento de conhecimentos técnicos
  • Identificação dos pontos fortes e fracos do uso de linguagens funcionais e projetos de código aberto no desenvolvimento de sistemas de negociação
    Este artigo apresenta a parte motivacional do projeto e a decomposição da tarefa.

Planejei iniciar o experimento na primavera de 2019, mas as circunstâncias mudaram os prazos. Portanto, peço desculpas aos poucos assinantes que aguardavam artigos sobre esse tópico.


Como cheguei a essa vida?


Quando percebi que estava cansado da rotina dos projetos de trabalho, queria fazer algo incomum. Eu considerei vários tópicos e orientações, cujo processo de implementação foi um desafio para mim. Os principais requisitos para o projeto foram formulados:


  • Uma área de conhecimento que me interessa;
  • Natureza distribuída e altamente acessível do aplicativo;
  • Alta capacidade de informação e grandes volumes de dados armazenados, característicos de aplicativos com uso intensivo de dados;
  • Aproveite ao máximo os projetos de código aberto.

Como já havia alguma experiência no desenvolvimento de data warehouses de objetos, surgiu a idéia de desenvolver um tema e escrever uma nova implementação de um armazenamento compatível com s3 usando codificação redundante e funções de hash rápido. Mas eu queria algo mais interessante. Do ponto de vista do desenvolvedor, os sistemas financeiros estão curiosos sobre seu trabalho no modo quase em tempo real, um grande número de atualizações e a quantidade de dados armazenados. Então eu decidi fazer a minha implementação do sistema de troca.


Sobre trocas


Em um sentido amplo, a bolsa de valores (do lat. Bursa - carteira) é um mercado em que vendedores e compradores fazem transações. Dependendo do que é um ativo negociado (instrumento), são determinadas as especificidades da troca:


  • mercadoria, incluindo a troca de trabalho
  • estoque
  • moeda
  • futuros

Historicamente, as trocas têm sido, de fato, o local onde compradores, vendedores e corretores (intermediários) se reúnem na hora marcada pela qual as transações foram feitas.
As principais funções da bolsa incluem:


  • Organização do processo de negociação de câmbio:
    • Definição de regras comerciais de acordo com a lei aplicável
    • Definir padrões do produto
    • Material e pessoal
  • Atividade de informação. Fornecer informações sobre preços de instrumentos, mercados e empresas;
  • Desenvolvimento de contratos modelo;
  • Resolução de disputas (arbitragem);
  • Fornecer certas garantias para a execução de transações.

As trocas modernas são pregões organizados que operam de acordo com regras específicas e concentram a oferta e a demanda. A economia da bolsa também é muito clara: quanto mais transações na bolsa, maior a recompensa da bolsa pelos serviços prestados.


Portanto, as características gerais da solução são compreensíveis, agora é necessário limitar a quantidade de trabalho para que a implementação da ideia possa se encontrar dentro de um prazo razoável.


MVP


Dos recursos limitados segue a funcionalidade limitada do protótipo. Mas coisas vitais e fundamentais precisam ser totalmente implementadas.


Decomposição de problemas e seleção de arquitetura


No lado técnico, a troca é um sistema de enfileiramento no qual os participantes geram um fluxo de pedidos de chamadas e o sistema, de acordo com as regras conhecidas anteriormente, executa ações sobre eles.


As ordens de entrega devem ser feitas com a menor quantidade de tempo. A troca deve ser tolerante a falhas e altamente acessível.


Dividimos o projeto em partes públicas e de serviço. A parte de serviço permitirá que você gerencie os componentes da plataforma e o processo de negociação da bolsa. A parte pública inclui interfaces de interação com o cliente: API da Web, API de negociação, subsistema de notificação. Ambas as partes serão baseadas em uma plataforma de aplicativos distribuídos responsável pela escalabilidade e confiabilidade do sistema como um todo.


Como estamos limitados pelo orçamento, usaremos apenas soluções de código aberto comprovadas para organizar o armazenamento de dados. Para dados quentes do sistema, o Tarantool é aplicável e para PostgreSQL frio.


Representaremos a composição planejada do sistema (a imagem é clicável):


Ficamos com a sensação de que arquitetura e design não são diferentes dos sistemas convencionais. Onde está o desafio? Para responder, considere o processo de criação de pedidos e fechamento de negócios para a troca de moeda.


Criação de pedidos


  1. Verificar autorização
  2. Verifique se o usuário atualmente possui fundos suficientes para criar um pedido.
  3. Criar pedido
  4. Notificar o usuário sobre criação ou erro bem-sucedido

Acordo de fechamento


  1. Encontre uma ordem de pares
  2. Verificar a adequação dos fundos nos balanços patrimoniais das partes para fechar a transação
  3. Corrigir transação: transferência entre contas + transferência de comissão de câmbio para conta de comissão de câmbio.
  4. Salve o histórico de ordens executadas.
  5. Atualizar dados de informações: dados brutos de negociação e dados agregados para gráficos.
  6. Notifique todas as partes interessadas da transação.

As dificuldades começam quando passamos de um monólito em execução na mesma máquina para um sistema tolerante a falhas distribuído implantado em um cluster. Eu coloco o desempenho mínimo do sistema no nível de 5-7k transações fechadas por segundo para cada mercado. Isso impõe restrições adicionais à arquitetura e trabalha com dados.


Seguindo o princípio do KISS, cada aplicativo deve executar apenas as funções necessárias para processar a entidade implementada nele: mercado, conta, autorização e assim por diante.


O VTrade é baseado nos princípios da escala horizontal. Cada aplicativo pode ser executado no plural. Isso permite atingir tolerância a falhas e o nível de desempenho necessário.


Pilha tecnológica


Para não multiplicar a entropia, restringimos os idiomas e as tecnologias utilizadas.
Para o servidor, este conjunto incluirá:


  1. Erlang Na minha opinião, a linguagem ideal para construir coisas de infraestrutura.
  2. Ferrugem. Ótimo para coisas do sistema e problemas de otimização.
  3. PostgreSQL Como base principal para armazenamento de dados a longo prazo
  4. Tarantool. Como um armazenamento de dados quente (apenas para o tempo do MVP)
  5. Clickhouse. Para analisar logs e recursos de análise profunda.
  6. Linux O sistema deve suportar distribuições modernas.

O software cliente é implementado usando a estrutura do Vue usando o Vuex.


Como o projeto envolve inicialmente um grande número de componentes, para garantir o nível adequado de qualidade da solução final, escreveremos um grande número de testes baseados em propriedades e testes de integração.


Sobre planos


Em um futuro próximo, pretendo analisar os fundamentos da teoria e aprofundar a prática nas seguintes áreas:


  • Warrants. Tipos, recursos de processamento. Aspectos de armazenamento de informações comerciais.
  • Livro de warrants. Representação visual do mercado.
  • Histórico de lances. Impressões, gráficos, histórico pessoal.

Como se costuma dizer ... Se interessado, como, assinatura)

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


All Articles