Principais conclusões
Nossa migração da Binance Ledger teve como objetivo resolver o problema de hot account inerente ao nosso antigo servidor de banco de dados relacional.
Uma bolsa de criptomoedas opera 24 horas por dia, 7 dias por semana, 365 dias por ano, sem janela de manutenção para alavancar, ao contrário de uma bolsa normal, que tem horários de intervalo diários.
A migração para um novo Binance Ledger precisava ocorrer on-line, manter os ativos dos usuários SAFU e não causar nenhum impacto nos negócios, para que a experiência dos usuários finais permanecesse perfeita.
Escolhemos uma estratégia de migração gradual, conta por conta, em vez de uma estratégia de transição e de uma só vez, como a empregada pela ferramenta fantasma.
Saiba mais sobre nossa migração para Binance Ledger e as ferramentas e técnicas usadas em todo o processo.
A Binance Ledger sustenta nossas operações técnicas e processa milhões de transações diárias em uma vasta base de usuários. Você pode aprender mais sobre o sistema, seus objetivos e desafios em nosso blog Como a Binance Ledger potencializa sua experiência na Binance. Nosso processo de migração da versão antiga para a nova enfrentou um desafio típico: como poderíamos atualizar o motor em tempo real enquanto o avião ainda estava em voo? Tivemos que migrar os ativos de nossos usuários e manter os fundos SAFU era nossa principal prioridade.
Principais desafios de migração da Binance
A seguinte lista de desafios teve que ser enfrentada para atingir as metas estabelecidas:
Garantir a total exatidão do novo razão
Ser capaz de detectar qualquer problema de fundo e corrigi-lo em tempo hábil e com precisão
Não há tempo de inatividade para upstreams
Comparando nossa missão de migração com DDL de banco de dados online
Antes de nos aprofundarmos nos detalhes de nossa solução, vamos examinar o problema comum de executar uma DDL (linguagem de definição de dados) online para uma tabela grande. O que exatamente é DDL? Bem, imagine uma tabela com centenas de milhões de linhas onde precisamos adicionar outra coluna. Queremos fazer isso on-line, sem interromper os negócios.
A ferramenta gh-ost é amplamente utilizada para resolver esse problema e você pode ver como ela funciona no diagrama a seguir.
O processo consiste essencialmente em duas fases:
A fase de sincronização, que continua até que a nova tabela seja totalmente idêntica à tabela original. Existem dois tipos de dados a serem sincronizados:
Dados existentes
Dados incrementais (novos dados gerados a partir da tabela original durante o processo de migração em andamento)
A fase de transição troca a tabela original pela nova sem interromper nenhuma transação em andamento.
Onde os problemas da Binance Ledger diferiam
Apesar de algumas semelhanças, a Binance Ledger enfrentou alguns desafios inerentemente únicos em nossa missão de migração online.
Em primeiro lugar, os sistemas backend da Binance operam em um ambiente distribuído, enquanto o banco de dados online DDL está em um ambiente monolítico. Em segundo lugar, não podemos nos dar ao luxo de adotar a abordagem de transição completa porque os dados eram ativos de nossos usuários. Por último, precisamos de garantir que todos os serviços relevantes funcionam como um todo antes de começarmos a realizar a migração em massa.
Como no exemplo anterior de DDL online, também houve duas fases em nossa migração:
A fase de sincronização, onde um serviço replicador dedicado foi especialmente construído para sincronizar os saldos do livro razão antigo para o novo livro razão
A fase de transição conta por conta
Abordagens Baseadas em Fases
A tarefa era grande e, como dizem, Roma não foi construída num dia. A abordagem de dividir para conquistar geralmente funciona perfeitamente diante de um domínio de problema grande e complexo.
Fase 1: Replicação
O porquê
Podemos resumir nosso processo de pensamento aqui em dois pontos principais:
Modelamos o Binance Ledger como um novo escravo que se junta ao cluster MySQL existente, que alimenta o sistema de contabilidade atual. Ao aproveitar as técnicas de replicação, poderíamos manter os saldos dos usuários totalmente sincronizados de forma assíncrona.
Poderíamos então encaminhar o tráfego de produção literalmente para o Binance Ledger para validar sua correção e robustez. Mesmo que as coisas dêem errado nesta fase, não haverá impacto para nós e para nossos usuários.
O quê
Abaixo, ilustramos o pipeline de replicação geral. O caminho crítico ao qual prestar atenção é:
Transferir → Ledger → replicador Binance Ledger → Binance Ledger
o como
Dividimos o processo de replicação em duas etapas distintas:
Despejou um instantâneo do banco de dados razão e depois importou-o para o Binance Ledger
Replicou o log bin do banco de dados contábil após o momento em que o instantâneo foi despejado.
Eventualmente, os dados de saldos e registros de saldo seriam mantidos em total sincronia entre o livro-razão antigo e o livro-razão Binance, que pode ser posteriormente validado pelo módulo de reconciliação completo.
O quando
A Binance Ledger foi lançada no início de agosto de 2022. Depois disso, iniciamos o processo de replicação, que durou até meados de novembro de 2022. Esse processo foi um período importante para nós, pois a exatidão do novo sistema de contabilidade precisava ser 100% validada. Esta etapa não poderia ser ignorada antes de avançar para a próxima fase de migração.
No final das contas, não encontramos problemas e realizamos diversas rotinas de lançamento para ficarmos mais confortáveis com a situação. O processo de três meses não foi particularmente rápido, mas foi necessário para o nosso objetivo SAFU.
Fase 2: migração online
O porquê
Para migrar centenas de milhões de contas, criamos um trabalho de migração personalizado.
O quê
Abaixo, descrevemos o fluxo principal de migração para uma conta:
Aqui estão algumas notas importantes a serem lembradas:
O sistema de contas mantém o mapeamento de propriedade para cada conta.
Conta A → razão
Conta B → Binance Ledger
Conta C → proibida
Antes de migrar uma conta, se existisse alguma transação simultânea pendente, ela seria ignorada para reduzir o impacto nos negócios.
Alteramos o mapeamento de propriedade de razão para proibido, não permitindo mais atualizações de saldo, tornando-o imutável.
Reconciliamos os saldos entre o antigo razão e o Binance Ledger.
Alteramos o mapeamento de propriedade de proibido para Binance Ledger, permitindo que futuras atualizações de saldo sejam roteadas diretamente para Binance Ledger.
De acordo com nossa métrica de desempenho, foram necessários em média 150 ms da etapa 3 à etapa 5. Em teoria, os usuários não podem realizar nenhuma transação durante esse período de migração de 150 ms. Descobriu-se que não houve nenhuma transação impactada.
A execução
Na Binance, defendemos o princípio da “boa execução em vez do planejamento meticuloso”. A execução sólida é vital para o nosso sucesso e a segurança dos fundos é sempre a nossa principal prioridade. Adoptámos uma estratégia de migração gradual durante um período de três semanas para detectar os problemas o mais cedo possível, o que por sua vez ajudou a reduzir a magnitude do impacto negativo.
O Processo de Reconciliação
A reconciliação é extremamente importante na detecção oportuna de possíveis anomalias de equilíbrio, de uma perspectiva imparcial. Podemos conduzir o processo quase em tempo real para tomar medidas imediatas antes que a situação piore. Dois tipos de módulos de reconciliação são desenvolvidos especificamente para o processo de migração online: em tempo real e completo.
Tempo real
O processo de reconciliação baseado no nível da transação foi criado para detectar qualquer problema de fundo em tempo real.
Completo
Podemos realizar uma reconciliação completa periodicamente com base nos instantâneos sincronizados com o data warehouse. Este processo garante que todos os saldos sejam iguais entre o ledger antigo e o Binance Ledger.
Por exemplo, digamos que ainda temos 10 milhões de usuários residindo no antigo livro-razão. Podemos usar esta reconciliação completa para verificar se os saldos e registros de saldo são os mesmos entre o livro-razão antigo e o livro-razão da Binance.
Concluindo o processo de migração
Resumindo, a missão foi cumprida 1) usando técnicas de replicação para validar a exatidão do novo Binance Ledger 2) implementando uma estratégia de migração conta por conta para atualizar o mecanismo de forma lenta, segura, mas segura.
Acreditamos que o paradigma de migração online acima mencionado pode ser reutilizado em tarefas semelhantes. Se os processos e temas discutidos despertaram seu interesse, por que não considerar ingressar na equipe? Estamos sempre em busca de pessoas dedicadas com novas perspectivas sobre nossos desafios diários na Binance.
Referências
Como a Binance Ledger potencializa sua experiência na Binance
Ferramenta online de migração de esquema do GitHub para MySQL
Leitura adicional
Usando MLOps para construir um pipeline de aprendizado de máquina ponta a ponta em tempo real | Blog da Binance
Binance é o lugar certo para você? Razões para não ingressar na Binance | Blog da Binance
