1. Pengantar
Terakhir diperbarui: 12-02-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 pertama di Atlanta, Georgia, microservice kami akan menampilkan persik, bukan bola salju.
Anda mungkin bertanya-tanya... Namun, bagaimana microservice "menampilkan" persik di microservice lainnya? 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. Untuk konferensi DevNexus, akan ada satu arena setiap hari. Setiap pemain mewakili microservice yang bergerak dan melemparkan persik 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 buah persik. Persik yang dilempar akan meluncur hingga tiga spasi ke arah hadap pemain. Jika buah persik "memukul" pemain lain, pelempar mendapatkan satu poin dan pemain yang terkena serangan kehilangan satu poin. Ukuran arena disesuaikan otomatis dengan jumlah pemain saat ini.
Berikut adalah tampilan arena dengan tiga pemain yang dibuat-buat:
Contoh arena Battle Peach
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. 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. Untuk mempermudah, Anda dapat memulai dengan proyek sampel yang hanya memilih perintah acak.
Pilih Sampel Anda untuk Memulai
Ada tiga contoh microservice battle yang dapat Anda mulai:
Java & Sepatu Bot Musim Semi | ||
Java & Kuarkus | ||
Kotlin & Micronaut | ||
Kotlin & Kuarkus | ||
Skala & Framework Play | ||
Go |
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
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.
Minta Penyertaan di Arena
Anda harus mengisi formulir singkat untuk berpartisipasi dalam arena. Bagian tersulit adalah menentukan apa yang ingin Anda gunakan untuk foto profil Anda. Anda dapat menggunakan gambar GitHub, gambar LinkedIn, atau kami akan memilih avatar acak untuk Anda. Setelah kami meninjau kiriman, pemain Anda akan muncul di arena.
Kreasi & 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-micronaut export SAMPLE=scala-play
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.
Cloud Shell dengan editor dengan project contoh yang terbuka
Setelah menyimpan perubahan, build 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 heroku/buildpacks
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!
3. Selamat
Selamat, Anda telah berhasil membangun dan men-deploy microservice yang dapat bersaing dengan microservice lainnya. Semoga berhasil!
Apa selanjutnya?
- Menambahkan pelacakan terdistribusi ke aplikasi Spring Boot
- Menggunakan AI Platform untuk menjadikan microservice Anda sangat cerdas