1. Introdução
Hoje (aproximadamente 24 de julho de 2017), a equipe Go do Google lançou o novo projeto Open Source
Go Cloud , uma biblioteca e ferramentas de desenvolvimento em
nuvem aberta . Com este projeto, pretendemos que os desenvolvedores escolham o idioma Go para criar aplicativos entre nuvens.
Esta postagem explica por que iniciamos este projeto, detalhes de como o Go Cloud funciona e como se envolver e começar a usá-lo.
Por que programação em nuvem cruzada? Porque agora?
Estimamos que haja
mais de um milhão de desenvolvedores usando o Go no mundo. O Go atende a muitos dos projetos mais críticos para a nuvem, incluindo Kubernetes, Istio e Docker. Empresas como Lyft, Capital One, Netflix e
muitas outras dependem da Go para produção. Ao longo dos anos, descobrimos que os desenvolvedores adoram usar o Go para desenvolvimento em nuvem devido à sua eficiência, produtividade, competitividade interna e baixa latência.
Como parte de nosso trabalho para apoiar o rápido desenvolvimento do Go, entrevistamos equipes que trabalham com o Go e compreendem como eles usam o idioma e como melhorar o ecossistema do Go no futuro. Um dos principais tópicos mencionados entre muitas organizações pesquisadas é a necessidade de desenvolvimento entre nuvens. Essas equipes (entrevistadas) desejam implantar seus aplicativos em ambientes de
nuvem híbrida e com
várias nuvens e distribuir a carga entre os provedores de nuvem sem alterações significativas no código do aplicativo.
Para conseguir isso, algumas equipes tentam desatar seus aplicativos de uma API específica do provedor para escrever um código mais simples e mais portátil (entre nuvens). No entanto, os requisitos de curto prazo para a entrega da funcionalidade significa que as equipes precisam sacrificar os requisitos de longo prazo para a computação em nuvem cruzada. Como resultado, a maioria dos aplicativos Go em execução na nuvem está firmemente anexada ao provedor de nuvem originalmente selecionado.
Como alternativa, as equipes podem usar o Go Cloud, um conjunto de APIs de nuvem abertas e compartilhadas, para programar aplicativos em nuvem mais simples e portáteis. O Go Cloud também fornece a base para um ecossistema de bibliotecas de nuvem portáteis. O Go Cloud permite que as equipes se concentrem na funcionalidade durante o desenvolvimento de aplicativos, mantendo a flexibilidade de longo prazo para implantar aplicativos em arquiteturas de nuvem múltipla e nuvem híbrida. Os aplicativos Go Cloud também podem ser migrados para o provedor de nuvem que melhor se adapte às necessidades do aplicativo.
O que é o Go Cloud?
Identificamos serviços comuns usados por aplicativos em nuvem e criamos uma API comum para trabalhar entre provedores de nuvem. Hoje, o Go Cloud pode trabalhar com armazenamento de blob, banco de dados MySQL, configurações de tempo de execução (configuração) e servidor HTTP configurado com registro de solicitação, monitoramento e verificação de integridade. O Go Cloud trabalha com o Google Cloud Platform (GCP) e o Amazon Web Services (AWS). Continuaremos a trabalhar com parceiros do setor de nuvem e com a comunidade Go para adicionar suporte a outros provedores de nuvem em um futuro próximo.
O Go Cloud tem como objetivo desenvolver uma API comum neutra em relação ao fornecedor para a maioria dos serviços utilizados, por exemplo, implantação simples e fácil de aplicativos Go em outra nuvem. O Go Cloud também pode ser usado como base para o desenvolvimento de outras bibliotecas de código aberto para trabalhar entre provedores de nuvem. Os comentários de todos os tipos de desenvolvedores e em todos os níveis de desenvolvimento afetarão a prioridade da implementação / adição desta ou daquela funcionalidade em versões futuras da API da Go Cloud.
Como isso funciona?
O Go Cloud é baseado em um conjunto de APIs comuns para programação entre nuvens. Vejamos um exemplo de uso do armazenamento de blob. Você pode usar o tipo
* blob.Storage genérico para copiar um arquivo de uma unidade local para a nuvem. Vamos começar abrindo o armazenamento S3 usando o pacote
s3blob :
A partir do momento em que
* blob.Bucket aparece no aplicativo, você tem a oportunidade de criar
* blob.Writer , que por sua vez implementa a interface
io.Writer . A partir desse momento, o aplicativo (programa) pode usar
* blob.Writer para gravar dados no armazenamento em nuvem, verificando se
Close não retorna um erro.
ctx := context.Background() b, err := setupBucket(ctx) if err != nil { log.Fatalf("Failed to open bucket: %v", err) } data, err := ioutil.ReadFile("gopher.png") if err != nil { log.Fatalf("Failed to read file: %v", err) } w, err := b.NewWriter(ctx, "gopher.png", nil) if err != nil { log.Fatalf("Failed to obtain writer: %v", err) } _, err = w.Write(data) if err != nil { log.Fatalf("Failed to write to bucket: %v", err) } if err := w.Close(); err != nil { log.Fatalf("Failed to close: %v", err) }
Observe que a lógica de trabalhar com o armazenamento (bucket) não se refere às especificidades do AWS S3. O Go Cloud torna a substituição do armazenamento em nuvem essencialmente um substituto para a função usada para abrir
* blob.Bucket . Um aplicativo pode facilmente mudar para o Google Cloud Storage instanciando
* blob.Bucket usando
gcsblob.OpenBucket sem alterar o código que copia o arquivo:
Até o momento, no entanto, são necessárias etapas diferentes para acessar o armazenamento para vários provedores de nuvem, o tipo final usado pelo aplicativo permanece o mesmo
* blob.Bucket . Portanto, o código do aplicativo permanece isolado do código específico da nuvem. Para aumentar a compatibilidade com as bibliotecas Go existentes, o Go Cloud usa interfaces existentes fornecidas na biblioteca Go padrão, como
io.Writer ,
io.Reader e
* sql.DB.O código necessário para acessar os serviços em nuvem (a função
setupBucket () do exemplo acima) segue o seguinte padrão: abstrações mais altas são construídas usando abstrações (mais baixas) mais básicas. Embora você possa escrever esse código com canetas, o Go Cloud automatiza isso com o
Wire , uma ferramenta que gera código específico da nuvem para você.
A documentação do Wire explica como instalá-lo e usá-lo, enquanto os
exemplos mostram o Wire em ação.
Como se envolver no projeto e aprender mais?
Para começar, recomendamos o seguinte
guia e, em seguida, tente criar o aplicativo usando o Go Cloud. Se você já usa AWS ou GCP, pode tentar migrar partes de aplicativos existentes para usar o Go Cloud. Se você usar outros provedores de nuvem ou um serviço local, poderá estender o Go Cloud para dar suporte a isso implementando interfaces de driver (por exemplo,
driver.Bucket ).
Apreciaremos todo e qualquer tipo de experiência com o Go Cloud.
O desenvolvimento do
Go Cloud é
desenvolvido com o GitHub. Teremos o maior prazer em qualquer contribuição para o projeto, incluindo piscina de recuperação. Crie um
problema para nos informar o que você acha que deve ser aprimorado ou quais APIs a biblioteca deve suportar em primeiro lugar. Para ficar atento às atualizações e notícias, entre na
lista de discussão do projeto.
O projeto exige que os colaboradores assinem o mesmo Contrato de Licença de Colaborador adotado pelo projeto Go. Leia
o Guia do Colaborador para obter mais detalhes.
Obrigado pelo tempo gasto em conhecer o Go Cloud, temos o prazer de trabalhar com você para tornar o Go a escolha dos desenvolvedores para a criação de aplicativos portáteis (entre nuvens).