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/





 


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 também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!

Fique por dentro de todos os conteúdos o/

 

Nossas redes sociais:

📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • https://facebook.com/onebitcode
 📱  • https://instagram.com/one_bit_code
🐦 • https://twitter.com/onebitcode

 

Nossos cursos:

🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
 ⚙  • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec

 

Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
E
stamos aqui para você 🙂

Bem-vindo à família OneBitCode o/

0 0 vote
Article Rating
janeiro 17, 2020
Subscribe
Notify of
guest
13 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Diogo Alves Miranda Barbosa
Diogo Alves Miranda Barbosa
1 ano atrás

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

Sergio Lima
1 ano atrás

Ótimo Diogo! Parabéns!

Vamos ver mais functions!!!

Ricardo Flosi
1 ano atrás

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

Sergio Lima
1 ano atrás
Reply to  Ricardo Flosi

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

Sergio Lima
1 ano atrás

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/

Ricardo Flosi
Ricardo Flosi
1 ano atrás
Reply to  Sergio Lima

Bora lá aprender…

Ricardo Flosi
Ricardo Flosi
1 ano atrás
Reply to  Sergio Lima

Outro ótimo post com exemplo mais elaborado. Um famoso “TODO” também seria bem-vindo.

Ricardo Flosi
1 ano atrás
Reply to  Sergio Lima

Muito bom! Principalmente o Servidor Local. Rodou redondo.
Essa nova versão é compatível com a forma antiga de se criar funções?

Christian Da Silva Auletta

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

Feito com s2 por OneBitCode
13
0
Would love your thoughts, please comment.x
()
x
%d blogueiros gostam disto: