A tecnologia blockchain introduziu um potencial sem precedentes em descentralização, transparência e segurança. Mas ela enfrenta um desafio significativo: escalabilidade. A escalabilidade é um elemento do “trilema blockchain”, que também inclui segurança e descentralização. Conseguir todos os três elementos simultaneamente é um problema persistente no domínio da tecnologia blockchain. É aqui que soluções estratégicas como o “sharding” entram em jogo.
Entenda o que em que consiste o sharding
Sharding é um conceito originário da gestão de bases de dados tradicional. Ele refere-se ao processo de divisão de uma base de dados maior em partes menores e mais facilmente geríveis, designadas ‘shards’. A sua aplicação em blockchain visa melhorar a escalabilidade, mantendo o princípio da descentralização. Essencialmente, o sharding ocorre quando uma rede blockchain é dividida em partes menores conhecidas como shards, cada uma capaz de processar transações e contratos inteligentes em paralelo.
Como funciona o sharding?
Para entender como o sharding é executado numa rede blockchain é preciso compreender como os dados das blockchains são armazenados e processados. Existem várias formas de processar os dados. Vamos analisar o processamento sequencial e paralelo.
Normalmente, cada ‘node’ de uma blockchain é responsável por lidar com todo o volume de transações dentro da rede. Este tipo de processamento de dados é conhecido como “processamento sequencial”. Isso significa que cada node deve manter e armazenar todas as informações críticas, tais como saldos de contas e histórico de transações. Essencialmente, cada node deve processar todas as operações, dados e transações da rede.
Embora este modelo reforce a segurança da blockchain, registando todas as transações em todos os nodes, ele reduz drasticamente a velocidade do processamento de dados. Aqui é onde o processamento paralelo de dados entra em jogo, permitindo a execução de múltiplas operações simultaneamente.
O sharding pode ser uma solução poderosa para esse dilema, pois divide ou ‘particiona’ a carga de trabalho transacional em toda a rede blockchain. Isso significa que nem todos os nodes precisam de gerir ou processar toda a carga da blockchain.
Em vez disso, o sharding divide a carga de trabalho através do “particionamento horizontal”. Nesse processo, os dados são divididos em subconjuntos horizontais, onde cada shard atua como uma base de dados independente capaz de processar transações separadamente.
Particionamento horizontal vs. vertical
O “particionamento horizontal” e o “particionamento vertical” são duas abordagens importantes para a escalabilidade da base de dados. Embora ambos tenham sido projetados para gerir grandes conjuntos de dados de maneira mais eficiente, eles funcionam de maneiras fundamentalmente diferentes. O sharding é um método comum de implementação do particionamento horizontal.
No particionamento horizontal, os dados são divididos em linhas e espalhados por diferentes nodes (ou bases de dados), cada um contendo um subconjunto dos dados. Cada linha de uma tabela é uma entidade única, portanto separá-las não leva a nenhuma perda de integridade dos dados. Um exemplo proeminente de particionamento horizontal em uso está na distribuição de redes blockchain, como Ethereum e Bitcoin.
No particionamento vertical, os dados são divididos em colunas, em vez de linhas. Cada partição no particionamento vertical contém um subconjunto de dados para cada entidade, ou todo o conjunto de dados, mas apenas para um determinado conjunto de atributos.
Por exemplo, consideremos uma tabela de clientes com as colunas Nome, Status, Descrição e Foto. Num cenário de particionamento vertical, o ‘Nome’ e o ‘Status’ podem ser mantidos numa tabela e as colunas ‘Descrição’ e ‘Foto’, noutra.
Porque é que o particionamento horizontal é o preferido?
Em redes blockchain, o particionamento horizontal é geralmente favorecido em relação ao particionamento vertical por três razões principais: escalabilidade, descentralização e segurança.
Escalabilidade: o sharding fornece uma solução ao dividir os dados em “shards” (fragmentos) menores e mais geríveis. Cada shard pode operar de forma independente, permitindo que mais transações sejam processadas simultaneamente, melhorando a velocidade e a eficiência da rede. Já no particionamento vertical, a distribuição das colunas em diferentes bases de dados pode exigir mais complexidade na recuperação de uma transação completa ou informações de bloco e pode limitar a escalabilidade.
Descentralização: de acordo com o ethos central da blockchain, o particionamento horizontal suporta a descentralização. Como os nodes precisam processar apenas uma parte do total de dados (um shard), isso permite que mais nodes participem da rede, já que as cargas computacionais e de armazenamento são reduzidas. O particionamento vertical, comparativamente, restringiria isso, pois cada node precisaria de acesso a todas as partições (todas as colunas de dados) para compreender e verificar os dados completos do bloco.
Segurança e integridade dos dados: o particionamento horizontal mantém a integridade dos dados porque cada shard (ou partição) contém dados de transação completos, garantindo que cada node tenha uma cópia completa e precisa da sua parte da blockchain. No particionamento vertical, estaríamos basicamente a dividir os dados de um bloco entre diferentes nodes, dificultando a obtenção de integridade e segurança dos dados, aspetos primordiais das redes blockchain.
Quais os benefícios do sharding?
Vejamos os potenciais benefícios que o sharding proporciona para a tecnologia blockchain:
Transações mais rápidas: o sharding facilita o processamento paralelo de transações. Em vez de processar transações individualmente e de maneira sequencial, o sharding permite que as transações sejam processadas simultaneamente, mas em shards diferentes. Cada shard funciona de forma independente, aumentando significativamente a velocidade das transações. Isto não só acelera a velocidade das transações, mas também significa que toda a rede é capaz de lidar com mais utilizadores, promovendo a adoção em massa.
A Ziliqa é um exemplo de rede blockchain que usa shards para lidar com a escalabilidade. O mecanismo de sharding da Ziliqa permite a execução de milhares de transações por segundo.
Redução de custos de processamento e armazenamento: o modelo convencional da blockchain obriga cada node a armazenar todas as transações, aumentando as necessidades de hardware conforme a blockchain se expande. No entanto, com o sharding, cada node é encarregado de processar e armazenar apenas uma fração dos dados da rede – e isso diminui os recursos necessários para a participação de um node na rede.
Sendo assim, mais participantes podem-se tornar validadores, promovendo a descentralização da rede sem custos proibitivos. O sharding mitiga problemas onde apenas entidades com recursos computacionais caros e de alta qualidade poderiam participar realisticamente do processo, preservando assim a natureza democrática das redes blockchain.
Melhor desempenho da rede: o sharding pode ajudar a melhorar o desempenho e a capacidade da rede. Em blockchains tradicionais, à medida que mais nodes participam da rede, paradoxalmente o desempenho diminui, devido à necessidade de maior comunicação de dados e sincronização entre os nodes.
No entanto, o sharding muda esse cenário. Como cada sharding funciona separadamente e simultaneamente, o sistema é capaz de processar mais transações e operações computacionais. Quando um novo node se junta à rede, ele pode ser adicionado a um shard em vez de ser adicionado a toda a rede, aumentando assim a capacidade de escalabilidade da rede. Isto melhora a eficiência e proporciona transações mais fluidas e uma melhor experiência de utilizador.
Avanços e melhorias futuras na tecnologia de sharding podem trazer outras vantagens ou fortalecer as já existentes, melhorando o ecossistema blockchain de forma contínua.
Quais são as limitações do sharding?
Embora o sharding ofereça vários benefícios potenciais que contribuem com a eficiência das redes blockchain, o processo também apresenta um conjunto único de desafios. Algumas desvantagens e potenciais vulnerabilidades introduzidas pelo sharding incluem:
Ataques single shard takeover: num ambiente de sharding, o poder computacional para assumir um único shard é dramaticamente menor do que o necessário para assumir toda a rede. Sendo assim, esses shards individuais são mais vulneráveis a um “ataque de um por cento” ou “single shard takeover” – onde um agente malicioso com uma pequena quantidade de recursos, em comparação com toda a rede, pode assumir o controlo sobre um shard individual.
Transações cross-shard: transações que acontecem em diferentes shards (cross-shard) apresentam um desafio único. As transações cross-shard são complexas e podem levar a gastos duplos se não forem geridas com cuidado. Se um shard não acompanhar com precisão o estado do outro durante uma transação, os utilizadores podem explorar isso para duplicar os gastos.
Problemas de disponibilidade de dados: o sharding torna a manutenção de todo o estado da rede num esforço complexo. Se certos shards não estiverem disponíveis quando necessário (porque os nodes que mantêm esses shards estão offline), isso pode levar a problemas de disponibilidade de dados, causando interrupções em toda a rede.
Segurança de rede: o sharding requer a implementação de um protocolo robusto que equilibre a carga entre os shards. Se não for feito corretamente, isso pode levar a uma distribuição desigual de dados ou desequilíbrio de recursos, resultando em potencial instabilidade da rede.
Sincronização de nodes: a sincronização de nodes pode causar atrasos na rede devido ao tempo necessário para compartilhar e atualizar informações em diferentes nodes. Além disso, se um node com menos capacidade de processamento ou conexão de rede mais lenta apresentar atrasos, isso pode atrasar todo o processo de sincronização, reduzindo o desempenho geral da rede blockchain.
O sharding é implementado na Ethereum?
A Ethereum planeia implementar o sharding como parte da sua atualização para a Ethereum 2.0. A Ethereum 2.0, também conhecida como Eth2 ou Serenity, é uma atualização da blockchain Ethereum que visa melhorar a velocidade, eficiência e escalabilidade da rede, permitindo processar mais transações e também reduzir o congestionamento.
Atualmente, a atualização está a ser implementada em fases. A fase final (Phase 2) incluirá a implementação completa do sharding. Os desenvolvedores da Ethereum esperam que essas melhorias abordem alguns dos desafios atuais associados à escalabilidade e aos custos de transação que a rede enfrenta.
No entanto, é importante observar que implementar o sharding vem com o seu próprio conjunto de desafios, especialmente na manutenção da segurança e descentralização da rede. Por isso, os desenvolvedores da Ethereum estão a refletir e agir com cautela e a realizar testes extensivos nessa transição para garantir o sucesso da atualização quando totalmente implementada.
Considerações finais
De modo geral, o sharding representa um avanço notável na resolução do ‘trilema’ blockchain. Embora introduza novas complexidades e possíveis desvantagens, o seu potencial para aumentar a escalabilidade sem comprometer a descentralização é uma grande promessa para o futuro das redes blockchain.
Não é surpresa que várias blockchains estejam a explorar o sharding como uma solução potencial. A Ethereum está a integrar o sharding como parte da atualização Ethereum 2.0 para lidar com os problemas de escalabilidade. Espera-se que essa implementação ocorra através da atualização Cancun, um componente fundamental do plano geral de melhorias.
Entretanto, como qualquer outra tecnologia em evolução, o sucesso dependerá de investigação contínua, desenvolvimento e testes rigorosos para as implementações de sharding.
Obs. : Artigo adaptado da Binance Academy
Outros artigos interessantes: