Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta grátis, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Comece a usar o GraalVM no Ampere A1 no Oracle Cloud Infrastructure
This tutorial describes how to get started with GraalVM on Ampere A1 compute platform in Oracle Cloud Infrastructure (OCI). You will first run a Spring Boot application in the JVM mode and then build and run a Micronaut.io application as a native binary. You can use GraalVM to improve the performance of your existing applications and build lightweight polyglot applications for the cloud. It’s an ideal companion for the Ampere A1 compute shapes, which provide linear scalability and an unbeatable price-performance ratio.
A plataforma de computação Ampere A1 baseada em CPUs Ampere Altra representa uma mudança geracional para empresas e desenvolvedores de aplicativos que estão criando cargas de trabalho que podem ser dimensionadas de dispositivos de borda para data centers em nuvem. O design exclusivo dessa plataforma oferece desempenho consistente e previsível, pois não há conflito de recursos em um núcleo de computação e oferece mais isolamento e segurança. Esta nova classe de configurações de computação no Oracle Cloud Infrastructure oferece uma plataforma incomparável que combina o poder das CPUs Altra com a segurança, a escalabilidade e o ecossistema de serviços no OCI.
Introdução
O que é GraalVM?
O GraalVM é um tempo de execução de alto desempenho para aplicativos criados em Java, JavaScript, linguagens baseadas em LLVM como C e C++ e outras linguagens dinâmicas. Ele melhora significativamente o desempenho e a eficiência do aplicativo, para que ele possa ajudá-lo a executar seus aplicativos existentes com mais eficiência em plataformas de nuvem.
O GraalVM também cria binários executáveis nativos - imagens nativas - para aplicativos existentes baseados em JVM. A imagem nativa resultante contém o programa inteiro na forma de código de máquina para execução imediata e evita a inicialização e o volume da memória da própria JVM. Esse recurso torna o GraalVM ideal para criar aplicativos nativos da nuvem, e várias estruturas de microsserviços para linguagens JVM incluem esse recurso hoje.
Objetivos
Neste tutorial, você vai:
- Crie uma instância de computação Ampere A1
- Instalar o GraalVM Enterprise Edition
- Execute a popular amostra de aplicativo Spring Boot Pet Clinic usando GraalVM no modo JVM
- Crie e execute um aplicativo Micronaut como uma imagem nativa do GraalVM
- Avalie a adequação do uso do GraalVM no Ampere A1
- Limpar as implantações
Pré-requisitos
- Uma Conta no Cloud do Oracle Free Tier (Trial), Paga ou LiveLabs
- Familiaridade com a console do OCI
- Visão Geral do Networking
- Familiaridade com Compartimentos
- Conhecimento conceitual básico de contêineres e Podman
Configurar Ambiente de Nuvem
Comece iniciando o ambiente de nuvem Oracle que será usado para criar e implantar seu aplicativo Java EE. Esse ambiente estará contido em um Compartimento da nuvem, e a comunicação dentro do Compartimento será por meio de uma VCN (Rede Virtual na Nuvem). O Compartimento e a VCN isolarão e protegerão o ambiente geral. Você criará uma instância de computação Ampere A1 para instalar e executar seus aplicativos usando o GraalVM Enterprise Edition.
Configuração Básica da Infraestrutura do OCI
-
Abra o menu de navegação. Em Governança e Administração, vá para Identidade e clique em Compartimentos. Nesta tela, você verá uma lista de compartimentos. Clique em Criar Compartimento.
-
Informe o seguinte:
- Nome: Informe "AppDev".
- Descrição: Informe uma descrição (necessária), por exemplo: "AppDev compartimento para o tutorial introdutório". Evite digitar informações confidenciais.
- Compartimento Pai: Selecione o compartimento no qual você deseja que este compartimento reside. O padrão é o compartimento (ou tenancy) raiz.
- Clique em Criar Compartimento.
- Seu compartimento é exibido na lista.
Criar Instância de Computação A1 Ampere
-
Para criar uma instância de computação Ampere A1, use o menu de navegação no canto superior esquerdo da Console e vá para Computação > Instâncias.
-
Abra o fluxo de criação da instância.
- Verifique se você está no Compartimento AppDev
- Clique em Criar Instância.
-
Na página de criação de instância, você criará a nova instância com os novos recursos de rede, como VCN (Virtual Cloud Network), Gateway de Internet (IG) e muito mais.
- Nomeie a instância como GraalVMApp
- Atualize a seleção da Imagem para usar o Oracle Linux 7.9.
- Clique no botão Alterar Forma para ver as formas de computação disponíveis.
-
Configure a imagem para sua instância.
- Clique no botão Alterar Imagem para ver as imagens do SO disponíveis.
- Escolha Oracle Linux 7.9.
-
Configure os recursos para sua instância.
- Escolha o processador baseado no Ampere Arm na opção da série de formas.
- Escolha a forma
VM.Standard.A1.Flex
na lista de formas com processadores baseados no Ampere Arm. As formas Ampere A1 são flexíveis e você pode modificar o número de núcleos e a quantidade de memória. Escolha 1 núcleo e 6 GB de memória para a VM.
-
Escolha suas opções de rede. Crie uma nova VCN e sub-rede para sua próxima implantação na nuvem. Certifique-se de designar um endereço IP público à sua instância.
-
Gere e faça download do par de chaves SSH. Essa etapa é opcional, mas altamente recomendada para manutenção e atualizações posteriores. Você também poderá trazer sua chave pública se já tiver um par de chaves que gostaria de usar. Se você quiser saber como gerar chaves SSH, siga as instruções no tutorial Gerar chaves SSH.
-
Clique em Criar para criar os recursos de rede e iniciar a instância de computação.
Descrição da ilustração iniciar instância
Expor Portas do Aplicativo a Usuários
Para que os aplicativos fiquem acessíveis pela Internet, você precisa abrir as portas que nosso aplicativo usará. Nesta seção, você configurará listas de segurança em sua rede na nuvem e regras de firewall na sua instância de computação para permitir que seus aplicativos enviem e recebam tráfego.
Configurar a Rede Virtual na Nuvem (VCN)
Uma lista de segurança atua como um firewall virtual para uma instância, com regras de entrada e saída que especificam os tipos de tráfego de entrada e saída permitidos. Listas de segurança, conforme configuradas no nível da sub-rede, que aplica as regras de segurança a todos os elementos de rede dessa sub-rede. Sua rede vem com uma lista de segurança padrão, que contém um conjunto inicial de regras. A lista de segurança padrão permite que você estabeleça conexão com sua instância usando SSH e, para sua instância, faça chamadas de rede de saída para qualquer destino.
Configurar a Lista de Segurança para Expor as Portas do Aplicativo
-
Navegue na página de detalhes da instância criada. Compute > Instâncias > Clique na instância que você criou
-
Navegue até a sub-rede à qual sua instância está anexada, clicando na sub-rede
Descrição da ilustração Select subnet
-
Na página da sub-rede, clique na lista de segurança padrão para exibir detalhes e configurá-los.
-
Clique em "Adicionar Regra de Entrada" para adicionar uma nova regra para permitir o tráfego de entrada que corresponda às regras.
-
Adicione uma regra de entrada para permitir tráfego de entrada na porta 8080
- Defina o CIDR de Origem como
0.0.0.0/0
. Isso permite o tráfego de entrada de todas as origens. - Defina o Intervalo de Portas de Destino como
8080
. Isso define o destino apenas como porta8080
. Agora a regra permite que o tráfego de todas as origens use a porta8080
. É isso que precisamos, para que nosso aplicativo possa ser acessado de qualquer lugar. - Forneça uma descrição
Descrição da ilustração Adicionar regra de entrada
- Defina o CIDR de Origem como
Configurar Instância
As regras do firewall controlam o tráfego de entrada/saída de uma instância. Você configura regras de firewall diretamente na instância e fornece um nível adicional de segurança.
- Navegue na página de detalhes da instância criada. Compute > Instâncias > Clique na instância que você criou
- Copie o endereço IP público da sua instância.
- Conecte-se à instância usando SSH. Use a chave gerada por você ou fornecida durante a etapa de criação da instância. O nome de usuário padrão para instâncias que usam o sistema operacional Oracle Linux é
opc
. -
Execute os comandos de configuração do firewall. Isso modifica o firewall na própria instância para expor a porta
8080
e aceitar tráfego de entrada.sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp sudo firewall-cmd --reload
Instale e use o GraalVM Enterprise Edition no Ampere A1
A OCI oferece o Oracle GraalVM Enterprise Edition gratuitamente para seus clientes. O suporte ao GraalVM Enterprise está incluído na assinatura do Oracle Cloud. A combinação de configurações de computação baseadas em arquitetura Arm de alto desempenho e o GraalVM Enterprise no OCI fornece uma plataforma atraente para aplicativos corporativos novos e existentes.
- Navegue na página de detalhes da instância criada. Compute > Instâncias > Clique na instância que você criou.
- Copie o endereço IP público da sua instância.
- Faça log-in na instância usando SSH. Use a chave que você gerou ou forneceu durante a etapa de criação da instância. O nome de usuário padrão para instâncias que usam o sistema operacional Oracle Linux é
opc
.
Para instalar o GraalVM e o Git no OCI, execute o seguinte comando:
sudo yum install graalvm21-ee-11 git
Após a instalação, o GraalVM é disponibilizado no diretório /usr/lib64/graalvm
.
Execute aplicativos Java existentes no GraalVM
O GraalVM inclui um JDK e, por padrão, substitui o compilador Java JIT de camada superior pelo compilador GraalVM. O compilador GraalVM novo e inovador pode melhorar o desempenho dos aplicativos da linguagem JVM existentes. Após a instalação do GraalVM, o runtime java
estará disponível no sistema e você poderá verificar a versão com o comando a seguir.
java -version
java version "11.0.10" 2021-01-19 LTS
Java(TM) SE Runtime Environment GraalVM EE 21.0.0.2 (build 11.0.10+8-LTS-jvmci-21.0-b06)
Java HotSpot(TM) 64-Bit Server VM GraalVM EE 21.0.0.2 (build 11.0.10+8-LTS-jvmci-21.0-b06, mixed mode, sharing)
Como exemplo de um aplicativo Java existente, podemos executar o aplicativo de amostra Spring PetClinic, que é criado com Spring Boot.
-
Clone o repositório para começar.
git clone https://github.com/spring-projects/spring-petclinic.git
-
Crie e execute o aplicativo.
cd spring-petclinic ./mvnw spring-boot:run
Na primeira vez que você executar o aplicativo, o Maven fará download das dependências. Pode levar alguns minutos para que os downloads sejam concluídos. Você deverá ver uma saída semelhante ao seguinte exemplo:
2021-03-05 18:11:28.447 INFO 3704 --- [ main] o.s.s.petclinic.PetClinicApplication : No active profile set, falling back to default profiles: default 2021-03-05 18:11:31.531 INFO 3704 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2021-03-05 18:11:31.697 INFO 3704 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 144 ms. Found 4 JPA repository interfaces. 2021-03-05 18:11:33.436 INFO 3704 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2021-03-05 18:11:33.720 INFO 3704 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2021-03-05 18:11:33.721 INFO 3704 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5133 ms 2021-03-05 18:11:34.797 INFO 3704 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2021-03-05 18:11:34.902 INFO 3704 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.28.Final 2021-03-05 18:11:34.983 INFO 3704 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 2021-03-05 18:11:35.266 INFO 3704 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 2021-03-05 18:11:36.838 INFO 3704 --- [ main] o.h.tuple.entity.EntityMetamodel : HHH000157: Lazy property fetching available for: org.springframework.samples.petclinic.owner.Owner 2021-03-05 18:11:37.094 INFO 3704 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2021-03-05 18:11:37.112 INFO 3704 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2021-03-05 18:11:38.696 INFO 3704 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2021-03-05 18:11:40.604 INFO 3704 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 13 endpoint(s) beneath base path '/actuator' 2021-03-05 18:11:40.758 INFO 3704 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2021-03-05 18:11:40.783 INFO 3704 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 13.846 seconds (JVM running for 14.906)
O aplicativo começa em cerca de 14 segundos. Como você pode ver, o GraalVM contém um JDK completo e pode ser uma substituição drop-in para sua JVM existente.
Para saber mais sobre os sinalizadores de otimização disponíveis para o GraalVM, consulte a documentação aqui
Criar Imagens Nativas Rápidas Blazing
O GraalVM pode criar binários executáveis autocontidos dos seus aplicativos Java, que podem ser executados incrivelmente rapidamente. A compilação antecipada do GraalVM de seu código Java processa todas as classes de aplicativos, dependências e bibliotecas de tempo de execução, além de remover a sobrecarga e a pegada de uma JVM em si. No entanto, alguns recursos avançados de linguagem, como proxies de tempo de execução e reflexão, exigem configuração adicional. Muitas estruturas Java do microsserviço, como Micronaut, Helidon e Quarkus, suportam a criação imediata de imagens nativas.
-
Para iniciar, instale as ferramentas de imagem nativa. Esses pacotes estão disponíveis nos repositórios yum para OCI, mas não estão instalados por padrão.
cd ~ sudo yum install graalvm21-ee-11-native-image
Para este tutorial, estamos usando o Micronaut para criar o aplicativo porque o Micronaut usa uma injeção de dependência e um tempo de execução orientado a aspectos que não usa reflexão.
-
Gere um novo projeto usando micronaut.io/launch usando os comandos abaixo para começar:
curl --location --request GET 'https://launch.micronaut.io/create/default/com.example.graal-on-arm?lang=JAVA&build=MAVEN&test=JUNIT&javaVersion=JDK_11&features=graalvm' --output graal-on-arm.zip unzip graal-on-arm.zip -d graal-on-arm cd graal-on-arm
-
Execute o aplicativo para ver quanto tempo leva para que ele inicie em uma JVM:
./mvnw mn:run
Você deverá ver uma saída semelhante ao seguinte exemplo:
__ __ _ _ | \/ (_) ___ _ __ ___ _ __ __ _ _ _| |_ | |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __| | | | | | (__| | | (_) | | | | (_| | |_| | |_ |_| |_|_|\___|_| \___/|_| |_|\__,_|\__,_|\__| Micronaut (v2.5.3) 09:59:34.504 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 755ms. Server Running: http://localhost:8080
O aplicativo começa em 755 milissegundos, o que é impressionante.
-
Agora, crie uma imagem nativa para o aplicativo e compare o tempo de inicialização:
./mvnw package -Dpackaging=native-image
Leva cerca de 5 minutos para criar a imagem nativa. Depois de ser criada, a imagem nativa é colocada no diretório
target
e será nomeada com o nome do projeto. -
Execute a imagem nativa.
./target/graal-on-arm
Você deverá ver uma saída semelhante ao seguinte exemplo:
__ __ _ _ | | \/ (_) ___ _ __ ___ _ __ __ _ _ _| |_ | |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __| | | | | | (__| | | (_) | | | | (_| | |_| | |_ |_| |_|_|\___|_| \___/|_| |_|\__,_|\__,_|\__| Micronaut (v2.5.3) 09:59:18.558 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 18ms. Server Running: http://localhost:8080
A imagem ao vivo é mais de 40 vezes mais rápida, começando em apenas 18 milissegundos.
O principal resultado aqui é que, independentemente de quão simples ou complexa seja o seu aplicativo, as imagens nativas do GraalVM podem dar a você um aumento imediato no desempenho. Combinado com as configurações de computação mais recentes baseadas em arquitetura Arm e o GraalVM Enterprise, o Oracle Cloud Infrastructure fornece uma plataforma incomparável para criar e desenvolver suas cargas de trabalho empresariais.
Agradecimentos
Autor - Jeevan Joseph
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Get started with GraalVM on Ampere A1 in Oracle Cloud Infrastructure
F51447-01
December 2021
Copyright © 2021, Oracle and/or its affiliates.