1. Introdução
Última atualização:12/02/2020
arena de batalha de microsserviços
Você já participou de uma luta de bolas de neve em que se moveu e jogava bolas de neve em outras pessoas? Se não, tente algum dia! Mas agora, em vez de correr o risco de sofrer choques físicos, é possível criar um pequeno serviço acessível à rede (um microsserviço) que participará de uma batalha épica contra outros microsserviços. E como vamos realizar a primeira batalha de microsserviços em Atlanta, Geórgia, nossos microsserviços vão jogar pêssegos em vez de bolas de neve.
Talvez você esteja se perguntando... Mas como um microsserviço "gera" um pêssego em outros microsserviços? Um microsserviço pode receber solicitações de rede (geralmente por HTTP) e retornar respostas. Há um "administrador da arena" que enviará ao microsserviço o estado atual da arena. Em seguida, o microsserviço responderá com um comando especificando o que fazer.
É claro que o objetivo é vencer, mas ao longo do curso você vai aprender a criar e implantar microsserviços no Google Cloud.
Como funciona
Você vai criar um microsserviço com qualquer tecnologia que quiser (ou escolher entre as ativações Java, Kotlin ou Scala) e implantá-lo no Google Cloud. Depois da implantação, você vai preencher um formulário para informar o URL do microsserviço e adicionar à arena.
A arena contém todos os jogadores de uma determinada batalha. Para a conferência DevNexus, haverá uma arena para cada dia. Cada jogador representa um microsserviço que se move e joga pêssegos nos outros jogadores.
cerca de uma vez por segundo, o gerente da arena vai chamar seu microsserviço, enviando o estado atual da arena (onde estão os jogadores), e o microsserviço responderá com um comando sobre o que fazer. Na arena, você pode avançar, virar para a esquerda ou direita ou jogar um pêssego. Um pêssego lançado percorrerá até três espaços na direção para o qual o jogador está virado. Se um pêssego "chegar" para outro jogador, o arremessador ganha um ponto, e o que atingir o ponto perde um ponto. O tamanho da arena é ajustado automaticamente de acordo com o número atual de jogadores.
Confira como é a aparência da arena com três jogadores inventados:
Exemplo: arena Battle Peach
Conflitos rotativos
Na arena, é possível que vários jogadores tentem realizar ações conflitantes. Por exemplo, dois jogadores podem tentar se mover para o mesmo espaço. Em caso de conflito, vence o microsserviço com o menor tempo de resposta.
Assista à batalha
Para saber como o microsserviço está se saindo na batalha, confira a arena ao vivo.
API Battle
Para trabalhar com o gerente da arena, seu microsserviço vai precisar implementar uma API específica para participar da arena. O gerente da arena enviará o estado atual da arena em um HTTP POST para o URL fornecido com a seguinte estrutura JSON:
{
"_links": {
"self": {
"href": "https://YOUR_SERVICE_URL"
}
},
"arena": {
"dims": [4,3], // width, height
"state": {
"https://A_PLAYERS_URL": {
"x": 0, // zero-based x position, where 0 = left
"y": 0, // zero-based y position, where 0 = top
"direction": "N", // N = North, W = West, S = South, E = East
"wasHit": false,
"score": 0
}
... // also you and the other players
}
}
}
Sua resposta HTTP precisa ter o código de status 200 (OK) e o corpo da resposta contendo o próximo movimento codificado como um único caractere maiúsculo:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
Isso é tudo! Vamos mostrar como implantar um microsserviço no Cloud Run, um serviço do Google Cloud para executar microsserviços e outros aplicativos.
2. Como implantar o microsserviço
É possível criar seu microsserviço com qualquer tecnologia e implantá-lo em qualquer lugar, desde que ele seja acessível publicamente e esteja em conformidade com a API Battle. Para facilitar, você pode começar com um projeto de exemplo que escolha apenas um comando aleatório.
Escolha sua amostra para começar
É possível começar com três exemplos de microsserviços de batalha:
Java e Spring Boot (em inglês) | ||
Java e Quarkus (em inglês) | ||
Kotlin e Micronaut | ||
Kotlin e Quarkus (em inglês) | ||
Scala e Play Framework (link em inglês) | ||
Go |
Depois de decidir com qual amostra começar, clique no botão "Implantar no Cloud Run" acima. Isso vai iniciar o Cloud Shell (um console baseado na Web para uma máquina virtual na nuvem), onde a origem será clonada e, em seguida, criada em um pacote implantável (uma imagem de contêiner do Docker), que é depois carregado para o Google Container Registry e implantado no Cloud Run.
Quando solicitado, especifique a região us-central1
.
A captura de tela abaixo mostra a saída do Cloud Shell para criação e implantação de microsserviços
Verifique se o microsserviço funciona
No Cloud Shell, você pode fazer uma solicitação para o microsserviço recém-implantado, substituindo YOUR_SERVICE_URL
pelo URL do serviço (que está no Cloud Shell depois da linha "Seu aplicativo agora está ativo aqui"):
curl -d '{ "_links": { "self": { "href": "https://foo.com" } }, "arena": { "dims": [4,3], "state": { "https://foo.com": { "x": 0, "y": 0, "direction": "N", "wasHit": false, "score": 0 } } } }' -H "Content-Type: application/json" -X POST -w "\n" \ https://YOUR_SERVICE_URL
Você verá a string de resposta F, L, R ou T.
Pedir inclusão na arena
Você precisa preencher um pequeno formulário para entrar na arena. A parte mais difícil será determinar o que você quer usar na sua imagem de perfil. Você pode usar sua imagem do GitHub ou do LinkedIn, ou podemos escolher um avatar aleatório para você. Assim que analisarmos o envio, seu jogador aparecerá na arena.
Marca e Implantar mudanças
Antes de fazer as alterações, você precisa configurar algumas informações no Cloud Shell sobre o projeto do GCP e o exemplo usado. Primeiro liste seus projetos do GCP:
gcloud projects list
Você provavelmente tem apenas um projeto. Copie o PROJECT_ID
da primeira coluna e cole-o no comando a seguir (substituindo YOUR_PROJECT_ID
pelo ID do projeto real) para definir uma variável de ambiente que será usada em comandos posteriores:
export PROJECT_ID=YOUR_PROJECT_ID
Agora defina outra variável de ambiente para a amostra que você usou. Assim, nos comandos posteriores, poderemos especificar o diretório correto e o nome do serviço:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-micronaut export SAMPLE=scala-play
Agora você pode editar a origem do seu microsserviço no Cloud Shell. Para abrir o editor baseado na Web do Cloud Shell, execute este comando:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
Você verá mais instruções para fazer alterações.
Cloud Shell com o editor com o projeto de amostra aberto
Depois de salvar as alterações, crie o projeto no Cloud Shell usando o comando pack
. Esse comando usa Buildpacks para detectar o tipo de projeto, compilá-lo e criar o artefato implantável (uma imagem de contêiner do Docker).
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path cloudbowl-microservice-game/samples/$SAMPLE \ --builder heroku/buildpacks
Agora que a imagem do contêiner foi criada, use o comando docker (no Cloud Shell) para enviá-la ao Google Container Registry para que ela possa ser acessada pelo Cloud Run:
docker push gcr.io/$PROJECT_ID/$SAMPLE
Agora implante a nova versão no Cloud Run:
gcloud run deploy $SAMPLE\ --project=$PROJECT_ID\ --platform=managed\ --region=us-central1\ --image=gcr.io/$PROJECT_ID/$SAMPLE\ --memory=512Mi\ --allow-unauthenticated
Agora a arena usará sua nova versão.
3. Parabéns
Parabéns, você criou e implantou com sucesso um microsserviço que pode ser usado para lidar com outros microsserviços. Boa sorte!
Qual é a próxima etapa?
- Adicionar o rastreamento distribuído ao app Spring Boot
- Usar o AI Platform para tornar seu microsserviço super inteligente