Por que a sincronização geth é tão lenta?
Eu continuo ouvindo esta pergunta com frequência, de operadores de nó Ethereum. Por que ainda é tão difícil sincronizar totalmente um nó completo Ethereum?
Os usuários têm reclamado sobre a sincronia geth notoriamente lenta na carteira oficial Ethereum.
Alguns até questionam o nível de capacidades de dimensionamento de uma criptomoeda que requer várias centenas de gigabytes de espaço no disco rígido e que pode levar semanas para sincronizar totalmente com o resto da rede.
Enquanto geth sincroniza, administradores de nós Ethereum completos podem acabar vendo uma tela, como a abaixo, por um tempo muito longo:
Existem inúmeros argumentos válidos no campo “Ethereum sync is too slow” — e os desenvolvedores do núcleo Ethereum tomaram nota do problema.
Desde então, eles criaram um modo de cliente leve e descontinuaram o switch “—fast” antigo, adotando um novo algoritmo usando o switch de linha de comando—syncmode “fast”.
Mas essas mudanças não resolveram o problema. Nós completos Ethereum ainda são notoriamente difíceis de sincronizar.
Por que isso acontece?
Como você pode mitigar os efeitos? Neste artigo, discutimos alguns problemas conhecidos, por que eles acontecem e como você pode tentar contorná-los.
Existem atualmente alguns problemas conhecidos que tornam a sincronização Ethereum muito lenta:
Vamos dar uma olhada rápida em cada um desses fatores.
Há muito pouco que podemos fazer sobre este problema. Descobrir pares iniciais é uma dificuldade inerente em todas as redes P2P. Houve outros sistemas P2P totalmente descentralizados e a maioria também foi notoriamente lenta quando incapaz de iniciar conexões iniciais para pares suficientes na rede.
Houve sistemas anônimos descentralizados como Freenet (que ainda existe BTW), mas que também são muito lentos porque dependem de nós conversando diretamente uns com os outros para trocar informações em grande escala. Não há um nó centralizado rápido ajudando a rede em um sistema verdadeiramente P2P.
Muitos nós também são executados em conexões de internet lentas e limitadas. Quando você se conecta a um nó lento, ele arrastará toda a operação de sincronização mais lenta até que seu nó detecte uma conexão de atraso e tente um par diferente.
Não há nada que você possa fazer para evitar conectar-se a nós lentos pela primeira vez. Quando você encontrar um nó muito lento ou incorretamente em execução, você pode colocá-lo na lista negra ou colocá-lo em quarentena em sua lista de pares local. Mas é impossível saber que é um nó lento antes de se conectar a ele pelo menos uma vez.
O spam é um problema em todas as tecnologias baseadas em multidões relacionadas à Internet. Seja um chat Telegram, IRC, fóruns ou até mesmo criptomoedas, spam está em toda parte. Mas cada operação de spam deve ser rentável, caso contrário, não haveria incentivo para isso.
Qual é o incentivo para o spam de blockchain de criptomoedas? A resposta é geralmente promover uma criptomoeda rival.
Vimos ataques de spam contra Bitcoin, Ethereum e contra todas as outras moedas mineráveis e top 100 ranqueadas. Os ataques de spam geralmente consistem em enviar milhões de pequenas transações que entopem a rede e preenchem o mempool de transações não confirmadas. Pode haver outros ataques mais sofisticados, mas o mais simples geralmente é o que retarda toda a rede.
Quando esse tipo de ataque é perpetrado por atores com alta largura de banda e muito dinheiro e recursos, eles são quase impossíveis de desviar. Mas mesmo assim, Bitcoin e Ethereum enfrentaram a maioria dos bombardeios recebidos, especialmente ao longo de 2017, quando muito dinheiro começou a temer a propagação de criptomoedas.
Se houver um bom argumento contra o aumento do tamanho do bloco no blockchain Bitcoin, então Ethereum deve ser ele.
Os blocos Ethereum podem ser de qualquer tamanho arbitrário, limitados apenas pelo próprio limite de GAS.
GAS é uma medida dos recursos computacionais gastos no processamento de transações Ethereum (incluindo interação inteligente contrato).
Um contrato maior e mais complexo requer mais GAS do que um pequeno e simples contrato.
GAS é a moeda de computação no “computador mundial” composto por todos os nós Ethereum.
Quando um contrato é muito grande e complexo, exigirá grandes quantidades de GÁS, que é em si negociado pela Ethereum.
A quantidade de GAS limita a quantidade de contratos e transações contidos em um bloco. Portanto GAS indiretamente limita o tamanho físico dos blocos Ethereum.
Como todos sabemos, o espaço de endereços IPv4 foi esgotado.
Consequentemente, uma parte imensa da Internet fica atrás dos roteadores NAT. NAT é uma maneira de multiplexar N IPs privados em um ou alguns IPs públicos enfrentando.
É assim que a maioria dos provedores de internet é capaz de oferecer acesso a computadores domésticos. O próprio provedor tem uma pequena gama de IPs que adquire de um operador de backbone, e esses IPs são distribuídos aos seus clientes. Um pequeno IP provedor de internet pode servir milhares de IPs privados não roteáveis.
O problema com o NAT é que deve limitar que tipo de tráfego pode alcançar os computadores dos clientes do ISP.
Imagine que se não houvesse filtragem, os arquivos de todos e configurações inseguras estariam abertos ao mundo. Isso, de fato, já foi explorado por hackers antes. Por exemplo, quando as impressoras mundiais começaram a cuspir desenhos engraçados, porque os hackers encontraram milhares de impressoras abertas e compartilhadas em redes não filtradas!
Então NAT está lá para nos ajudar. Mas há uma captura.
NAT é terrível para redes P2P.
As redes P2P devem ser tão simétricas quanto possível, o que significa que, quando um nó é baixado em 2 megabytes/s, ele também deve fazer upload a 2 MB/s. Quando isto não acontece, os carregadores executam rapidamente fora da largura de banda e a rede P2P retarda.
A maioria dos nós completos Ethereum possuem por trás firewalls NAT fortemente filtrados e há muito pouco os desenvolvedores principais podem fazer sobre isso.
Finalmente, há o novo algoritmo de sincronização rápida.
Não vamos entrar nos detalhes de como isso funciona, mas o que você deve saber é que esse algoritmo requer que a estrutura da cadeia completa seja baixada antes que cada bloco possa ser comprometido com o banco de dados blockchain local.
Como já mencionamos, alguns blocos são gigantescos e levam dias para baixar totalmente toda a estrutura da cadeia. Embora essa estrutura da cadeia não termine o download, a contagem de blocos fica congelada. Os usuários geralmente relatam isso como um bug ou como “carteiras congeladas”, mas o fato é que, se você olhar para os logs geth subjacentes, você verá que ele está baixando a estrutura da cadeia para o bloco em segundo plano.
Isto, combinado com a rede NAT-filtrada e a dificuldade de encontrar pares, pode tornar a sincronização muito lenta.
Então, o que você pode fazer sobre esses problemas conhecidos? Embora não haja receita definitiva, aqui estão algumas dicas para ajudá-lo a acelerar sua sincronização completa do nó Ethereum.
Tenha em mente que você pode usar Ethereum sem ter que baixar todo o blockchain para o seu computador.
Carteiras on-line como MyEtherWallet oferecem funcionalidade completa sem exigir um nó completo.
A troca de usar uma carteira fina é alguma perda de confiança: você deve confiar que a cadeia contida no nó ao qual está conectado será o blockchain oficial da rede Ethereum.
Caso contrário, este nó confiável poderia rotear temporariamente suas transações em outro lugar ou até mesmo transmitir TX inválidos.
Nenhum caso foi relatado para MyEtherWallet que eu conheço.
Nunca sabemos quando uma rede pode ser comprometida, por isso tenha em mente que a única maneira segura e legitimamente descentralizada de usar qualquer criptomoeda, incluindo Ethereum, é executar um nó completo que é 100% em sincronia.
Esperamos que isso esclareça algumas perguntas sobre a sincronização lenta do Ethereum!
Obtendo fundo em Geth: Por que sincronizar o nó Ethereum é lento
Geth sincronização completa tão lento #19486
Geth 1.4.18 sincronização é muito lenta #3207
Ethereum Carteira/GETH incrivelmente lento para sincronizar, ajuda?
Geth é muito lento para sincronizar após o bloco ~2420000
Problemas de sincronização da Carteira Ethereum
Versão PT: Por que o sync do Ethereum é tão lento?