Tipos de implantação de aplicativos
Há várias maneiras de implantar aplicativos Java na nuvem. Esta unidade explora as várias opções para que, na próxima unidade, você possa entender melhor os serviços que o Azure fornece.
Máquinas virtuais, contêineres ou plataforma como serviço?
A principal questão é se você deseja ou precisa implantar seu aplicativo em uma máquina virtual (VM), dentro de um contêiner ou como uma solução de plataforma como serviço (PaaS).
Com máquinas virtuais, você está em um mundo semelhante a um ambiente de datacenter local ou clássico. O Azure fornece um conjunto de VMs pré-configuradas que executam os principais sistemas operacionais (Windows e Linux), e você precisará configurar e manter essas máquinas.
Sugerimos que você adote essa solução inicialmente, porque é a mais próxima do que a maioria das empresas já está usando antes de migrar para a nuvem. Eles geralmente instalam seu próprio software de gerenciamento de configuração, instalam sua versão favorita do Java e, em seguida, podem executar sua carga de trabalho Java de uma maneira semelhante à que fizeram no passado.
A solução VM funciona bem se você tiver uma equipe de operações experiente que irá configurá-los e mantê-los, e se você tiver casos de uso específicos. Por exemplo, você pode estar usando algumas bibliotecas nativas ou algum software proprietário, como Oracle WebLogic Server ou IBM WebSphere Application Server.
Com os contentores, ainda tens a maior parte do controlo que tens com VMs, mas com menos esforço operacional. Você pode instalar sua própria Java Virtual Machine (JVM) ou algum software específico, e seus contêineres serão executados localmente ou em qualquer provedor de nuvem.
Como os contêineres oferecem muita liberdade, eles sofrem de alguns dos mesmos problemas que as VMs. Se você fornecer sua própria JVM, precisará atualizá-la e corrigi-la conforme necessário. Como resultado, as imagens Docker necessitam de uma eficaz cadeia de ferramentas para integração e entrega contínuas (CI/CD) para gerir adequadamente os contêineres. Como as imagens do Docker podem ser executadas localmente e são mais leves do que as VMs, elas também oferecem uma ótima experiência de desenvolvedor.
Com uma solução de plataforma como um serviço, o provedor de nuvem lida com a maior parte da carga de manutenção e operação. Atualizações do sistema operacional (SO), patches Java, segurança e conformidade são fornecidos. Como resultado, esta opção é geralmente mais segura e menos dispendiosa. Ele também vem com alguns recursos de escalabilidade, que devem permitir que seu aplicativo se adapte melhor às necessidades de seus clientes. Também resulta em melhor desempenho sob carga e menor custo quando há menos tráfego.
Você pode conseguir mais usando uma solução PaaS. Você pode configurar automaticamente, gerenciar e carregar segredos (por exemplo, usando o Cofre de Chaves do Azure), monitorar seu aplicativo, iniciar uma sessão de criação de perfil ao vivo e habilitar a implantação sem tempo de inatividade.
Opções de implantação
Quer você use VMs, contêineres ou uma solução PaaS, geralmente pode implantar seus aplicativos Java na nuvem de duas maneiras:
- de implantação do código-fonte: o utilizador publica o seu código-fonte num repositório Git e o fornecedor de nuvem executa um processo que compila, constrói e empacota a aplicação.
- Implantação de ficheiros JAR, WAR ou EAR: Pode empacotar a sua aplicação, geralmente como um ficheiro JAR executável (Java ARchive), mas WAR (Web Application ARchive), EAR (Enterprise Application ARchive) e outros formatos de ficheiro também são possíveis. Em seguida, o provedor de nuvem executa o arquivo executável.
Essas duas opções de implementação são maneiras clássicas de executar aplicativos Java. Para ambas as opções, o processo de compilação é geralmente semelhante, e a principal diferença é onde esse processo é executado. Permitir que o provedor de nuvem faça a compilação é mais simples e, com essa abordagem, o provedor de nuvem aplica suas próprias verificações e patches de segurança. Ao criar o aplicativo localmente ou usando uma plataforma de CI/CD, como o GitHub Actions, você obtém mais flexibilidade e controle.
Funções sem servidor
As funções sem servidor, ou mais especificamente as Funções do Azure, são uma combinação de várias soluções que vimos e oferecem um recurso muito específico: as funções sem servidor devem ser executadas por curtos períodos de tempo. Normalmente, uma função é despertada por um evento, como uma solicitação HTTP, e permanece "quente" por alguns minutos até voltar ao modo de suspensão.
As funções compartilham recursos com a solução PaaS que descrevemos anteriormente. No Azure, nossa solução PaaS (Serviço de Aplicativo do Azure) e nossa solução sem servidor (Azure Functions) são tecnicamente semelhantes e compartilham alguns códigos e serviços comuns.
Para opções de implantação, as funções geralmente funcionam com arquivos JAR. Outras opções, como o Docker, estão disponíveis, mas são menos populares e geralmente não têm um desempenho tão bom. Isso ocorre porque a plataforma subjacente não pode otimizá-los da mesma forma que pode para arquivos JAR.
Por sua natureza, as funções sem servidor precisam ser especificamente codificadas. Seus recursos dependem do provedor de nuvem no qual são executados, e sua curta vida útil torna complicado o uso de soluções tradicionais, como cache ou replicação de sessão HTTP.
As funções sem servidor podem ser bem dimensionadas e oferecem o melhor preço para ambientes de baixo uso. Ao mesmo tempo, podem responder às cargas de tráfego mais exigentes.