Rumpus Pelangi Microservice

1. Pengantar

Terakhir Diperbarui: 06-05-2021

Dinamika Keberagaman Microservice

Pernahkah Anda terlibat dalam perang bola salju di mana Anda bergerak dan dengan riang melemparkan bola salju ke orang lain? Jika belum, coba kapan-kapan. Namun, alih-alih berisiko dipukul secara fisik, Anda dapat membangun layanan kecil yang dapat diakses jaringan (microservice) yang akan berpartisipasi dalam pertempuran epik melawan microservice lain, melemparkan pelangi alih-alih bola salju.

Anda mungkin bertanya-tanya... Namun, bagaimana cara microservice "melempar" pelangi ke microservice lain? Microservice dapat menerima permintaan jaringan (biasanya melalui HTTP) dan menampilkan respons. Ada "pengelola arena" yang akan mengirimkan status arena saat ini ke microservice Anda, lalu microservice Anda akan merespons dengan perintah yang menentukan apa yang harus dilakukan.

Tentu saja tujuannya adalah menang, tetapi di sepanjang perjalanan Anda akan belajar cara membangun dan men-deploy microservice di Google Cloud.

Cara Kerjanya

Anda akan membangun microservice dengan teknologi apa pun yang Anda inginkan (atau memilih dari starter Go, Java, Kotlin, Scala, NodeJS, atau Python), lalu men-deploy microservice di Google Cloud. Setelah di-deploy, Anda akan memberi tahu kami URL untuk mikroservice Anda, lalu kami akan menambahkannya ke arena.

Arena berisi semua pemain untuk pertarungan tertentu. Rainbow Rumpus akan memiliki arena sendiri. Setiap pemain mewakili microservice yang bergerak dan melemparkan pelangi ke pemain lain.

Sekitar sekali per detik, pengelola arena kami akan memanggil microservice Anda, mengirimkan status arena saat ini (tempat pemain berada), dan microservice Anda akan merespons dengan perintah tentang apa yang harus dilakukan. Di arena, Anda dapat bergerak maju, berbelok ke kiri atau kanan, atau melempar pelangi. Pelangi akan bergerak hingga tiga petak ke arah pemain menghadap. Jika pelangi "mengenai" pemain lain, pelempar akan mendapatkan satu poin dan pemain yang terkena akan kehilangan satu poin. Ukuran arena disesuaikan secara otomatis untuk jumlah pemain saat ini.

Berikut tampilan arena sebelumnya:

20628e6bd442bd11.png

Arena Contoh Pertempuran Satu

Konflik yang Berulang

Di arena, beberapa pemain dapat mencoba melakukan tindakan yang bertentangan. Misalnya, dua pemain mungkin mencoba berpindah ke ruang yang sama. Jika terjadi konflik, microservice dengan waktu respons tercepat akan menang.

Menyaksikan Pertempuran

Untuk melihat performa mikroservice Anda dalam pertarungan, lihat arena live.

Battle API

Untuk berinteraksi dengan pengelola arena kami, microservice Anda harus menerapkan API tertentu untuk berpartisipasi dalam arena. Pengelola arena akan mengirim status arena saat ini dalam HTTP POST ke URL yang Anda berikan kepada kami, dengan struktur JSON berikut:

{
  "_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
    }
  }
}

Respons HTTP Anda harus berupa kode status 200 (OK) dengan isi respons yang berisi langkah selanjutnya, yang dienkode sebagai satu karakter huruf besar dari:

F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw

Selesai. Mari kita pelajari cara men-deploy microservice di Cloud Run, layanan Google Cloud untuk menjalankan microservice dan aplikasi lainnya.

2. Login ke Google Cloud

Untuk dapat men-deploy microservice di Cloud Run, Anda harus login ke Google Cloud. Kami akan menerapkan kredit ke akun Anda dan Anda tidak perlu memasukkan kartu kredit. Biasanya lebih sedikit masalah jika menggunakan akun pribadi (misalnya, gmail.com) daripada akun G Suite karena terkadang admin G Suite mencegah pengguna mereka menggunakan fitur Google Cloud tertentu. Selain itu, konsol web yang akan kita gunakan akan berfungsi dengan baik di Chrome atau Firefox, tetapi mungkin mengalami masalah di Safari.

3. Men-deploy Microservice Anda

Anda dapat membuat microservice dengan teknologi apa pun dan men-deploy-nya di mana saja selama dapat dijangkau secara publik dan sesuai dengan Battle API. Namun, untuk mempermudah, kami akan membantu Anda memulai dari layanan contoh dan men-deploy-nya di Cloud Run.

Pilih Sampel Anda untuk Memulai

Ada banyak contoh microservice pertarungan yang dapat Anda gunakan sebagai titik awal:

Kotlin & Spring Boot

Sumber

Kotlin & Micronaut

Sumber

Kotlin & Quarkus

Sumber

Java & Spring Boot

Sumber

Java & Quarkus

Sumber

Go

Sumber

Node.js & Express

Sumber

Python & Flask

Sumber

Setelah Anda memutuskan sampel mana yang akan digunakan untuk memulai, klik tombol "Deploy on Cloud Run" di atas. Tindakan ini akan meluncurkan Cloud Shell (konsol berbasis web ke mesin virtual di cloud) tempat sumber akan di-clone, lalu dibangun ke dalam paket yang dapat di-deploy (image container Docker), yang kemudian diupload ke Google Container Registry, lalu di-deploy di Cloud Run.

Saat ditanya, tentukan wilayah us-central1.

Screenshot di bawah menunjukkan output Cloud Shell untuk build dan deployment microservice

d88e40430706a32b.png

Memverifikasi fungsi microservice

Di Cloud Shell, Anda dapat membuat permintaan ke mikroservice yang baru di-deploy, dengan mengganti YOUR_SERVICE_URL dengan URL layanan Anda (yang ada di Cloud Shell setelah baris "Your application is now live here"):

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

Anda akan melihat string respons F, L, R, atau T.

4. Meminta Penyertaan di Arena

Untuk bergabung dengan Rainbow Rumpus, Anda harus bergabung dengan arena. Buka rainbowrumpus.dev, klik gabung di arena tempat Anda akan memberikan URL microservice.

5. Membuat & Menerapkan Perubahan

Sebelum dapat melakukan perubahan, Anda perlu menyiapkan beberapa informasi di Cloud Shell tentang project GCP dan sampel yang Anda gunakan. Pertama, cantumkan project GCP Anda:

gcloud projects list

Anda mungkin hanya memiliki satu project. Salin PROJECT_ID dari kolom pertama dan tempelkan ke perintah berikut (ganti YOUR_PROJECT_ID dengan Project ID Anda yang sebenarnya), untuk menetapkan variabel lingkungan yang akan kita gunakan dalam perintah selanjutnya:

export PROJECT_ID=YOUR_PROJECT_ID

Sekarang tetapkan variabel lingkungan lain untuk sampel yang Anda gunakan sehingga di perintah selanjutnya kita dapat menentukan direktori dan nama layanan yang benar:

# Copy and paste ONLY ONE of these
export SAMPLE=kotlin-micronaut
export SAMPLE=kotlin-quarkus
export SAMPLE=kotlin-springboot
export SAMPLE=java-quarkus
export SAMPLE=java-springboot
export SAMPLE=go
export SAMPLE=nodejs
export SAMPLE=python

Sekarang, Anda dapat mengedit sumber untuk microservice dari dalam Cloud Shell. Untuk membuka editor berbasis web Cloud Shell, jalankan perintah ini:

cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md

Kemudian, Anda akan melihat petunjuk lebih lanjut untuk melakukan perubahan.

f910c9ef7b51c406.png

Cloud Shell dengan editor yang membuka project sampel

Setelah menyimpan perubahan, mulai aplikasi di Cloud Shell menggunakan perintah dari file README.md, tetapi pastikan terlebih dahulu Anda berada di direktori contoh yang benar di Cloud Shell:

cd cloudbowl-microservice-game/samples/$SAMPLE

Setelah aplikasi berjalan, buka tab Cloud Shell baru dan uji layanan menggunakan 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

Saat Anda siap men-deploy perubahan, bangun project Anda di Cloud Shell menggunakan perintah pack. Perintah ini menggunakan Buildpack untuk mendeteksi jenis project, mengompilasinya, dan membuat artefak yang dapat di-deploy (image container Docker).

# Make sure you are in a Cloud Shell tab where you set the PROJECT_ID
# and SAMPLE env vars. Otherwise, set them again.
pack build gcr.io/$PROJECT_ID/$SAMPLE \
  --path ~/cloudbowl-microservice-game/samples/$SAMPLE \
  --builder gcr.io/buildpacks/builder

Setelah image container Anda dibuat, gunakan perintah docker (di Cloud Shell) untuk mengirim image container ke Google Container Registry sehingga dapat diakses oleh Cloud Run:

docker push gcr.io/$PROJECT_ID/$SAMPLE

Sekarang deploy versi baru di Cloud Run:

gcloud run deploy $SAMPLE \
          --project=$PROJECT_ID \
          --platform=managed \
          --region=us-central1 \
          --image=gcr.io/$PROJECT_ID/$SAMPLE \
          --allow-unauthenticated

Sekarang arena akan menggunakan versi baru Anda.

6. Mengembangkan Secara Lokal (Opsional)

Anda dapat mengerjakan project secara lokal menggunakan IDE Anda sendiri dengan mengikuti langkah-langkah berikut:

  1. [Di Cloud Shell] Zip sampel:
# Make sure the SAMPLE env var is still set. If not, re-set it.
cd ~/cloudbowl-microservice-game/samples
zip -r cloudbowl-sample.zip $SAMPLE
  1. [Di Cloud Shell] Download file zip ke komputer Anda:
cloudshell download-file cloudbowl-sample.zip
  1. [Di komputer Anda] Ekstrak file, lalu buat & uji perubahan Anda
  2. [Di komputer Anda] Instal gcloud CLI
  3. [Di komputer Anda] Login ke Google Cloud:
gcloud auth login
  1. [Di komputer Anda] Tetapkan variabel lingkungan PROJECT_ID dan SAMPLE ke nilai yang sama seperti di Cloud Shell.
  2. [Di mesin Anda] Gunakan Cloud Build untuk membangun container (dari direktori project root):
gcloud alpha builds submit . \
  --pack=image=gcr.io/$PROJECT_ID/$SAMPLE \
  --project=$PROJECT_ID
  1. [Di komputer Anda] Deploy container baru:
gcloud run deploy $SAMPLE \
  --project=$PROJECT_ID \
  --platform=managed \
  --region=us-central1 \
  --image=gcr.io/$PROJECT_ID/$SAMPLE \
  --allow-unauthenticated

7. Continuous Delivery

Menyiapkan SCM

Siapkan GitHub agar Anda dapat berkolaborasi dengan tim di microservice Anda:

  1. Login ke GitHub
  2. Buat repo baru
  3. Jika Anda bekerja di komputer lokal, Anda dapat menggunakan antarmuka command line (CLI) git atau aplikasi GUI GitHub Desktop (Windows atau Mac). Jika menggunakan Cloud Shell, Anda harus menggunakan git CLI. Untuk mendapatkan kode microservice Anda di GitHub, ikuti petunjuk CLI atau GitHub Desktop.

Mengirimkan kode dengan git CLI

  1. Ikuti petunjuk git melalui https dengan token akses pribadi
  2. Pilih cakupan "repo"
  3. Siapkan git:
git config --global credential.helper \
  'cache --timeout=172800'
git config --global push.default current
git config --global user.email "YOUR@EMAIL"
git config --global user.name "YOUR NAME"
  1. Tetapkan variabel lingkungan untuk organisasi dan repositori GitHub (https://github.com/ORG/REPO)
export GITHUB_ORG=YOUR_GITHUB_ORG
export GITHUB_REPO=YOUR_GITHUB_REPO
  1. Kirim kode Anda ke repositori baru
# Make sure the SAMPLE env var is still set. If not, re-set it.
cd ~/cloudbowl-microservice-game/samples/$SAMPLE
git init
git add .
git commit -m init
git remote add origin https://github.com/$GITHUB_ORG/$GITHUB_REPO.git
git branch -M main

# This will now ask for your GitHub username & password
# for the password use the personal access token
git push -u origin main
  1. Setelah membuat perubahan, Anda dapat melakukan commit dan mengirim perubahan ke GitHub:
git add .
git status
git diff --staged
git commit -am "my changes"
git push

Mengirim kode dengan GitHub Desktop

  1. Download kode Anda menggunakan petunjuk dari lab "Mengembangkan Secara Lokal" sebelumnya
  2. Instal GitHub Desktop, luncurkan, dan login
  3. Meng-clone repo yang baru Anda buat

cf7f38c7c86a91cd.png

  1. Buka penjelajah file Anda dan salin project Anda ke repo baru
  2. Commit perubahan Anda

5f3c1552e30ad7c5.png

  1. Memublikasikan cabang utama Anda ke GitHub

Menyiapkan Deployment Berkelanjutan Cloud Run

Dengan penyiapan SCM di GitHub, Anda kini dapat menyiapkan Continuous Delivery sehingga setiap kali commit baru di-push ke cabang main, Cloud Build akan otomatis mem-build dan men-deploy perubahan. Anda juga dapat menambahkan Integrasi Berkelanjutan yang menjalankan pengujian sebelum men-deploy, tetapi langkah tersebut dibiarkan sebagai latihan untuk Anda karena contoh siap pakai tidak berisi pengujian apa pun.

  1. Di konsol Cloud, buka layanan Cloud Run Anda
  2. Klik tombol "SET UP CONTINUOUS DEPLOYMENT"
  3. Lakukan autentikasi dengan GitHub dan pilih repositori mikroservice Anda

a3b5692f178869bc.png

  1. Pilih repositori GitHub Anda dan tetapkan cabang ke: ^main$

338f1c00f33d2f65.png

  1. Menetapkan Jenis Build untuk menggunakan Buildpacks
  2. Klik Simpan untuk menyiapkan Continuous Deployment.

8. Kemampuan observasi

Barang rusak. Observabilitas memberi kita kemampuan untuk mengetahui kapan hal itu terjadi dan mendiagnosis alasannya. Metrik menunjukkan data tentang kesehatan dan penggunaan layanan kami. Log menampilkan informasi yang diinstrumentasikan secara manual yang dikeluarkan dari layanan kami. Pemberitahuan memungkinkan kami diberi tahu saat terjadi masalah. Mari kita pelajari lebih lanjut setiap cara tersebut.

Metrik

  1. Temukan layanan Anda di daftar layanan Cloud Run
  2. Klik nama layanan Anda untuk membuka dasbor metriknya

8491b8ec6bc5b4db.png

  1. Klik menu ⋮ metrik, lalu pilih "Lihat di Metrics Explorer"
  2. Anda kini dapat mengubah metrik, filter, pengelompokan, dan opsi lainnya untuk resource. Misalnya, Anda dapat melihat latensi layanan rata-rata untuk semua layanan:

f0d666d8f4221d45.png

Log

Output STDOUT dari layanan dikirim ke sistem Logging Google Cloud. Anda dapat mengakses tampilan log dasar dari halaman admin layanan Cloud Run, seperti:

40058a82c9299cff.png

Di log Cloud Run, Anda dapat memfilter berdasarkan tingkat keparahan dan memfilter log. Untuk fleksibilitas yang lebih baik, klik: 186fdb0e6d39a6ca.png

Pemberitahuan

  1. Buat URL pemeriksaan kondisi untuk layanan Anda.
  2. Untuk Spring Boot, cukup tambahkan dependensi berikut:
org.springframework.boot:spring-boot-starter-actuator
  1. Buat atau perbarui src/main/resources/application.properties dan nonaktifkan pemeriksaan ruang disk:
management.health.diskspace.enabled=false
  1. Buat pemberitahuan uptime, dengan menentukan protokol, nama host, dan jalur Anda. Untuk Spring Boot, jalur tersebut adalah: /actuator/health
  2. Menguji pemberitahuan

6948d13b263bf573.png

  1. Buat pemberitahuan

9. Selamat

Selamat, Anda telah berhasil membuat dan men-deploy microservice yang dapat bertarung dengan microservice lain. Semoga berhasil!

Dokumen Referensi