Servidor Couchbase

FaaS sem servidor com AWS Lambda e Java

O que é uma arquitetura sem servidor?

A arquitetura sem servidor executa código personalizado em contêineres efêmeros que são totalmente gerenciados por terceiros. Normalmente, o código personalizado é uma pequena parte de um aplicativo completo. Ela também é chamada de função. Isso dá outro nome para a arquitetura sem servidor, como Função como um serviço (FaaS). O contêiner é efêmero porque pode durar apenas uma invocação. O contêiner pode ser reutilizado, mas não é algo em que se possa confiar. Como desenvolvedor, você carrega o código na plataforma FaaS e o serviço cuida de toda a capacidade, dimensionamento, aplicação de patches e administração da infraestrutura para executar seu código.

Um aplicativo criado usando a arquitetura sem servidor segue a abordagem orientada por eventos. Por exemplo, uma atividade aconteceu no aplicativo, como um clique. Isso é muito diferente de uma arquitetura clássica em que o código do aplicativo é normalmente implantado em um servidor de aplicativos, como o Tomcat ou o WildFly. Dimensionar o seu aplicativo significa iniciar instâncias adicionais do servidor de aplicativos ou ativar contêineres adicionais com o servidor de aplicativos empacotado. O balanceador de carga precisa ser atualizado com os novos endereços IP. Os sistemas operacionais precisam ser corrigidos, atualizados e mantidos.

Arquiteturas sem servidor explique a diferença entre o modelo de programação clássico e essa nova arquitetura sem servidor. Com uma plataforma FaaS, seu aplicativo é dividido em várias funções. Cada função é implantada no FaaS. O serviço ativa instâncias de computação adicionais para atender às demandas de escalabilidade do seu aplicativo. As plataformas FaaS fornecem o ambiente de execução e cuidam da inicialização e da desativação dos contêineres para executar sua função.

Ler Arquiteturas sem servidor para obter mais detalhes sobre essas imagens. Uma das grandes vantagens do FaaS é que você só é cobrado pelo tempo de computação, ou seja, o tempo em que seu código está sendo executado. Não há cobrança quando seu código não está em execução. Qual é a diferença entre as funções e as VMs e os contêineres?

Observe que os contêineres do Linux, em vez dos contêineres do Docker, são usados como uma implementação para o AWS Lambda.

Qual é a diferença entre FaaS e PaaS?

Conforme citado em Arquiteturas sem servidorUma resposta rápida é fornecida pelo tweet a seguir:

Em outras palavras, a maioria dos aplicativos de PaaS não é voltada para a ativação e desativação de aplicativos inteiros para cada solicitação, enquanto as plataformas de FaaS fazem exatamente isso. Abstraindo o back-end com FaaS explicar a diferença entre as diferentes ofertas de *aaS. A imagem do blog é capturada abaixo:
faas

Arquiteturas sem servidor também fornecem grandes detalhes sobre o que é e o que não é FaaS. AWS Lambda, Funções do Google Cloud e Funções do Azure são algumas das opções para executar aplicativos sem servidor. Este blog mostrará como escrever sua primeira função AWS Lambda.

O que é o AWS Lambda?

O AWS Lambda é um serviço FaaS da Amazon Web Services. Ele executa seu código em uma infraestrutura de computação de alta disponibilidade e realiza toda a administração dos recursos de computação, incluindo manutenção de servidor e sistema operacional, provisionamento de capacidade e dimensionamento automático, monitoramento de código e registro. O AWS Lambda cobra pelo tempo de execução do seu código em incrementos de 100 ms. Não há custo associado ao armazenamento da função Lambda no AWS.

O primeiro milhão de solicitações por mês é gratuito e, depois disso, o preço é nominal. Leia mais detalhes em Preços Lambda. Ele também oferece visibilidade do desempenho, fornecendo métricas e registros em tempo real para AWS CloudWatch. Tudo o que você precisa fazer é escrever o código! Aqui está uma rápida introdução:

Confira também O que há de novo no AWS Lambda em AWS ReInvent 2016:

Confira também os padrões de arquitetura sem servidor e as práticas recomendadas do AWS ReInvent 2016:

O código que você executa no AWS Lambda é chamado de função Lambda. Você carrega seu código como um arquivo zip ou o projeta usando o Console de gerenciamento do AWS Lambda. Há um suporte integrado para o AWS SDK, o que simplifica a capacidade de chamar outros serviços do AWS. Em resumo, o Lambda é uma computação escalável, sem servidor, na nuvem. O AWS Lambda oferece vários ambientes de execução:

  • Node.js - v0.10.36, v4.3.2 (recomendado)
  • Java - Java 8
  • Python - Python 2.7
  • .NET Core - .NET Core 1.0.1 (C#)

Este blog mostrará como fazer isso:

  • Crie um aplicativo Java que armazene um documento JSON no Couchbase
  • Use o Maven para criar um pacote de implantação para o aplicativo Java
  • Criar uma função Lambda
  • Atualizar a função Lambda

O código completo deste blog está disponível em github.com/arun-gupta/serverless/tree/master/aws/hellocouchbase.

Aplicativo Java para o AWS Lambda

Primeiro, vamos dar uma olhada em um aplicativo Java que será usado para essa função Lambda. Modelo de programação para funções Lambda em Java fornecem mais detalhes sobre como escrever seu código de função Lambda em Java. Nossa função Lambda implementará a interface predefinida com.amazonaws.services.lambda.runtime.RequestHandler. O código tem a seguinte aparência:

handleRequest é onde o código da função é implementado. Contexto fornece informações úteis sobre o ambiente de execução do Lambda. Algumas das informações do contexto são armazenadas em um documento JSON. Por fim, SDK Java do Couchbase API upsert é usado para gravar um documento JSON na instância identificada do Couchbase. Couchbase no Amazon EC2 fornece instruções completas para instalar o Couchbase no AWS EC2. As informações sobre o servidor Couchbase são obtidas como:

Mais uma vez, isso está usando a API Java do Couchbase CouchbaseCluster como ponto de entrada principal para o cluster do Couchbase. O COUCHBASE_HOST é passada quando a função Lambda é criada. No nosso caso, isso apontaria para um cluster do Couchbase de nó único em execução no AWS EC2. As variáveis de ambiente foram introduzidas recentemente no AWS Lambda. Por fim, você precisa acessar esse bucket no servidor:

O nome do bucket é sem servidor e todos os documentos JSON são armazenados nele. Um simples Aplicativo Hello World também pode ser usado para criar essa função.

Criar pacote de implantação do AWS Lambda

O AWS FaaS precisa de um pacote de implantação. Esse pacote Lambda é um pacote .zip ou .jar que contém todas as dependências da função. Nosso aplicativo é empacotado usando o Maven e, portanto, usaremos um plug-in do Maven para criar um pacote de implantação. O aplicativo tem pom.xml com o seguinte fragmento de plug-in:

Mais detalhes sobre a configuração do Maven estão disponíveis em Criação de um pacote de implantação .jar usando o Maven sem nenhum IDE. O plug-in maven-shade permite que você crie um uber-jar incluindo todas as dependências. O sombra está vinculado à meta pacote fase. Portanto, a pacote mvn gerará um único jar de implantação. Empacote o aplicativo usando o comando pacote mvn comando. Isso mostrará a saída:

O target/hello-couchbase-1.0-SNAPSHOT.jar é o jar sombreado que será implantado no AWS Lambda. Mais detalhes sobre a criação de um pacote de implantação estão em Criação de um pacote de implantação.

Criar função AWS Lambda

Criar uma função AWS Lambda usando CLI DO AWS. O comando da CLI, nesse caso, tem a seguinte aparência:

Nesta CLI:

  • função de criação cria uma função Lambda
  • --nome da função fornece o nome da função. O nome da função diferencia maiúsculas de minúsculas.
  • --Função especifica o Amazon Resource Name (ARN) de um Função de IAM que o Lambda assume quando executa sua função para acessar quaisquer outros recursos da AWS. Se você executou uma função Lambda
    usando o Console do AWS, essa função será criada para você.
  • --zip-file aponta para o pacote de implantação que foi criado na etapa anterior. arquivob é um protocolo específico da CLI do AWS para indicar que o conteúdo carregado é binário.
  • --manipulador é a classe Java que é chamada para iniciar a execução da função
  • -publicar solicite ao AWS Lambda que crie a função Lambda e publique uma versão como uma operação atômica. Caso contrário, várias versões poderão ser criadas e publicadas em um momento posterior.

O Lambda Console mostra:

servleress-couchbase-lambda-function

Teste a função Lambda do AWS

Teste a função Lambda do AWS usando a CLI do AWS.

Ele mostra a saída como:

A saída do comando é armazenada em hellocouchbase.out e se parece com isso:

A chamada dessa função armazena um documento JSON no Couchbase. Os documentos armazenados no Couchbase podem ser vistos usando o console da Web do Couchbase. O nome de usuário é Administrador e a senha é o ID da instância do EC2. Todos os buckets de dados nessa instância do Couchbase são mostrados abaixo:

serverless-couchbase-bucket-overview

Observe que o sem servidor é criado manualmente. Clicar em Documentos mostra detalhes de diferentes documentos armazenados no compartimento:

serverless-couchbase-bucket-documents

Clicar em cada documento mostra mais detalhes sobre o documento JSON:

serverless-couchbase-bucket-document

A função Lambda também pode ser testada usando o Console:

serverless-couchbase-console-test

Atualizar a função AWS Lambda

Se a lógica do aplicativo mudar, um novo pacote de implantação precisará ser carregado para a função Lambda. Nesse caso, pacote mvn criará um pacote de implantação e o aws lambda O comando CLI é usado para atualizar o código de função:

Mostra o resultado:

A função pode então ser chamada novamente. Durante a redação deste blog, isso também foi usado com frequência para depurar a função. Isso ocorre porque as funções Lambda não têm nenhum estado ou caixa associado a elas. Portanto, você não pode fazer login em uma caixa para verificar se a função não foi implementada corretamente. Você certamente pode usar as declarações de registro do CloudWatch quando a função estiver funcionando.

Referências do AWS Lambda

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase

Arun Gupta é o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experiência na liderança de equipes multifuncionais para desenvolver e executar estratégias, planejamento e execução de conteúdo, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e é membro fundador da equipe Java EE. Gupta é autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experiência em palestras em mais de 40 países sobre diversos tópicos e é um JavaOne Rock Star há três anos consecutivos. Gupta também fundou o capítulo Devoxx4Kids nos EUA e continua a promover a educação tecnológica entre as crianças. Autor de vários livros sobre tecnologia, corredor ávido, viajante do mundo inteiro, campeão de Java, líder de JUG, membro do NetBeans Dream Team e capitão do Docker, ele pode ser facilmente acessado em @arungupta.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.