1. Introdução
Última atualização:26/08/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 já que vamos realizar esta batalha de microsserviços na SpringOne, nossos microsserviços vão jogar folhas em vez de bolas de neve.
Talvez você esteja se perguntando... Mas como um microsserviço "gera" 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. A conferência da SpringOne terá uma arena própria. Cada jogador representa um microsserviço que se move e lança folhas para os 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 uma folha. Uma folha lançada se desloca até três espaços na direção para a qual o jogador está virado. Se uma folha "tocar" 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.
Esta é a aparência de uma arena antiga:
Exemplo: arena Battle One
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. Fazer login no Google Cloud
Para implantar o microsserviço no Cloud Run, você precisa fazer login no Google Cloud. Aplicaremos um crédito à sua conta e você não precisará inserir um cartão de crédito. Geralmente, é menos problemático usar uma conta pessoal (por exemplo, gmail.com) em vez de uma conta do G Suite porque às vezes os administradores do G Suite impedem que os usuários utilizem determinados recursos do Google Cloud. Além disso, o console da Web que vamos usar deve funcionar muito bem com o Chrome ou o Firefox, mas pode apresentar problemas no Safari.
3. 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. Mas, para facilitar, vamos ajudar você a começar com um serviço de exemplo e implantá-lo no Cloud Run.
Escolha sua amostra para começar
É possível começar com dois exemplos de microsserviços de batalha:
Java e Spring Boot (em inglês) | ||
Kotlin e Spring Boot (em inglês) |
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.
4. Solicitar inclusão na arena
Para ser incluído na arena, você precisa enviar uma mensagem ao canal #3-sponsor-google-cloud do Slack com seu nome, o URL do serviço do Cloud Run e, se quiser, seu nome de usuário do GitHub como avatar / foto do perfil. Depois que validarmos as informações, seu jogador aparecerá na arena.
5. 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-springboot
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, inicie o aplicativo no Cloud Shell:
cd cloudbowl-microservice-game/samples/$SAMPLE ./mvnw spring-boot:run
Quando o aplicativo estiver em execução, abra uma nova guia do Cloud Shell e teste o serviço usando curl:
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" \ http://localhost:8080
Quando estiver tudo pronto para implantar as mudanças, 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 gcr.io/buildpacks/builder
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.
6. Desenvolver localmente
Para trabalhar no projeto localmente usando seu próprio ambiente de desenvolvimento integrado, siga estas etapas:
- [No Cloud Shell] Compacte a amostra:
cd ~/cloudbowl-microservice-game/samples; zip -r cloudbowl-sample.zip $SAMPLE
- [No Cloud Shell] Faça o download do arquivo ZIP para sua máquina:
cloudshell download-file cloudbowl-sample.zip
- [Na sua máquina] Descompacte o arquivo, depois crie & testar as alterações
- [Na sua máquina] Instale a gcloud CLI
- [Na sua máquina] Faça login no Google Cloud:
gcloud auth login
- [Na sua máquina] Defina as variáveis de ambiente
PROJECT_ID
eSAMPLE
com os mesmos valores do Cloud Shell. - [Na sua máquina] Use o Cloud Build para criar o contêiner (do diretório raiz do projeto):
gcloud alpha builds submit . --pack=image=gcr.io/$PROJECT_ID/$SAMPLE
- [Na sua máquina] Implante o novo contêiner:
gcloud run deploy $SAMPLE --project=$PROJECT_ID --platform=managed --region=us-central1 --image=gcr.io/$PROJECT_ID/$SAMPLE --memory=512Mi --allow-unauthenticated
7. 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!
Continuar aprendendo
Documentos de referência
8. Perguntas frequentes
Por que meu microsserviço não está aparecendo na arena?