Desenvolvimento em Cloud
Sr. José:- Meus filhos todos têm nomes tecnológicos.
Sr. João:- Não brinca!
Sr. José:- Sério. O mais velho é o Ueize. Depois vêm o Iperlinque, o Desquitópi e as gêmeas Onlaine e Ofilaine…
Sr. João:- Caramba!
Sr. José:- E tem o caçula: o Cláudio.
Sr. João:- Cláudio? Mas não eram todos nomes tecnológicos?
Sr. José:- Então, Cláudio. É nuvem em inglês.
Vamos falar deste último filho do Sr. José? Porque o que interessa é falar dos outros...não, espera!
Brincadeiras à parte, este termo tecnológico chamado de "Cloud" é o nosso ponto de partida para demonstrar um pouco melhor o desenvolvimento de aplicações voltadas para a web.
O que é Cloud Computing
A Cloud Computing ou computação em nuvem é um serviço de computação baseado na internet, ou seja, pode-se utilizar recursos de TI sob demanda de computação, armazenamento de dados, redes e de aplicações em ambientes compartilhados de maneira integrada através da internet, independente de plataforma ou localização geográfica e sem a necessidade de investir em equipamentos.
Para que serve?
Ao utilizar a computação em nuvem, as organizações podem utilizar recursos compartilhados de computação e armazenamento, ao invés de criar, operar e melhorar uma infraestrutura própria.
A Cloud Computing permite que:
- Os usuários provisionem e liberem recursos sob demanda.
- Os recursos possam ser redimensionados para cima ou para baixo automaticamente, dependendo da carga.
- Os recursos sejam acessíveis em uma rede com segurança adequada.
- Os provedores de serviços em nuvem ativem um modelo de pagamento em que os clientes são cobrados com base no tipo de recursos e por uso.
Estruturas para o Desenvolvimento
Como as possibilidades da Cloud Computing são amplas, os profissionais de tecnologia costumam dividir os serviços prestados em 3 categorias:
- IaaS;
- PaaS;
- SaaS.
Entenda melhor cada uma delas!
IaaS — Infrastructure as a Service (Infraestrutura como Serviço)
Neste modelo de serviço, você contrata uma capacidade de hardware que corresponde a memória, armazenamento, processamento, dentre outros detalhes. Podem entrar nesse pacote de contratações os servidores, roteadores, serviços de rede, dentre outros.
Dependendo da Cloud que contratar, você poderá ser tarifado, por exemplo, pelo número de servidores utilizados e pela quantidade de dados armazenados ou trafegados. Em geral, tudo é fornecido por meio de um data center com servidores virtuais, em que você paga somente por aquilo que usar. Aliás este é o principal conceito de Cloud - pagar pelo uso.
PaaS — Platform as a Service (Plataforma como Serviço)
Imagine que você contratou uma ótima solução para a sua empresa, que funciona em Cloud Computing, mas que não possui um recurso personalizado essencial para o seu negócio.
Nesse cenário, o PaaS surge como o ideal porque é, como o próprio nome diz, uma plataforma que você pode criar, hospedar e gerir esse aplicativo.
Nesse modelo de serviço, contrata-se um ambiente completo de desenvolvimento, no qual é possível criar, modificar e otimizar softwares e aplicações.
Tudo isso é feito utilizando a infraestrutura na Cloud, ou seja, o time de desenvolvimento tem uma infraestrutura completa e moderna à disposição, sem que sejam necessários altos investimentos.
O PaaS é um bom exemplo de plataforma de desenvolvimento segura, robusta e confiável.
SaaS — Software as a Service (Software como Serviço)
Nesse terceiro modelo de serviço, você pode ter acesso a uma aplicação sem comprar a sua licença, utilizando-o a partir da Cloud Computing..
No entanto, também existem planos de pagamento nos quais é cobrada uma taxa fixa ou um valor que varia de acordo com o uso. Muitos CRMs ou ERPs trabalham no sistema SaaS.
Assim, o acesso a essas aplicações é feito usando a internet. Os dados, contatos e demais informações podem ser acessados de qualquer dispositivo, dando mais mobilidade ao seu trabalho.
Sites como o Facebook e o Twitter ou aplicativos como o Skype, OneDrive, Google Docs e o Office 365 funcionam dessa maneira.
Neles, tudo é disponibilizado na Cloud, para que muitos usuários consigam ter acesso ao serviço pelo navegador ou por um software — como no caso do Skype.
Desenvolvimento em Cloud Computing
O desenvolvimento em Cloud Computing já é uma realidade, mas ainda existem muitas empresas que hospedam suas aplicações em ambientes locais ou em hospedagens que não são bem "Cloud", pois não possuem processos de redundância, segurança e de regiões espalhadas pelo globo terrestre.
Uma boa Cloud possui:
- toda a estrutura para hospedar desde um simples site até uma aplicação mais estruturada e
- possuem alguns recursos muito funcionais em termos de desenvolvimento de software, que nos ajudam a implementar e a gerenciar as aplicações de forma rápida, fácil e segura.
Quando o assunto é desenvolvimento, a linguagem de programação é um ponto de atenção na Cloud Computing. Em muitos casos, ao se utilizar um recurso nativo da Cloud, existem algumas restrições no sentido de ausência de suporte para certas linguagens e versões escolhidas.
É claro que se o desenho da arquitetura da aplicação estiver no contexto de se utilizar VM's (Virtual Machine) isso não se torna um problema, mas nos aponta outros, como o fato de todo o gerenciamento de versões, patches de segurança, dentre outros fatores ficar a cargo do utilizador da Cloud e não da Cloud em si.
Os recursos disponíveis em um ambiente de desenvolvimento em Cloud, tem muito a agregar à disponibilidade de suas aplicações, principalmente quando se trata de uma aplicação web em que toda e qualquer indisponibilidade se torna extremamente prejudicial ao negócio.
Sendo assim, a utilização de um recurso como, por exemplo, o autoscaling de máquinas, tem como objetivo minimizar este tipo de problema. No autoscaling as aplicações aumentam e diminuem os recursos operacionais de acordo com a demanda requisitada, executando os serviços de forma confiável e sem que os usuários sejam afetados.
A escolha do recurso X ou Y dentro de uma Cloud depende da arquitetura do software que será implementado nela. Algumas aplicações demandam um conjunto de recursos gerenciados como o Kubernetes, por exemplo, que é nativo da Cloud. Outras podem não ter esse recurso nativo como alguns bancos não relacionais. Nesses casos existem parceiros nas plataformas que disponibilizam o recurso no formato de marketplace.
Por onde começar
O desenvolvimento de uma aplicação, seja um site ou um software (SaaS), tem as suas complexidades e, ao migrar para um ambiente Cloud isso tende a aumentar um pouco. Como assim?!
Dependendo da aplicação, ela pode ter sido desenvolvida sob uma condição única ou como se diz em termos "tecnológicos": um monolítico! E isso poderá nos levar ao seguinte cenário dentro da Cloud:
- Problemas de acesso à banco de dados;
- Não armazenamento de arquivos (Storage);
- Disco local da aplicação não disponível no ambiente autoscaling;
- Problemas de performance.
Mas o lado bom é que sempre dá para realizar uma refatoração, não é mesmo?!
Sim!
Mas existem dois pontos que podem ser o sucesso ou fracasso de seu serviço:
- o custo inviável e
- o tempo necessário para transformar uma aplicação monolítica em uma aplicação mais fragmentada, como os micro serviços.
Sendo assim se você pretende utilizar a Cloud Computing como ambiente de desenvolvimento, segue algumas sugestões:
- comece pelo simples e pelo que irá impactar menos ao negócio;
- escolha recursos estáveis e que suportem o seu ambiente de desenvolvimento;
- analise quais recursos estão disponíveis na linguagem em que sua aplicação está escrita e
- vá migrando aos poucos, adquirindo conhecimento e tornando a jornada mais agradável.
Gerente de Desenvolvimento na Auto Avaliar | Unicamp |Executive MBA
3 aÓtimo post. Abraços, Cláudio hahahah
9 x Google Cloud Certified | Arquiteto Cloud | GCP | SRE | Devops | Platform Enginner | GenAI
3 aBacana Rogério! Um fator que acredito que influência os problemas de aplicações em cloud parte do débito técnico também. Já vi monolito funcionar bem em cloud e microservices ser um caos.