O erro mais caro que uma plataforma de gráficos pode cometer é abrir um WebSocket por aba do navegador. Não há argumento que escape dessa conta: com 10,000 traders simultâneos acompanhando três símbolos cada, você abriu 30,000 conexões upstream. A maioria dos fornecedores de dados de mercado vai limitar você antes do almoço. Os que não limitarem vão mandar uma fatura que fará isso por eles.
O padrão fan-out
A Vera Charts roda um fan-out no servidor: uma conexão upstream por símbolo, não importa quantos clientes o estejam acompanhando. Quando a primeira aba assina BTCUSDT, abrimos o WebSocket upstream. Quando a décima milésima aba assina, simplesmente a adicionamos ao conjunto de assinantes em memória e começamos a enviar o mesmo fluxo de ticks para o canal SSE dela.
Quando a última aba cancela a assinatura, mantemos o upstream aberto por alguns segundos (porque quase sempre alguém reabre) e depois o encerramos. Do ponto de vista do fornecedor, somos um único cliente por símbolo, mesmo quando dez mil traders estão acompanhando.
Como isso se traduz no custo do fornecedor
Para cripto, usamos o WebSocket público da Binance: sem chave de API, sem limite de requisições na nossa escala, sem custo por mensagem. Esse é o caso fácil. No forex, em que todo fornecedor cobra por símbolo ou por tick, o fan-out é o que torna a plataforma economicamente viável. Pagamos pelos símbolos que assinamos, não pelas abas que assinam conosco.
Esta é a parte da arquitetura que mais importa para as nossas prop firms parceiras. Elas não querem que a conta de dados de mercado da plataforma cresça de forma linear com o número de traders. Com o fan-out, ela não cresce assim. A conta escala com a quantidade de símbolos únicos, que é limitada.
Onde não se abre mão
- Fidelidade de ticks: todo assinante recebe todo tick. O fan-out não faz amostragem nem agrupa.
- Tratamento de contrapressão (backpressure): assinantes lentos não conseguem desacelerar o upstream. Eles entram em fila e, se ficarem atrás demais, são descartados.
- Lista de símbolos permitidos: os clientes não podem pedir símbolos arbitrários. O servidor aplica a lista antes de abrir um novo upstream.
Se você está avaliando plataformas para a sua empresa e a conversa ainda não chegou às conexões upstream, pergunte. A resposta diz muito sobre como a conta da plataforma vai se comportar quando você crescer.