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:
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 | ||
Kotlin & Sepatu Bot Musim Semi |
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.
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.
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:
- [Di Cloud Shell] Siapkan sampel:
cd ~/cloudbowl-microservice-game/samples; zip -r cloudbowl-sample.zip $SAMPLE
- [Di Cloud Shell] Download file zip ke mesin Anda:
cloudshell download-file cloudbowl-sample.zip
- [Di komputer] Ekstrak file, lalu buat & menguji perubahan Anda
- [Di komputer] Menginstal gcloud CLI
- [Di komputer Anda] Login ke Google Cloud:
gcloud auth login
- [Di mesin Anda] Tetapkan variabel lingkungan
PROJECT_ID
danSAMPLE
ke nilai yang sama seperti di Cloud Shell. - [Di mesin Anda] Gunakan Cloud Build untuk membangun container (dari direktori root project):
gcloud alpha builds submit . --pack=image=gcr.io/$PROJECT_ID/$SAMPLE
- [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?