FaaStRuby: A plataforma Serverless para Ruby

O que vamos aprender

Olá amigos developers, quero compartilhar com vocês uma das mais emergentes tecnologias para Cloud Computing. Estou falando sobre as “functions as a service” ou FaaS.

Neste artigo quero que explorem comigo uma solução introdutória, construindo uma função FaaS, passo a passo, usando a plataforma Serverless FaaStRuby, e disponibilizando a solução na nuvem.

FaaStRuby é uma plataforma incrível, construída pelo brasileiro Paulo Arruda, que permite trabalharmos de forma facilitada com funções FaaS.

Tenho feito testes, e pela experiência, trabalhar com a plataforma FaaStRuby, lembra muito o Heroku, onde toda a infraestrutura do servidor é abstraída.

Se você não está familiarizado com esses termos, não se preocupe, falaremos mais sobre FaaStRuby, FaaS e Serverless a seguir.

Neste material você também verá um caso de uso sobre FaaS. O próprio Paulo Arruda comenta sobre um cenário onde ele teve que implementar uma solução onde essas “funções” resolveram problemas de performance, escalabilidade, e ainda reduziram custos.

Sigam o passo a passo e construam a solução na seção “Passo a Passo da Criação da Função”. Assim, o padrão de arquitetura Serverless, o desenvolvimento em Ruby no estilo FaaS, e alguns outros detalhes podem ficar mais claros.

Quando puderem, compartilhem o link que será criado na plataforma FaaStRuby. 🌍

Aproveitem o material e deixem uma mensagem. 😊… bóra ler o post 🚌

O que é Serverless?

Serverless é um modelo de arquitetura, na qual o provedor deste tipo de serviço na nuvem, atua como um servidor, provisionando todo o ambiente necessário, e gerenciando dinamicamente a alocação de recursos na máquina.

Nesta arquitetura não se usa servidores?

O nome serverless, “sem servidor”, é usado porque as decisões de gerenciamento de servidor e planejamento de capacidade são completamente ocultas do desenvolvedor.

O código sem servidor pode ser usado em conjunto com o código implantado em estilos tradicionais, como microsserviços.

Como alternativa, os aplicativos podem ser gravados para serem puramente sem servidor e não usarem servidores provisionados.

Então, apesar do nome “sem servidor”, existe pelo menos um servidor envolvido nesta solução na nuvem.

O foco é no software e não na infraestrutura.

O nome serverless vem do fato que o trabalho de deploy para o servidor, configuração do servidor e configurações da infraestrutura, ficam totalmente abstraídos do processo de desenvolvimento de software.

Desta forma, o profissional de desenvolvimento pode dedicar-se ao andamento de seu trabalho, que é criar o produto de software e focar em regras específicas do negócio.

 

O que é FaaS?

Vamos falar agora sobre “Functions as a Service” (FaaS).

Serviços na nuvem que oferecem a arquitetura Serverless incluem execução de código personalizado. Esses códigos, que são programas desenvolvidos em determinada linguagem de programação, são as chamadas functions, “funções”.

Essas funções rodam em contêineres efêmeros, gerenciados pela plataforma FaaS.

Contêineres efêmeros?

Sim, contêineres efêmeros, pois o provedor de FaaS é responsável por alocar recursos,  executar a função, e logo em seguida desligar o servidor que executou a função.

Esse processo é bem rápido: assim que o serviço consumidor de dados obtém o resultado da função, o servidor que deu a resposta já não existe mais.

FaaS permite ao desenvolvedor executar código em resposta a eventos, daí vem o nome Function as a Service. É possível criar a função e determinar qual evento vai invocar aquela função.

FaaS são orientadas a eventos?

Sim, é correto dizermos que FaaS são orientadas a eventos. Evento, neste contexto que estamos falando, é algo que dispara a função. Exemplos:

  • Uma requisição HTTP que consome algum endpoint da função.
  • Uma rotina executada de hora em hora, onde o evento que dispara a função é um timer.

 

Para que servem as FaaS?

Alguns problemas que as FaaS resolvem
Infraestrutura abstraída O desenvolvedor não precisa se envolver com preocupações como quantidade de servidores necessários, ou máquinas virtuais a serem usadas.
Escalabilidade Dinâmica As exigências de escalabilidade ficam sob responsabilidade somente do provedor do serviço FaaS.

O provedor FaaS garante que a aplicação executará e dará resposta dentro do tempo estimado.

Funções executadas sob demanda As funções são executadas por demanda.

Assim que um evento é disparado, o provedor FaaS detecta o evento e  liga a função, aloca os recursos necessários e desliga a função imediatamente em seguida.

Economia de custos As funções FaaS são rápidas e executadas em milésimos de segundos.

Isto gera economia, já que as funções consomem custos do servidor na nuvem somente quando são utilizadas.

Além da economia da própria infraestrutura, notamos também a redução de custos de pessoal: desenvolver aplicações serverless resulta em melhor alocação de pessoas, pois os custos de se ter profissionais para manter a infraestrutura serão diminuídos.

 

O que é FaaStRuby?

FaaStRuby (https://faastruby.io/) é uma plataforma Serverless para desenvolvedores Ruby. Seu objetivo é prover serviços e toda a infraestrutura necessária para “funções” FaaS rodarem na nuvem, estarem disponíveis quando necessárias e executarem em tempo hábil.

No momento em que escrevo este artigo, a plataforma permite criar “funções” em Ruby nas versões 2.5.3 e 2.6.0 e em Crystal na versão 0.27.0.

Paulo Arruda, @parrudanet, é brasileiro, residente no Canadá, criador da plataforma e a mantêm em crescimento e atualização constante.

Para saber mais sobre FaaStRuby acesse o blog neste endereço https://faastruby.io/blog/.

E fiquem ligados 📺. Logo este autor estará escrevendo artigos também para o blog do FaaStRuby! 😊

 

Um Caso de Uso.

Conversando com Paulo Arruda, o criador da plataforma FaaStRuby, perguntei em qual momento ele teve que resolver algo em que as “funções” foram necessárias e tiveram um impacto significante na solução.

O cenário.

Paulo trabalhava numa empresa, na qual havia uma aplicação Rails tipo APIs, como backend de um aplicativo mobile.

Para se usar uma boa comparação, o aplicativo funcionava como o Uber – o dispositivo móvel reportava a localização em tempo real do usuário.

Paulo conta que à medida que mais e mais usuários baixavam o aplicativo e usavam o serviço pelo celular, aumentavam os acessos à aplicação tipo API.

O problema.

Subitamente, os acessos aos servidores cresceram e, investigando as requisições registradas no log do servidor, a equipe verificou que o end-point “PUT /location” era responsável por 90% do tempo utilizado para responder às requisições.

Naquele momento, já eram necessários cinco servidores para suportar o tráfego da API e, além disso, performance de outras aplicações existentes nos mesmos servidores estava degradada.

A Solução usando FaaS.

A solução foi remover ou desacoplar o endpoint “PUT /location” da API, construí-la na forma de “função” e disponibilizá-la na plataforma FaaStRuby.

Assim, reduziu-se o número de servidores da API para 1 ou 2, economizando dinheiro, recursos e tempo, já que a plataforma executa cada requisição em paralelo e lida com as dificuldades de autoscale para o desenvolvedor.

 

O que vamos criar?

Utilizando a plataforma FaaStRuby – que provê serviços e toda a infraestrutura necessária para nossas funções – vamos criar uma função em Ruby e disponibilizá-la rapidamente na internet.

Hello World, never gets old 😊

É comum para todo desenvolvedor de software, ao começar a usar uma tecnologia, criar o famoso programa “hello world”.

Neste caso não será diferente. Vamos criar uma função que nos responderá “hello world”.

 

 

Ferramentas

  • 1 – Ruby 2.6.0
  • 2 – Gem FaaStRuby

 

Passo a Passo da Criação da Função

 

 

“UPDATE March 12, 2019 – This tutorial is outdated and we’re working to update it to work with FaaStRuby 0.5. In the meantime check out our legacy documentaion here.”

 

I – Instalação

01) Para nosso projeto, vamos criar uma pasta e entrar dentro dela.

02) Execute este passo somente se você usa o gerenciador de versões Ruby, RVM:

03) Instale a gem. Esta gem é uma Ferramenta CLI que vai disponibilizar os comandos da plataforma FaaStRuby no nosso terminal:

04) Para saber se deu certo vamos ver a versão da gem:

  • Para mim esta é a versão atual: 0.4.8
  • Note que a sua versão pode ser mais nova, pois a plataforma está sendo atualizada constantemente.

05) Os comandos disponíveis estão muito bem documentados. Para ver o help digite:

 

II – Criando a sua Workspace

01) Neste ponto é bom saber como começar a trabalhar com o FaaStRuby.

  • As workspaces
    • Para trabalhar com funções você precisa criar antes uma workspace.
    • Workspaces são áreas de trabalho onde serão armazenadas suas funções.
    • As workspaces tem nome exclusivo. Isto quer dizer que se você tentar criar uma workspace que já existe, o comando irá retornar uma mensagem de erro avisando sobre isto.
    • Você só pode criar workspaces com nomes que ainda não existem na plataforma.
  • Informe seu e-mail
    • No momento da criação da workspace você pode informar seu e-mail.
    • Não é obrigatório mas facilita sua localização caso o suporte técnico da plataforma FaaStRuby precise entrar em contato.
  • Crie a pasta local
    • Para criar workspaces, existe a flag –create-local-dir, que cria a pasta local de mesmo nome de sua workspace.
    • É opcional. Você pode criar uma pasta pelo comando mkdir mesmo ou não precisa criar pasta, se preferir.
    • Eu prefiro criar uma pasta com o mesmo nome da workspace, apenas para minha organização.
  • Substitua no comando a seguir:
    • “minha-workspace” pelo nome da workspace que você escolheu.
    • “meu-email@mail.com” pelo seu e-mail.

02) Ponto de checagem.

  • Se tudo deu certo, agora você tem uma workspace na nuvem…
  • e também uma pasta de mesmo nome criada localmente.
  • Você também terá um arquivo local com o nome de sua(s) workspace(s) e suas credenciais.
  • Essas credenciais são importantes, e só você tem acesso a elas. Em caso de perda, não há como o serviço FaaStRuby recuperá-las para você.
  • Para verificar, faça:

  • Sempre que precisarmos verificar nossas workspaces na nuvem, está disponível o comando, “list-workspace”.
  • List-workspace, mostra todas as “funções” que existem dentro da uma workspace.
  • Por enquanto não temos nenhuma.

03) Continuando, vamos entrar dentro da pasta que criamos:

 

III – Criando a sua Função

01) Agora sim, vamos criar nossa primeira função. Como se trata de um Hello World, nada mais óbvio do que ter o nome hello-world:

  • Sua função só precisa ter nome exclusivo dentro da workspace
  • Será criada automaticamente a pasta de mesmo nome da função
  • Logo em seguida entre dentro da pasta

02) Agora vamos editar o arquivo que responderá “Hello, World!”.

  • Edite o arquivo handler.rb criado pelo comando anterior.
  • Você pode usar qualquer outro editor para texto puro, mas eu uso o vim 👊💪
  • Dentro do arquivo handler.rb existe o método “handler”.
  • O método handler é nosso “entry point”. É por ali que a função irá começar.

03) Faça o arquivo “handler.rb” ficar parecido com esta listagem:

04) O FaaStRuby já vem com um teste unitário pronto:

  • Por enquanto o teste unitário a seguir não precisa ser modificado.
  • É importante saber:
    • Você irá fazer um deploy daqui a pouco e o FaaStRuby irá executar esse teste unitário ou qualquer outro que você tenha feito.
    • O deploy vai ser executado somente se seus testes passarem com sucesso.
    • Existem meios de mudar esse comportamento, mas por enquanto isso é suficiente para você saber.

05) Ponto de checagem.

  • Se tudo deu certo, agora você tem uma função pronta para ser enviada para sua workspace na nuvem.
  • Antes vamos verificar se está funcionando localmente.
  • FaaStRuby disponibiliza um servidor local, para verificar se tudo está funcionando bem.
  • O servidor local deve ser executado em outra pasta, no nosso caso, a pasta “faastruby”.

 

IV – Deploy: “Hello Production”

01) Agora é o momento de enviar para a nuvem. 🚀

  • O comando “deploy-to” serve para fazer o deploy de sua função para dentro da workspace criada anteriormente.
  • Antes de enviar, o comando executa testes unitários, localmente.
  • Depois prepara um “build”, um arquivo zip, que será enviado ao servidor.
  • Finalmente sua função será enviada para a plataforma e estará disponível através de uma URL.

02) Conferindo se a função está aparecendo dentro da workspace.

03) Acessando a função na nuvem.

 

V – Outras Soluções

01) Com esta plataforma é muito fácil criar protótipos também.

  • Vamos imaginar que você está num projeto com vários desenvolvedores e equipes.
  • Uma equipe de front-end precisa de dados relevantes de seu aplicativo back-end, agora.
  • Você pode disponibilizar esses dados num end-point, mesmo que ainda o banco não esteja sendo acessado, e as regras ainda não estejam implementadas no aplicativo back-end.
  • Assim, o end-point fica disponível para a outra equipe ir trabalhando em paralelo, enquanto a equipe de back-end transforma este protótipo em algo real.
  • Vamos implementar esse exemplo de protótipo?
  • Modifique o método “handler” para ficar como o seguinte.

02) Ajustando os testes unitários.

  • Agora altere minimamente os testes.

03) Vamos rodar os testes.

  • Use o rspec para testar, como nas aplicações Rails.

04) Faça o deploy. 🚀

 

Conclusão

Neste artigo, criamos uma função tipo FaaS, usando a plataforma serverless FaaStRuby, que oferece facilidade no desenvolvimento, na medida que permite ao programador construir suas próprias funções, sem se preocupar com configurações de servidores ou configuração de infraestrutura.

Na parte teórica do artigo, ficamos sabendo o que é Serverless, o que são as “functions as a service”, e o que é a plataforma FaaStRuby.

Paulo Arruda, o criador da plataforma FaaStRuby, nos deixou um caso real de utilização das “funções”, enriquecendo nosso conhecimento sobre este tipo de arquitetura.

Acompanhamos na prática, a criação da solução “Hello World”, aplicando os recursos de disponibilizados pela gem da FaaStRuby.

Ainda na parte prática, modificamos a função “Hello World” para se tornar um pequeno protótipo, que pode ser usado para atender outras equipes, permitindo que uma equipe trabalhe em paralelo com outra.

Espero que o artigo seja útil em algum momento, e espero que tenham gostado! 👍

Agora desafio você a criar sua própria function! Envie para nós sua solução nos comentários 😀

Até o próximo post 😎

 

Referências

http://www.latrovacommits.com/pt/2017/08/14/o-que-e-serverless/
https://martinfowler.com/articles/serverless.html
https://martinfowler.com/bliki/Serverless.html
https://rubygems.org/gems/faastruby
https://faastruby.io/
https://faastruby.io/api-documentation/



12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas \o/




Você é novo por aqui?

Primeira vez no OneBitCode? Curtiu esse conteúdo? O OneBitCode tem muito mais para você!

O OneBitCode traz conteúdos de qualidade e em português sobre programação com foco em Ruby on Rails e outras tecnologias como Angular, Ionic, React, desenvolvimento de Chatbots e etc.

Se você deseja aprender mais, de uma forma natural e dentro de uma comunidade ativa, visite nosso Facebook e nosso Twitter, veja os screencasts e talks no Youtube, alguns acontecimentos no Instagram, ouça os Podcasts e faça parte de nossa Newsletter.

Além disso, também estamos com alguns e-Books muito interessantes para quem deseja se aprimorar como programador e também como freelancer (os e-Books são gratuitos!):

Espero que curta nossos conteúdos e sempre que precisar de ajuda com os tutoriais, fala com a gente! Seja por Facebook ou e-mail, estamos aqui para você 🙂

Bem-vindo à família OneBitCode \o/

março 14, 2019

13
Deixe um comentário

avatar
6 Comment threads
7 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Christian Da Silva AulettaSergio LimaRicardo FlosiRicardo FlosiSergio Lima Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Diogo Alves Miranda Barbosa
Visitante
Diogo Alves Miranda Barbosa

Muito bom o post, segue ai o faas que fiz https://api.tor1.faastruby.io/dworks/dwfuction

Sergio Lima
Visitante

Ótimo Diogo! Parabéns!

Vamos ver mais functions!!!

Ricardo Flosi
Membro
Ricardo Flosi

Ótimo post… Deu uma boa ideia do processo. Agora só falta aquele “famoso” CRUD utilizando o FaaS.

Sergio Lima
Visitante

Obrigado. Boa ideia Ricardo. Pode ser tema de um próximo post!

Sergio Lima
Visitante

Querem vai mais functions? Leiam meu post que saiu no próprio blog do FaaStRuby
https://faastruby.io/blog/building-a-simple-landing-page-with-faastruby-functions/

Christian Da Silva Auletta
Membro
Christian Da Silva Auletta

Qual a diferença entre o Digital Ocean? por exemplo

Feito com s2 por OneBitCode
%d blogueiros gostam disto: