John Graham-Cumming, CTO da Cloudflare, explica como a nuvem não foi projetada para o que deve se tornar. Ele nos apresenta o conceito de “Supercloud” – uma rede global que está em todos os lugares, unida por um software que transforma o globo em uma única nuvem que é eficiente, escalável, disponível, privada e econômica
No documento S-1 da Cloudflare há uma seção que começa assim: “A Internet não foi construída para o que se tornou”. Essa frase expressa a ideia de que a Internet, que começou como um experimento, se transformou em algo de que todos precisamos para nossa vida diária e trabalho. E isso é necessário mais do que apenas a Internet como foi projetada; precisava de segurança, desempenho e privacidade. Algo semelhante pode ser dito sobre a nuvem: a nuvem não foi projetada para o que deve ser.
A introdução de serviços como o Amazon EC2 foi, sem dúvida, uma grande melhoria na velha forma de comprar e instalar racks e racks de servidores e sistemas de armazenamento e depois mantê-los. Mas, por sua natureza, a nuvem era uma virtualização da antiga infraestrutura do mundo real e não um repensar radical de como a computação deveria ser para atender às demandas dos negócios em escala de Internet. É como se as locomotivas a vapor fossem substituídas por motores elétricos eficientes, mas ainda exigissem uma chaminé no topo e parassem para receber água a cada 200 milhas.
A nuvem substituiu os rituais de compra de servidores e instalação de sistemas operacionais por novos e agora familiares rituais de escolha de regiões, provisionamento de máquinas virtuais e manutenção de códigos aquecidos artificialmente.
Mas ao longo do caminho vislumbres de luz são vistos através da nuvem na forma de lambdas, ou arestas, ou funções, ou sem servidor. Todos estão tentando dar um nome a um modelo de computação em nuvem que promete tornar os desenvolvedores altamente produtivos na escala de um para a escala da Internet. É um modelo que, em vez de virtualizar máquinas ou discos ou empacotar coisas em contêineres, diz: “escreva o código, nós o executamos, não se preocupe com detalhes como dimensionamento ou localização”.
Estamos chamando isso de Supercloud, ou Supernuvem. As bases da Supercloud são serviços de computação e dados que tornam a execução de qualquer tamanho de aplicativo eficiente e infinitamente escalável sem a bagagem da nuvem como ela existe hoje.
Os fundamentos da Supercloud
Há alguns anos, um movimento chamado NoSQL desenvolveu novas formas de armazenar e processar dados que não dependiam de bancos de dados. Os armazenamentos de valores-chave e os armazenamentos de documentos floresceram porque, em vez de pensar nos dados na granularidade de bancos de dados, tabelas ou mesmo linhas, eles fizeram uma conexão direta entre código e dados em um nível simples.
Você pode pensar no NoSQL como um impulso para a granularidade. E funcionou. Armazenamentos NoSQL, KVs, armazenamentos de objetos (como R2) são abundantes. A ascensão do MapReduce para processamento de dados também tem a ver com granularidade; dividindo o processamento de dados em partes facilmente dimensionáveis (o mapa e a redução), foi possível lidar com grandes quantidades de dados com eficiência e aumentar e diminuir conforme necessário.
A mesma coisa está acontecendo com o código na nuvem. Assim como os programadores nem sempre querem pensar em pedaços do tamanho de um banco de dados, eles não deveriam ter que pensar em pedaços do tamanho de VMs ou contêineres. É ineficiente e não tem nada a ver com o trabalho real de escrever código para criar um serviço. É um trabalho desnecessário que desvia a atenção do valor real de programar algo para a existência.
Na teoria da programação distribuída, a granularidade existe há muito tempo. O modelo CSP é de pequenos processos executando tarefas e passando dados (ajudou a inspirar a linguagem Go); o modelo Ator tem mensagens transmitidas entre multidões de atores que mudam de estado interno; até mesmo o cálculo lambda trata de funções discretas agindo sobre dados.
A programação orientada a objetos faz com que os desenvolvedores raciocinem sobre objetos (não máquinas virtuais ou discos). E em CORBA, e sistemas similares, existe o conceito de objeto “request broker” que permite que objetos sejam executados e acessados remotamente em um sistema distribuído sem saber detalhes de onde ou como o objeto é executado.
A teoria da computação aponta para longe de máquinas dedicadas (virtuais ou reais) e para códigos e dados que rodam na Supercloud, lidando com os detalhes de execução de código e localidade de dados de forma automática e eficiente.
A vantagem da Supercloud
A Supercloud facilita o dimensionamento porque ninguém precisa pensar em quantas VMs provisionar, ninguém precisa manter VMs de espera ativa caso haja uma enxurrada de visitantes. Assim como o MapReduce (que traça sua herança ao cálculo lambda) escala para cima e para baixo, o mesmo deve acontecer com a computação de uso geral.
E não se trata apenas de algo escalável. Na Supercloud, tanto o código quanto os dados são móveis e se movem pela rede. Anexe dados ao código (como com Durable Objects; modelo hello Actor) e você terá uma base para aplicativos que podem ser dimensionados para qualquer tamanho e aproximar-se dos usuários conforme necessário para fornecer o melhor desempenho. Como alternativa, se seus dados estiverem imóveis, movemos seu código para mais perto deles, não importa quantas vezes você precise acessá-los.
Além disso, trabalhar com esse nível de flexibilidade significa que o código que impõe uma lei de privacidade ou residência de dados sobre onde os dados pode ser processados ou armazenados pode operar no nível de usuários ou objetos individuais. O mesmo código pode se comportar de maneira diferente e até mesmo ser executado em um país completamente diferente com base em onde seus dados associados são armazenados.
Uma Supercloud tem dois efeitos interessantes sobre o custo de execução de um programa. Em primeiro lugar, torna-o mais económico porque só roda o que precisa. Nunca há necessidade de VMs comprometidas aguardando trabalho ou máquinas ociosas pelas quais você está pagando apenas por precaução. O código é executado ou não. Ele escala para cima e para baixo conforme necessário. Você só paga pelo que precisa.
Em segundo lugar, cria uma plataforma de computação mais eficiente que é melhor para todos. Ele força a plataforma de computação (por exemplo, nós) a ser o mais eficiente possível. Temos que ser capazes de iniciar o código rapidamente por motivos de desempenho e escalonamento. Precisamos usar CPUs com eficiência porque nenhum cliente está nos pagando para manter CPUs ociosas por perto. E é melhor para o meio ambiente porque as máquinas em nuvem são executadas em níveis muito altos de utilização. Esse nível de eficiência é o que permite que nossa plataforma seja dimensionada para os dez milhões de solicitações que os Cloudflare Workers processaram no tempo que você levou para ler a última palavra desta frase.
E essa plataforma de computação vai muito além de uma máquina, data center ou país. Com o software certo (que construímos), ele é dimensionado para o tamanho da Internet. O software aloca recursos automaticamente em todo o mundo, movendo conexões, dados e processamento para alta eficiência e ótima experiência do usuário final.
Computação e armazenamento eficientes, uma rede global que está em todos os lugares, unida por um software que transforma o mundo em uma única nuvem. A supercloud.