Serverless architecture

Olá, tudo bem?

Há alguns anos atrás tive a oportunidade de assistir a uma das melhores palestras técnicas de toda a minha vida: “Reactive programming for all” - Fabio Galuppo e Rafael Monteiro.

Até aquele momento, eu nunca havia parado para pensar sobre o “reactive way”, mas poucos meses depois, o serviço DocumentDB do Azure foi liberado, e o que chamou a minha atenção é que havia o conceito de triggers e stored procedures. Em outras palavras, exatamente o que eu havia visto na palestra, aplicado no Azure.

Um trigger (gatilho), nada mais é do que um interceptador, isto é, dado um determinado evento, podemos interceptar antes ou após a execução do mesmo:

Por exemplo:

    Dado que um novo documento foi criado no DocumentDB,
    podemos obter os valores deste documento
    e indexá-los na engine de busca.

Como principal benefício, ao invés de agendarmos uma rotina para de tempos em tempos pesquisar no banco de dados por novos registros, agora utilizamos a maneira reativa, um evento será disparado quando houver um novo documento ou que um documento foi atualizado.

Estou utilizando o DocumentDB como exemplo, no entanto diversos serviços no Azure também oferecem o mesmo recurso:


  • Blob Service - quando um novo blob foi criado

  • Service Bus Queue - quando há uma nova mensagem na fila

  • Lista completa

No final a idéia é a mesma: notificar o programador quando determinado evento ocorreu, e com isto, permitir a utilização de programação reativa (reactive programming). Programação reativa é a base de serverless architectures, a buzzword do momento quando o assunto é cloud computing.

Não se engane com a tradução literal do termo, ainda precisamos de um servidor para hospedar e executar nosso código, no entanto, não precisamos mais nos importar com isto. Apenas escrevemos o código que será executado, e a plataforma se encarrega do resto.

Se você olhar com calma, irá perceber que é possível utilizar os recursos computacionais (cpu, memória, disco) de uma maneira muito mais eficiente utilizando programação reativa. Não precisamos mais de uma máquina virtual rodando 100% do tempo.

Podemos combinar containers (que iniciam em milésimos de segundos) + programação reativa, e usar recursos computacionais apenas quando houver necessidade, isto é, quando determinado evento ocorrer, e logo após a execução, “destruir” este container.

Estamos falando da evolução da plataforma como serviço, pois de fato, você só irá pagar pelo tempo de execução e pelos recursos computacionais utilizados.

Se quiser se aprofundar no tema “Serverless architecture”, recomendo à leitura do post no blog do Martin Fowler:

Serverless Architectures

Até o próximo post pessoal!

Compartilhar