Back-End

15 mai, 2017

Hospedando aplicações Spring Boot e aplicações Java clusterizadas com Jelastic Cloud

Publicidade

Desde sua fundação, o Jelastic PaaS evangeliza a ideia de tornar o processo de instalação de aplicações o mais fácil e universal possível. Seguindo nossa missão, estamos felizes em apresentar um recém-chegado à família certificada de empilhamento em Java – o servidor Spring Boot para aplicações individuais e clusterizadas ou microsserviços.

Com o modelo de pilha Spring Boot da Jelastic, você pode facilmente executar várias aplicações Java na nuvem utilizando tanto a interface gráfica de fácil utilização quanto scripts automatizados. Os tipos de projeto Java a seguir podem ser hospedados nesse servidor:

  • JAR: Para aplicações Java individuais ou instâncias de microsserviços sem estado, criadas utilizando os frameworks Spring Boot, Dropwizard ou Spark.
  • WAR: Para aplicações web com um servlet  de container embutido.

Dessa maneira, o Spring Boot permite que você mantenha as aplicações portáteis, enquanto o Jelastic garante a entrega rápida das aplicações para a produção, e seu gerenciamento compreensível via GUI, API ou Cloud Scripting.

Criação do ambiente Spring Boot

Entre em seu painel do Jelastic Cloud e vamos começar.

  1. Primeiro, você deve criar um Novo Ambiente (New Environmnent) – utilize o botão de mesmo nome para acessar o assistente de topologia. Altere para a aba da linguagem Java e escolha o modelo Spring Boot dentro da camada de servidor de aplicação no painel à esquerda como mostrado abaixo. Configure a quantidade de recursos alocados, digite o nome do ambiente e clique em Criar (Create) para prosseguir.

Compatibilidade de versões:

  • Rótulo de indicação 1.x-2.x implica que o servidor Spring Boot gerenciado pelo Jelastic pode executar qualquer aplicação baseada nessas versões.
  • A pilha atual de Spring Boot é disponibilizada nas plataformas Jelastic de 4.10 ou superior.
  1. Quando seu novo ambiente aparecer no painel de controle, você poderá clicar em “Abrir no Navegador” (Open in Browser) para iniciar o exemplo de aplicação “Hello World” pré-instalado.

Dessa maneira, você pode se certificar que sua instância Spring Boot está funcionando.

Agora, vamos estudar como integrar sua aplicação Java no ambiente Spring Boot criado.

Instalando aplicações Java no Spring Boot

Para acessar seu projeto Spring Boot dentro do Jelastic, você precisa, antecipadamente, empacotá-lo em um arquivo executável com todas as classes apropriadas compiladas e os recursos associados dentro (incluindo servlet de container embutido para tratar as aplicações autocontidas). Os seguintes tipos de arquivos são suportados:

  • JAR: O tipo de arquivo Java mais comum; deve conter um manifesto com a classe do ponto de entrada declarada, ou ser construído como um JAR “tudo em um”, ou arquivo JAR aninhado.
  • WAR: Para a instalação de aplicações com servlets de container embutidos; em particular, deve ser utilizado para projetos baseados em JSP para resolver problemas de suporte conhecidos dentro do Spring Boot.

Pacote ZIP

Por padrão, qualquer arquivo executável JAR, criado pelo Spring Boot, contém arquivos de propriedades e configurações adicionais. No entanto, no caso de instalação em produção, é mais conveniente distribuir esses arquivos fora do arquivo empacotado. Por exemplo, isso pode ser aplicado aos arquivos de propriedades de configuração externos (application.property, application.yml) ou configurações de registro (log4j2.properties, locgback.xml).

Para simplificar a instalação das aplicações nesses casos, o Jelastic suporta a instalação de um pacote ZIP, que pode conter um arquivo JAR executável e quaisquer arquivos ou pastas adicionais.

Enquanto descompacta o pacote ZIP, o Jelastic processa todas as pastas incluídas para detectar o JAR executável. Para ser considerado como um ponto de execução, um arquivo JAR deve conter uma declaração Main-Class dentro do arquivo de manifesto META-INF/MANIFEST.MF. Assim que tal arquivo JAR é encontrado, o Jelastic executa a JVM com os parâmetros do “java -jar /path/to/jar” dentro da pasta que corresponda à pasta raiz do arquivo instalado.

Exemplo

Abaixo temos um diretório de exemplo de um pacote ZIP que pode ser utilizado para a instalação no Jelastic Cloud.

application.zip
|
+-config
|    +-application.properties
|    +-log4j.properties
+-lib
|    +-my-springboot-app.jar
+-some_directory
|    +-additional_file1
|    +-additional_file2
+-additional_configuration.yml

Se estiver instalando um arquivo assim, o Jelastic vai executar a JVM com os argumentos “java -jar lib/myspringboot-app.jar” do diretório que corresponda à pasta raiz do arquivo descompactado application.zip.

Instalação da aplicação

O Jelastic oferece possibilidades versáteis para a instalação da sua aplicação no Jelastic Cloud, permitindo que você escolha o que preferir.

  • Instalação manual:

A abordagem mais evidente e confortável é fazer manualmente através da interface GUI conveniente do Jelastic.

Como exemplo, teste um arquivo exemplo do Spring Boot, que representa uma aplicação simples para armazenar mensagens que você crie – você pode construí-la utilizando as fontes ou instalar um JAR já criado.

Para isso, faça o upload do arquivo com sua aplicação pelo Gerenciador de Instalações (Deployment Manager) e inicie a instalação selecionando o ambiente de destino (o spring-boot-app previamente criado, em nosso caso).

Na caixa de diálogo que abrir, confirme a instalação (Deploy) com o botão de mesmo nome e espere até a tarefa ser finalizada.

Nota: O suporte para instalação utilizando arquivos WAR pelo gerenciador de instalações é oferecido a partir do Jelastic 5.0.6. Para plataformas anteriores, essa operação pode ser realizada utilizando a API Jelastic ou Cloud Scripting.

  • Instalação remota por CLI

Como alternativa, você pode aprimorar o Jelastic CLI para instalar sua aplicação em um ambiente alvo Spring Boot remotamente com o seguinte comando:

~/jelastic/environment/control/deployapp –envName spring-boot-app –fileUrl
http://link/to/archive –fileName my_springboot.jar –context ROOT

Verificando os registros

Quando a instalação terminar, dê ao sistema um pouco mais de tempo para ele executar os serviços necessários (onde a demora depende diretamente da complexidade do seu projeto) – o progresso atual dessa operação pode ser rastreado em tempo real utilizando o registro springboot.log do servidor.

Depois disso, a interface web da sua aplicação(se for executada na porta padrão :8080) poderá ser acessada da mesma maneira que você acessou o “Hello World” pré-instalado – clicando em Abrir no Navegador.

Maneiras de criar uma aplicação Spring Boot

Para criar um arquivo apropriado para a hospedagem da sua aplicação dentro do Jelastic Cloud, as ferramentas de construção Gradle ou Maven podem ser utilizadas.

  • A base mínima para o script de construção do Gradle está listada abaixo, onde os parâmetros entre chaves devem ser substituídos pelas informações do seu projeto.
buildscript {
  ext {
     springBootVersion = '{X.X.X.RELEASE}'
  }
  repositories {
     mavenLocal()
     mavenCentral()
  }
  dependencies {
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
  }
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
sourceCompatibility = 1.8
targetCompatibility = 1.8
jar {
  baseName = '{your_app_name}'
  version =  '{your_app_version}'
}
repositories {
  mavenLocal()
  mavenCentral()
}
dependencies {
  compile("org.springframework.boot:spring-boot-starter")
}
task wrapper(type: Wrapper) {
  gradleVersion = '{used_gradle_version}'
}

Para construir um arquivo JAR executável com esse script, execute o comando a seguir:

./gradlew clean assemble

O arquivo gerado será salvo no caminho ..build/libs/{app_name}-{app-version}.jar.

  • A base mínima para descrição do projeto pom.xml do Maven inclui os seguintes parâmetros (onde os parâmetros entre chaves devem ser substituídos pelas informações do seu projeto).
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>{Х.Х.Х.RELEASE}</version>
  </parent>
  <groupId>org.springframework</groupId>
  <artifactId>{your_app_name}</artifactId>
  <version>{your_app_version}</version>
  <properties>
     <java.version>1.8</java.version>
  </properties>
  <dependencies>
     <!-- Compile -->
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
  </dependencies>
  <build>
     <plugins>
        <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
     </plugins>
  </build>
</project>

Para criar um JAR executável com o Maven, execute o seguinte comando:

mvn clean package

O arquivo do seu projeto será salvo no caminho: …target/{app_name}-{app-version}.jar.

Plugin Jelastic Maven

Como uma opção mais conveniente para o conjunto de construção e instalação, considere o plugin Jelastic Maven, que visa a facilitar a entrega da sua aplicação para a nuvem. Integre-o no arquivo de configuração pom.xml do seu projeto Maven e seja capaz de construir o arquivo da aplicação e instalá-lo em um ambiente em um único comando.

Ferramentas CI/CD para aplicações Java no Jelastic Cloud

Nó de construção Maven dedicado no Jelastic Cloud

Caso você prefira trabalhar via GUI, o nó de construção Maven dedicado à plataforma Jelastic é uma boa opção. Caso seja incluído em um ambiente junto ao servidor de aplicação do Java, ele pode ser utilizado para buscar, compilar e instalar a aplicação a partir de suas fontes dentro de um repositório GIT/SNV especificado.

 Complemento de automação CI/CD

Além das opções mencionadas acima, o Jelastic oferece um complemento especial Git-Puch-Deploy para instalação contínua de aplicações a partir dos repositórios do GitHub e GitLab através de uma linha integrada automatizada de CI/CD. Ele pode ser especialmente útil caso seu projeto ainda esteja passando por um desenvolvimento intensivo, o que implica muitas submissões repetitivas. Com essa solução, sua aplicação será automaticamente reconstruída e entregue a um servidor alvo em cada mudança feita no código, tornando a versão mais nova disponível no domínio correspondente em alguns minutos.

Manutenção do seu servidor Spring Boot

A maioria das operações básicas de manutenção no servidor podem ser realizadas via Jelastic Cloud UI com as ferramentas apropriadas integradas, por exemplo:

  • Utilize o Gerenciador de Configuração (Configuration Manager) integrado para criar ou carregar novos arquivos, editar ou excluir os existentes, configurar pontos de montagem e gerenciar os dados exportados de outros servidores.
  • Explore os registros dos servidores para obter dados das operações de execução para uma administração de serviços e resolução de problemas eficiente.
  • Rastreie as estatísticas dos recursos consumidos para estar ciente das capacidades que seu servidor necessita e definir a melhor abordagem para sua alocação.

Para operações mais complexas de manutenção, o Jelastic SSH Gate pode ser utilizado. Ele permite que você gerencie seus containers remotamente com um acesso total. Para isso, você precisa somente conectar sua conta com a chave SSH gerada previamente. E as seguintes dicas serão úteis quando estiver trabalhando com seu servidor Spring Boot.

  • Seus arquivos de aplicação podem ser localizados no diretório /opt/shared/apps/APP, que é considerado como “atual” ou “de trabalho” pelos processos Java.
  • Os parâmetros de configuração da JVM(Java Virtual Machine) podem ser personalizados dentro do arquivo /opt/shared/conf/variables.conf (ex.: habilitar o debug remoto ou passar qualquer argumento adicional à JVM).
  • Para inspecionar os arquivos de registro, o diretório é /opt/repo/logs.
  • O diretório /opt/shared/home é considerado o diretório home.
  • O JDK está localizado no diretório /usr/java/default.
  • Para reiniciar sua aplicação, utilize o comando sudo service cartridge restart.

Em particular, a possibilidade de operar o servidor via console pode ser especialmente útil quando estiver trabalhando com aplicações Spring Boot que não sejam para web.

Escalonamento automático para o servidor Spring Boot

A plataforma Jelastic fornece um escalonamento em tempo real que está disponível para qualquer servidor. Ao habilitar tanto o escalonamento vertical quando o horizontal, você pode tornar sua aplicação Spring Boot totalmente adaptável às cargas de trabalho.

Escalonamento vertical automático

O escalonamento vertical automático é habilitado por padrão e assegura que seu serviço se mantenha disponível durante picos de carga e, ao mesmo tempo, elimina a necessidade de pagar por recursos não utilizados. Somente decida o limite máximo de recursos (configurado com cloudlets) que sua aplicação pode consumir e o Jelastic vai ajustar automaticamente o tamanho máximo de memória (-Xms) para sua aplicação baseado nessa capacidade, por exemplo:

  • 8 Cloudlets (1GB RAM) configura o tamanho máximo da pilha em 819 MB
  • 16 Cloudlets (2GB RAM) configura o tamanho máximo da pilha em 1638 MB

Para personalizar o -Xmx ou qualquer outra opção da JVM, edite o arquivo /opt/shared/conf/variables.conf via gerenciador de configurações ou Jelastic SSH Gate.

Escalonamento horizontal automático

A funcionalidade de escalonamento horizontal permite o ajuste do número de servidores web e de aplicação segundo o consumo da sua aplicação. Ela é implementada por meio dos disparadores de ajustáveis de monitoramento que são baseados na utilização de um tipo de recurso particular:

  • Processador
  • Memória (RAM)
  • Rede
  • I/O do disco
  • IOPS do disco

Nota: Quando um servidor é escalonado (tanto manualmente quanto por um acionador), um balanceador de carga NGINX será adicionado automaticamente ao seu ambiente, com configurações pré-definidas para o balanceamento de carga das sessões. Como alternativa, você pode mudar o balanceador utilizado para o Apacha-LB, HAProxy ou Varnish, com a opção Mudar Topologia do Ambiente.

Desse modo, todos os nós recém-adicionados serão criados em servidores diferentes para garantir a alta disponibilidade de sua aplicação.

Criptografia de tráfego com SSL

Se seu projeto requer algumas configurações complexas para tratamento das solicitações, como HTTPS e balanceamento de carga, fique à vontade para utilizar as seguintes opções de segurança:

  • A funcionalidade integrada Jelastic SSL permite aplicar criptografia de tráfego instantaneamente para o domínio interno da sua aplicação (ex.: https://{env_name}{platform_domain}) com o certificado Jelastic wildcard SSL.

  • Como uma alternativa SSL sem cobrança, aplicável tanto para domínios internos quando personalizados, um complemento Jelastic especial Let’s Encrypt pode ser utilizado.

Aplicar qualquer uma dessas soluções ao nó Balanceador de Carga habilitará a criptografia de tráfego no nível do ambiente, eliminando a necessidade de configurá-la dentro da sua aplicação. Como resultado, o tráfego criptografado recebido será terminado na camada de balanceamento de carga e enviado ao servidor de aplicação de maneira segura.

Considerações sobre a personalização das portas e utilização HTTP/HTTPS

Por padrão, a maioria das aplicações Java acompanham a porta 8080 no nível HTTP, portanto ela é considerada como padrão para o tráfego das aplicações Spring Boot.

Desse modo, quando o link de um ambiente é solicitado através da Internet, as portas são automaticamente mapeadas da seguinte maneira:

  • A porta HTTP interna 8080 se refere à porta 80
  • A porta segura HTTPS 8043 se refere às portas 443 e 80

Assim, se estiver trabalhando com as portas HTTP/HTTPS padrão, sua aplicação poderá ser acessada diretamente pela URL do ambiente com o protocolo correspondente especificado, sem a necessidade de inserir o número apropriado da porta.

E se sua aplicação precisar processar a solicitação em alguma interface personalizada, o Jelastic permite expor as portas TCP e UDP privadas do container através dos Endpoints. Após adicioná-los, a porta correspondente será automaticamente habilitada nas configurações do firewall do servidor, tornando-a acessível para o resto do mundo.

Conclusão

Descubra mais possibilidades do servidor Spring Boot testando-o no Jelastic. Crie sua conta e instale facilmente uma aplicação escalonável Java para executá-la na nuvem.

***

Tetiana Merkova faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://blog.jelastic.com/2017/04/27/hosting-spring-boot-java-applications/.