Deployment de Aplicações em Infraestruturas Distribuídas no Contexto da Internet das Coisas
Aplicações para a Internet das Coisas (IoT) vêm ganhando popularidade ao longo dos anos e cada vez mais é comum seu uso em diferentes segmentos como cidades inteligentes, agricultura inteligente, casa inteligente e indústrias (conhecida também como IoT industrial).
Para acompanhar essa evolução, diversas tecnologias e ferramentas vêm sendo criadas para facilitar o desenvolvimento e configuração de aplicações IoT. Apesar disso, ainda não existe uma tecnologia consolidada em IoT que permite a adoção de técnicas de deployment como integração contínua e entrega contínua (CI/CD) que são técnicas utilizadas com sucesso em aplicações web. Uma outra característica comum é que muitas aplicações IoT são constituídas de serviços executados em ambientes heterogêneos como Nuvem, Névoa e Bruma, e o deployment destes serviços em geral é feito de maneira diferente para cada ambiente e de forma estática (um serviço executado na Névoa não pode ser movido para a Nuvem por exemplo).
O objetivo deste trabalho é propor uma solução para realizar o deployment estático, e também dinâmico, dos serviços que compõem um sistema IoT, através da utilização de containers e de um orquestrador de containers para controle e coordenação dos serviços. Para estender a orquestração de containers a borda da rede, adicionamos um novo componente que será responsável por cuidar da comunicação e gerenciamento dos containers que são executados fora da Nuvem. Para efetuar o deployment e garantir que todos os serviços sejam executados no ambiente correto, é apresentado um plugin criado para ser adicionado a uma ferramenta de CI/CD, possibilitando dessa forma se comunicar com o orquestrador de containers via API, seguindo uma configuração pré-estabelecida. O experimento apresenta resultados interessantes, demonstrando que o deployment em ambientes distribuídos é confiável e resiliente, até mesmo em cenários no qual é preciso realizar migração de dados sem interromper o funcionamento da aplicação.