Battle One - Medan Pertempuran Microservice

1. Pengantar

Terakhir diperbarui: 26-08-2020

Arena Pertempuran Microservice

Pernah terlibat dalam pertarungan bola salju dan kamu bergerak dan melempar bola salju dengan bermain-main ke orang lain? Jika belum, cobalah suatu hari nanti! Namun, bukannya mengambil risiko dihajar secara fisik, Anda dapat membangun layanan kecil yang dapat diakses ke jaringan (microservice) yang akan ambil bagian dalam pertempuran epik melawan microservice lainnya. Dan karena kita menyelenggarakan pertempuran microservice di SpringOne ini, microservice kita akan menampilkan dedaunan, bukan bola salju.

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

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

Cara Kerjanya

Anda akan membangun microservice dengan teknologi apa pun yang diinginkan (atau memilih dari pemicu Java, Kotlin, atau Scala), lalu men-deploy microservice di Google Cloud. Setelah di-deploy, Anda perlu mengisi formulir untuk memberi tahu kami URL untuk microservice Anda, lalu kami akan menambahkannya ke arena.

Arena berisi semua pemain untuk suatu pertempuran. Konferensi SpringOne akan memiliki arenanya sendiri. Setiap pemain mewakili microservice yang bergerak dan melempar daun ke pemain lain.

Sekitar sekali satu detik, pengelola arena kami akan memanggil microservice Anda, mengirimkan status arena saat ini (tempat pemain berada), dan microservice Anda akan merespons dengan perintah tindakan yang harus dilakukan. Di arena, kamu bisa bergerak maju, berbelok ke kiri atau kanan, atau melempar daun. Daun yang dilempar akan berpindah hingga tiga spasi ke arah hadap pemain. Jika daun "terbentur" pemain lain, pelempar mendapatkan satu poin dan pemain yang terkena serangan kehilangan satu poin. Ukuran arena disesuaikan otomatis dengan jumlah pemain saat ini.

Beginilah tampilan arena masa lalu:

20628e6bd442bd11.pngS

Contoh arena Battle One

Konflik yang Berkelanjutan

Dalam arena, ada kemungkinan beberapa pemain mencoba melakukan tindakan yang saling bertentangan. Misalnya, dua pemain mungkin mencoba berpindah ke ruang yang sama. Jika terjadi konflik, microservice dengan waktu respons tercepat yang menang.

Menonton Pertempuran

Untuk mengetahui performa microservice Anda dalam pertempuran, lihat arena live.

Battle API

Agar dapat bekerja sama dengan pengelola arena kami, microservice Anda perlu menerapkan API khusus untuk berpartisipasi dalam arena. Pengelola arena akan mengirimkan kondisi arena saat ini dalam POST HTTP 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 berikutnya, yang dienkode sebagai karakter huruf besar tunggal dari:

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

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

2. Login ke Google Cloud

Agar 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, menggunakan akun pribadi (misalnya, gmail.com) daripada akun G Suite biasanya tidak terlalu bermasalah karena terkadang admin G Suite mencegah pengguna mereka menggunakan fitur Google Cloud tertentu. Selain itu, konsol web yang akan kita gunakan seharusnya berfungsi dengan baik dengan Chrome atau Firefox, tetapi mungkin mengalami masalah di Safari.

3. Men-deploy Microservice

Anda dapat membangun 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 dua contoh microservice battle yang dapat Anda mulai:

Java & Sepatu Bot Musim Semi

Sumber

Men-deploy di Cloud Run

Kotlin & Sepatu Bot Musim Semi

Sumber

Men-deploy di Cloud Run

Setelah Anda memutuskan sampel mana yang akan digunakan, klik ikon "Deploy on Cloud Run" tombol di atas. Tindakan ini akan meluncurkan Cloud Shell (konsol berbasis web ke virtual machine 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 diminta, tentukan region us-central1.

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

d88e40430706a32b.png

Memverifikasi fungsi microservice

Di Cloud Shell, Anda dapat membuat permintaan ke microservice yang baru di-deploy, dengan mengganti YOUR_SERVICE_URL dengan URL untuk 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. Minta Penyertaan dalam Arena

Agar dapat mengikuti arena, Anda harus mengirim pesan ke saluran Slack #3-sponsor-google-cloud dengan nama Anda, URL layanan Cloud Run, dan nama pengguna GitHub Anda untuk avatar / foto profilnya. Setelah kami memvalidasi informasi, pemain Anda akan muncul di arena.

5. Merek & Men-deploy Perubahan

Agar dapat melakukan perubahan, Anda perlu menyiapkan beberapa informasi di Cloud Shell tentang project GCP dan sampel yang Anda gunakan. Cantumkan project GCP Anda terlebih dahulu:

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 berikutnya:

export PROJECT_ID=YOUR_PROJECT_ID

Sekarang, tetapkan variabel lingkungan lain untuk contoh yang Anda gunakan sehingga dalam perintah berikutnya kita dapat menentukan direktori dan nama layanan yang benar:

# Copy and paste ONLY ONE of these
export SAMPLE=java-springboot
export SAMPLE=kotlin-springboot

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

Anda akan melihat petunjuk lebih lanjut untuk melakukan perubahan.

f910c9ef7b51c406.png

Cloud Shell dengan editor dengan project contoh yang terbuka

Setelah menyimpan perubahan, mulai aplikasi di Cloud Shell:

cd cloudbowl-microservice-game/samples/$SAMPLE
./mvnw spring-boot:run

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

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

pack build gcr.io/$PROJECT_ID/$SAMPLE \
  --path ~/cloudbowl-microservice-game/samples/$SAMPLE \
  --builder gcr.io/buildpacks/builder

Setelah image container dibuat, gunakan perintah docker (di Cloud Shell) untuk mengirim image container ke Google Container Registry sehingga image tersebut 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\
          --memory=512Mi\
          --allow-unauthenticated

Sekarang arena akan menggunakan versi barumu!

6. Mengembangkan Secara Lokal

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

  1. [Di Cloud Shell] Siapkan sampel:

cd ~/cloudbowl-microservice-game/samples; zip -r cloudbowl-sample.zip $SAMPLE

  1. [Di Cloud Shell] Download file zip ke mesin Anda:

cloudshell download-file cloudbowl-sample.zip

  1. [Di komputer] Ekstrak file, lalu buat & menguji perubahan Anda
  2. [Di komputer] Menginstal gcloud CLI
  3. [Di komputer Anda] Login ke Google Cloud:

gcloud auth login

  1. [Di mesin 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 root project):

gcloud alpha builds submit . --pack=image=gcr.io/$PROJECT_ID/$SAMPLE

  1. [Di mesin Anda] Deploy container baru:

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

7. Selamat

Selamat, Anda telah berhasil membangun dan men-deploy microservice yang dapat bersaing dengan microservice lainnya. Semoga berhasil!

Lanjutkan Belajar

Dokumen Referensi

8. FAQ

Mengapa microservice saya tidak muncul di arena?