• Nenhum resultado encontrado

FaaS Aplicado a IoT

No documento Universidade de Brasília (páginas 76-81)

4.5 Internet das Coisas

4.5.1 FaaS Aplicado a IoT

A área de IoT cresceu significativamente nos últimos anos e espera-se que atinja uma quantidade gigantesca de 50 bilhões de dispositivos até 2020 [130]. O surgimento de arquiteturas sem servidor levanta a questão da adequação de usá-las em ambientes de IoT. A combinação de IoT com design de arquitetura sem servidor pode ser eficaz ao tentar usar o poder de processamento existente em uma rede local de dispositivos de IoT, e criar uma camada de névoa, chamada de Fog Commputing [131], que aproveite os recursos de computação mais próximos do usuário final [130].

Trazer o conceito de FaaS para a IoT levanta vários problemas que desafiam os funda- mentos da computação sem servidor (FaaS). Em primeiro lugar, os dispositivos de IoT, na maioria dos casos, não fazem parte da nuvem, mas estão na fronteira entre os domínios digital e o físico. Como tal, os dispositivos capturam, representam e manipulam o estado do Mundo real, o que torna a borda um ponto bastante relevante [28]. Outra questão é que, embora os cálculos possam ser efêmeros e de curta duração, sentir o Mundo físico é um processo contínuo, e as ações executadas podem ter consequências permanentes.

A Figura 4.9 mostra uma arquitetura de interação entre sensores IoT e uma nuvem através de serviços FaaS. Na arquitetura apresentada na Figura 4.9, utilizando API REST os sensores enviam informações aos serviços de FaaS, que por sua vez interagem com

outros componentes da nuvem como bancos de dados e serviços de armazenamento. Caso necessite encaminhar informações aos sensores, os serviços de FaaS também podem utilizar uma API REST.

Figura 4.9: Integração entre sensores IoT e FaaS.

A abstração de hardware é a chave para um ecossistema próspero em torno de dispo- sitivos IoT. Assim sendo, deve ser possível aos desenvolvedores escreverem e implantarem código, independentemente das especificidades dos dispositivos [28]. Da mesma forma, um dispositivo IoT deve ser capaz de consumir poder de processamento sem precisar conhecer as especificidades da linguagem de programação associada. Nesse contexto, a combinação entre IoT e FaaS, utilizando integração por meio de API REST, mostra-se como uma alternativa bastante eficaz.

Alguns trabalhos vem fazendo uso da composição de FaaS com IoT. O framework Kappa [28] é um exemplo dessa utilização. Essa solução foi construída para executar no topo da pilha sobre o framework IoT Calvin [132]. A sua arquitetura é mostrada na Figura 4.10, na qual é possível compreender que o Kappa atua como uma ponte entre a nuvem e o dispositivo IoT, utilizando uma abordagem de FaaS.

O artigo [131] apresenta a proposta de estender o conceito de FaaS para a computa- ção em borda, na qual parte do processamento ocorre entre o cliente e o servidor, com o objetivo de melhorar o desempenho geral da aplicação e desonerar o servidor [133]. Utilizando um modelo baseado em dispositivos de IoT, essa abordagem foi denominada de Fog Function e é apropriada para cargas de trabalho que demandam uso intensivo de dados. Os autores elaboraram um mecanismo de orquestração orientado a contexto para acionar, configurar e otimizar dinâmica e automaticamente a implantação da Função Fog nos ambientes de nuvem e de borda.

4.6

Considerações Finais

Diante do exposto neste capítulo, nota-se claramente o potencial protagonismo que os serviços de FaaS podem exercer no cenário da computação em nuvem. Os benefícios da adoção desse modelo têm impulsionado o seu avanço, entretanto, ainda existem lacunas que dificultam a sua adesão como, por exemplo, a necessidade de conhecer as diversas API e SDKs dos provedores. Além disso, necessidades de ajustes em aplicações já desenvolvidas podem frear um processo de incorporação desse modelo, suprimindo suas vantagens.

Por essa razão, este trabalho propõe uma forma de mitigar essas dificuldades, redu- zindo o espaço entre o desenvolvedor e os melhores resultados por meio do uso de serviços de FaaS de forma automatizada.

Assim sendo, acredita-se que o uso de um framework capaz de converter automati- camente aplicações monolíticas para trabalharem de maneira orientada a Function as a

Service, de forma transparente e otimizada, é a alternativa mais apropriada para esse con-

texto. No próximo capítulo será detalhado o framework Node2FaaS, proposto n63,este trabalho, com o intuito de atender a essa demanda.

Capítulo 5

Framework Node2FaaS

Neste capítulo será apresentada a proposta deste trabalho, o framework Node2FaaS. O capítulo está dividido em dez seções, sendo a primeira seção (5.1) reservada para as considerações iniciais e a última seção (5.10) reservada para as considerações finais. Na Seção 5.2 é apresentada a linguagem de programação JavaScript, e na Seção 5.3 o NodeJS. As Seções 5.4 e 5.5 detalham as características da proposta deste trabalho tais como a arquitetura do Node2FaaS e a sua composição interna. Em seguida, na Seção 5.6, são apresentados os blueprints arquiteturais construídos para definir a integração entre o orquestrador utilizado como interface entre o Node2FaaS e os provedores de nuvem. A Seção 5.7 apresenta o fluxo de execução do framework Node2FaaS e em seguida a Seção 5.8 descreve o analisador de aderência ao paradigma do FaaS. Por último, na Seção 5.9, são analisados os trabalhos relacionados a esta proposta.

5.1

Considerações Iniciais

À medida em que a computação evolui, as arquiteturas de software precisam se ajustar às necessidades das aplicações em utilização no momento. Já foi o tempo em que máquinas gigantescas cuidavam de todo o processamento, e o software era executado majoritaria- mente nos grandes mainframes. Com a popularização dos computadores pessoais, o poder computacional disponível nessas máquinas passou a ser melhor utilizado e, então, o pro- cessamento do software foi gradativamente migrando para a execução no lado do cliente [134].

Nesse cenário, aplicações desenvolvidas usando a arquitetura monolítica possuem li- mitações arquiteturais que dificultam ganhos de escalabilidade. Uma forma de mitigar essa dificuldade é utilizar serviços de nuvem como FaaS [135] para processar segmentos do sistema. O FaaS, como apresentado no Capítulo 4 é um modelo de serviço no qual o cliente carrega um trecho de código, escrito em uma determinada linguagem, e o provedor

oferece o processamento desse código a partir de uma chamada do serviço, em geral via API REST [24]. Esse modelo encapsula toda a complexidade envolvida na infraestrutura. Todavia, fazer uso do modelo de FaaS não é trivial, pois exige que o usuário conheça a forma de consumo que cada provedor oferece. Além disso, é necessário que o desenvolvedor construa as aplicações considerando o uso desse modelo, ou invista considerável tempo ajustando aplicações já desenvolvidas para trabalharem com FaaS.

Dessa forma, para utilizar os serviços de FaaS é necessário que o desenvolvedor co- nheça os detalhes das APIs de cada provedor, bem como saiba segmentar as funções das aplicações e convertê-las em chamadas adequadas à estrutura do serviço. Esse processo pode se tornar enfadonho, e desencorajar os desenvolvedores a adotarem uma abordagem baseada em FaaS. Com isso, muitos profissionais podem desistir dos benefícios que uma arquitetura baseada em nuvem pode oferecer, tais como: alta disponibilidade, resiliên- cia, redução de custos, entre outros. Ademais, a linguagem de programação escolhida para consumir esse paradigma de computação pode ser determinante para o sucesso ou o fracasso dessa jornada.

Nesse contexto, é possível perceber que a linguagem JavaScript [136] tem ganhado muita importância para o sucesso de aplicações web. Atualmente, essa linguagem tem se tornado um padrão para inclusão de interatividade nas páginas da Internet, e diversos

frameworks tem utilizado essa linguagem para incrementar o comportamento de aplicações

no lado do cliente. Assim, o NodeJS [34] surgiu como uma alternativa para execução de códigos JavaScript no lado do servidor, e vem ganhando bastante espaço no mercado, estando presente, inclusive, em gigantes como PayPal, LinkedIn e NetFlix [34].

A larga adoção do JavaScript tem oferecido ao NodeJS um cenário propício para a sua adoção, já que a curva de aprendizado pode ser bastante atenuada pelo aproveitamento dos conhecimentos de JavaScript [34]. Ainda assim, a constante evolução dos modelos de desenvolvimento de software, bem como a adoção de novos paradigmas de computação, como a nuvem, exige que os processos de aprimoramentos das linguagens de programação mantenham um fluxo constante.

Diante do exposto, e considerando a necessidade de aprimoramentos no modelo de processamento de software em NodeJS, este trabalho propõe o framework Node2FaaS. Um framework para conversão automática e profícua de aplicações monolíticas, escritas em NodeJS, para aplicações orientadas a FaaS. Nas próximas seções serão abordados alguns aspectos que caracterizam a linguagem JavaScript e o NodeJS.

No documento Universidade de Brasília (páginas 76-81)

Documentos relacionados