1. Pengantar
Terakhir Diperbarui: 26-08-2020
Microservices Battle Arena
Pernahkah Anda terlibat dalam pertarungan bola salju di mana Anda bergerak dan melempar bola salju ke orang lain dengan riang? 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 lainnya. Karena kita mengadakan pertarungan microservice ini di SpringOne, microservice kita akan melempar dedaunan, bukan bola salju.
Anda mungkin bertanya-tanya... Namun, bagaimana cara microservice "melempar" daun 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 Java, Kotlin, atau Scala), lalu men-deploy microservice di Google Cloud. Setelah di-deploy, Anda akan mengisi formulir untuk memberi tahu kami URL untuk mikroservice Anda, lalu kami akan menambahkannya ke arena.
Arena berisi semua pemain untuk pertarungan tertentu. Konferensi SpringOne akan memiliki arena sendiri. Setiap pemain mewakili microservice yang bergerak dan melemparkan daun 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 untuk melakukan sesuatu. Di arena, Anda dapat bergerak maju, berbelok ke kiri atau kanan, atau melempar daun. Daun yang dilempar akan bergerak hingga tiga petak ke arah pemain menghadap. Jika daun "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:

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 dua contoh microservice pertarungan yang dapat Anda gunakan sebagai titik awal:
Java & Spring Boot | ||
Kotlin & Spring Boot |
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

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 disertakan dalam arena, Anda harus mengirim pesan ke saluran Slack #3-sponsor-google-cloud dengan nama Anda, URL layanan Cloud Run, dan secara opsional nama pengguna GitHub Anda untuk foto profil / avatar. Setelah kami memvalidasi informasi tersebut, pemain Anda akan muncul di arena.
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=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
Kemudian, Anda akan melihat petunjuk lebih lanjut untuk melakukan perubahan.

Cloud Shell dengan editor yang membuka project sampel
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
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).
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\
--memory=512Mi\
--allow-unauthenticated
Sekarang arena akan menggunakan versi baru Anda.
6. Mengembangkan Secara Lokal
Anda dapat mengerjakan project secara lokal menggunakan IDE Anda sendiri dengan mengikuti langkah-langkah berikut:
- [Di Cloud Shell] Zip sampel:
cd ~/cloudbowl-microservice-game/samples; zip -r cloudbowl-sample.zip $SAMPLE
- [Di Cloud Shell] Download file zip ke komputer Anda:
cloudshell download-file cloudbowl-sample.zip
- [Di komputer Anda] Ekstrak file, lalu buat & uji perubahan Anda
- [Di komputer Anda] Instal gcloud CLI
- [Di komputer Anda] Login ke Google Cloud:
gcloud auth login
- [Di mesin Anda] Tetapkan variabel lingkungan
PROJECT_IDdanSAMPLEke nilai yang sama seperti di Cloud Shell. - [Di mesin Anda] Gunakan Cloud Build untuk membangun container (dari direktori project root):
gcloud alpha builds submit . --pack=image=gcr.io/$PROJECT_ID/$SAMPLE
- [Di komputer 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 membuat dan men-deploy microservice yang dapat bertarung dengan microservice lain. Semoga berhasil!
Lanjutkan Pembelajaran
Dokumen Referensi
8. FAQ
Mengapa microservice saya tidak muncul di arena?