• Nenhum resultado encontrado

Algoritmo 8 – Algoritmo ACO para o modelo LM 2 K Terceiro Nível

3.1 Aplicação Nativa para Nuvem

De acordo com Sosinsky (2011), a computação em nuvem é descrita como um modelo de entrega de serviços que compreende cinco características essenciais, três modelos de serviços principais e quatro modelos de implantação principais, ilustrados na Figura 8. As características essenciais, como o reservatório de recursos, o amplo acesso à rede, o serviço medido, o autoatendimento sob demanda e a rápida elasticidade podem reduzir a infraestrutura e o custo pessoal. Os três modelos de serviço amplamente adotados são Infrastracture as a Service (IaaS), Platform as a Service (PaaS) e SaaS. Um provedor de IaaS gerencia toda a infraestrutura, enquanto os usuários são responsáveis pelos outros aspectos da implantação. Um provedor de PaaS gerencia a infraestrutura, os sistemas operacionais e o software, que estão habilitados para a plataforma em questão, enquanto os usuários são responsáveis pelo gerenciamento da aplicação que eles implantam. No modelo SaaS, a responsabilidade do cliente é inserir e gerenciar seus dados e interações, e a responsabilidade do provedor é gerenciar todas as aplicações que estão na infraestrutura. Os modelos de implantação podem ser comunitários, híbridos, privados e públicos. Eles especificam como uma infraestrutura de nuvem é construída, gerenciada e acessada, e definem a finalidade e a localização da nuvem (SCHMADER, 2015).

FONTE:BASEADA EMSOSINSKY(2011).

FIGURA8. CARACTERÍSTICAS DACOMPUTAÇÃO EMNUVEM.

Segundo Fehling et al. (2014), as aplicações nativas para nuvem são criadas com foco na integração com o modelo de nuvem, para obter as vantagens da computação em nuvem. Uma aplicação nativa para nuvem garante outras características além daquelas derivadas da computação em nuvem. Nesta seção, apresenta-se as razões para desenvolver aplicações nativas para nuvem.

rar as características rotuladas como IDEAL (Isolated state, Distribution, Elasticity, Automated Management,Loose coupling). A característica estado isolado (Isolated State) está relacionado a como uma aplicação manipula um estado. Cada componente de uma aplicação pode optar tanto pelo stateful (com estado) quanto pelo stateless (sem estado). Componentes com estado carregam o estado se o componente, a plataforma ou a infraestrutura falhar. Componentes sem estado podem ser adicionados e facilmente removidos, em virtude de seu estado não transitório ser atribuído a componentes com estado ou a armazenamento externo. A distribuição também é uma importante característica em virtude de que muitos recursos de TI estejam possivelmente distri- buídos globalmente. A elasticidade (Elasticity) é uma característica na qual é possível aumentar ou reduzir os recursos destinados a uma aplicação ou cliente para lidar com a variação da carga de trabalho. Gerenciamento automatizado (Automated Management) é uma característica na qual as tarefas de adicionar e remover recursos em tempo de execução devem ser automatizadas. O baixo acoplamento (Loose coupling) é uma característica na qual as dependências entre os componentes de uma aplicação devem ser minimizadas (FEHLING et al., 2014).

As características descritas no parágrafo anterior estão de acordo com um tipo de manifesto mantido para aplicações nativas para nuvem e é chamado de aplicação de doze fatores. Muitos desses fatores interagem uns com os outros, sendo descritos a seguir conforme Sethi (2017). O primeiro fator, é chamado base de código centralizado, e especifica que todo o código implantado é rastreado no controle de revisão, e que seus códigos podem ter várias instâncias em várias plataformas. No segundo fator, chamado então de gerenciamento de dependências, define que uma aplicação deve declarar as dependências e isolá-las. Definição de configuração é o terceiro fator, no qual a variável de ambiente deve ser definida no nível do sistema operacional. O quarto fator é o serviço de apoio e indica que todo recurso é considerado parte de uma aplicação em si. No quinto fator, isolamento na construção, atualização e ciclo de execução, os artefatos devem ser construídos separadamente e, em seguida, combinados com a configuração. Em seguida, deve ser iniciada uma ou mais instâncias da combinação de artefato e configuração. No sexto fator, processos sem estado, uma aplicação deve executar uma ou mais instâncias que não compartilham nada. O sétimo fator, associação de porta de serviços, diz que todos os serviços de uma aplicação autônoma precisam ser expostos por meio de associação de porta. Escalação de processos sem estado é o oitavo fator, no qual a arquitetura deve se concentrar no gerenciamento de processos sem estado. No nono fator, em gerenciamento de estado do processo, os processos devem aumentar muito rapidamente e encerrar normalmente

dentro de um pequeno período de tempo. No décimo fator, entrega contínua à produção, os diferentes ambientes devem ser mantidos semelhantes. O décimo primeiro fator, logs como fluxos de eventos, ajudam a entender a tarefa da aplicação. Por fim, o décimo segundo fator, tarefas ad hoc como processos on-off , as tarefas de gerenciamento executadas como parte de uma atualização devem ser executadas como processos únicos no ambiente.

De acordo com o descrito nesta seção, Sethi (2017) apresenta alguns pontos que devem ser considerados no desenvolvimento de uma aplicação nativa para nuvem, como segue. Um projeto informativo deve ser usado para aumentar o uso da aplicação com tempo e custo mínimos para os clientes que usam automação. A portabilidade de uma aplicação deve ser usada em diferentes ambientes e plataformas. A adequação de uma aplicação deve ser usada em plataformas de nuvem, e a alocação e o gerenciamento de recursos devem ser compreendidos. Ambientes idênticos devem ser usados para reduzir bugs e obter uma agilidade máxima de liberação de software. Por último, a alta disponibilidade deve ser ativada escalonando a aplicação com supervisão mínima e projetando arquiteturas de recuperação de desastre.

Como descrito nesta seção, aplicações nativas para nuvem são resultado de uma abordagem para criar e executar aplicações que exploram as vantagens do modelo de entrega de computação em nuvem. Assim, o objetivo de aplicações nativas para nuvem é como implementar e implantar, mas não onde implantar. Na Tabela 4 compara-se oito aspectos de aplicação nativa para nuvem com aplicações tradicionais, a qual está de acordo com Pivotal Software1.

Em resumo, pode-se perceber que a grande diferença está no processo de desenvolvi- mento da aplicação. As aplicações nativas para nuvens focam no desacoplamento entre aplicação e infraestrutura, por meio de serviços independentes, na qual a entrega contínua é fundamental. O processo desenvolvimento de ser colaborativo e ter um comportamento previsível. Em decor- rência destas características, promove-se uma escalabilidade automatizada e um recuperação rápida das falhas. Já as aplicações tradicionais possuem um processo de desenvolvimento e implantação lentos, com entregas periódicas, as equipes não integradas com dependências entre seus serviços, levando à comportamento imprevisível. Além disso, a escalabilidade é manual e a recuperação de falhas é lenta.

1 https://pivotal.io/cloud-native 2 https://pivotal.io/cloud-native

TABELA4. DIFERENÇAS ENTREAPLICAÇÕESNATIVAS PARANUVEM EAPLICAÇÕESTRADICIONAIS. Aspectos Aplicações Nativas para Nuvem Aplicações Tradicionais

Comportamento

Previsível: são projetadas para maximizar a resiliência e possui uma infraestrutura al- tamente automatizada.

Imprevisível: pela forma como e desen- volvida e implantada, o comportamento das mesmas não pode ser previsível.

Sistema Operacional Abstração: através de plataformas abs- traem a dependências da infraestrutura.

Dependência: constroem dependências en- tre a aplicação e o sistema operacional. Recursos

Adequado: automatiza o provisionamento e a configuração da infraestrutura, alocando e realocando recursos dinamicamente no tempo de implantação, com base nas neces- sidades contínuas da aplicação.

Excessivo: projeta uma solução de infraes- trutura personalizada e dedicada, atrasando a implantação de uma aplicação.

Desenvolvimento

Colaborativo: trabalha com uma combina- ção de pessoas, processos e ferramentas, re- sultando em uma colaboração próxima en- tre as funções de desenvolvimento e opera- ções.

Silos: trabalha com transferência excessiva de código finalizado, dos desenvolvedores para as operações.

Entrega de serviços

Continua: disponibilizam atualizações de softwareindividuais e lançam assim que es- tão prontos.

Períodos: lançam softwares periodica- mente.

Dependência entre serviços

Independente: decompõe os aplicativos em serviços operacionais independentes pe- quenos e fracamente acoplados.

Dependente: agrupam muitos serviços di- ferentes em um único pacote de implanta- ção, causando dependências desnecessárias entre os serviços e levando a uma perda de agilidade durante o desenvolvimento e a im- plantação.

Escalabilidade

Automática: a automação da infraestrutura em escala elimina o tempo de inatividade devido a erro humano.

Manual: inclui operadores humanos que criam e gerenciam manualmente configura- ções de servidor, rede e armazenamento.

Recuperação a falhas

Rápida: a orquestração gerencia dinamica- mente o posicionamento de containers em um cluster de VMs para fornecer dimensio- namento elástico e reinicialização em caso de falha de uma aplicação ou de infraestru- tura.

Lenta: VMs individuais são lentas para a inicialização e apresentam uma grande so- brecarga mesmo antes de implantar o có- digo de uma aplicação nelas.

FONTE: PIVOTALSOFTWARE2