1. Pengantar
Terakhir Diperbarui: 06-05-2021
Microservice Rainbow Rumpus
Pernahkah Anda bermain perang bola salju dengan berlari-lari dan melempar bola salju ke orang lain? Jika belum, coba suatu saat nanti. Namun, sekarang, alih-alih berisiko terkena pukulan secara fisik, Anda dapat membuat layanan kecil yang dapat diakses jaringan (microservice) yang akan berpartisipasi dalam pertempuran epik melawan microservice lain, dengan melemparkan pelangi, bukan bola salju.
Anda mungkin bertanya-tanya... Namun, bagaimana cara microservice "menampilkan" pelangi ke microservice lainnya? 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 tindakan yang harus dilakukan.
Tentu saja tujuannya adalah untuk menang, tetapi di sepanjang jalan, Anda akan mempelajari cara mem-build dan men-deploy microservice di Google Cloud.
Cara Kerjanya
Anda akan mem-build microservice dengan teknologi apa pun yang Anda inginkan (atau memilih dari pemicu Go, Java, Kotlin, Scala, NodeJS, atau Python), lalu men-deploy microservice di Google Cloud. Setelah di-deploy, Anda akan memberi tahu kami URL untuk microservice Anda, lalu kami akan menambahkannya ke arena.
Arena berisi semua pemain untuk pertempuran tertentu. Rainbow Rumpus akan memiliki arenanya 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 tindakan yang harus dilakukan. Di arena, Anda dapat bergerak maju, berbelok ke kiri atau kanan, atau melemparkan pelangi. Pelangi akan bergerak hingga tiga petak ke arah yang dituju pemain. Jika pelangi "menabrak" pemain lain, pelempar mendapatkan satu poin dan pemain yang tertabrak kehilangan satu poin. Ukuran arena disesuaikan secara otomatis untuk jumlah pemain saat ini.
Berikut adalah tampilan arena sebelumnya:
Contoh arena Battle One
Konflik Berulang
Di arena, beberapa pemain mungkin 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 Pertarungan
Untuk melihat performa microservice Anda dalam pertempuran, lihat arena live.
Battle API
Agar dapat bekerja dengan pengelola arena kami, microservice Anda harus menerapkan API tertentu untuk berpartisipasi dalam arena. Pengelola arena akan mengirimkan 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 Anda berikutnya, yang dienkode sebagai satu karakter huruf besar dari:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
Selesai. Mari kita bahas cara men-deploy microservice di Cloud Run, 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, penggunaan akun pribadi (misalnya, gmail.com) lebih mudah daripada akun GSuite karena terkadang admin GSuite mencegah penggunanya 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 dapat mem-build 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-deploynya di Cloud Run.
Memilih Sampel untuk Memulai
Ada banyak contoh microservice battle yang dapat Anda mulai:
Kotlin & Spring Boot | ||
Kotlin & Micronaut | ||
Kotlin & Quarkus | ||
Java & Spring Boot | ||
Java & Quarkus | ||
Go | ||
Node.js & Express | ||
Python & Flask |
Setelah Anda memutuskan contoh mana yang akan digunakan sebagai awal, klik tombol "Deploy on Cloud Run" di atas. Tindakan ini akan meluncurkan Cloud Shell (konsol berbasis web ke virtual machine di cloud) tempat sumber akan di-clone, lalu di-build menjadi paket yang dapat di-deploy (image container docker), yang kemudian diupload ke Google Container Registry, lalu di-deploy di Cloud Run.
Jika diminta, tentukan region us-central1
.
Screenshot di bawah menunjukkan output Cloud Shell untuk build dan deployment microservice
Memverifikasi bahwa microservice berfungsi
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 "Aplikasi Anda kini aktif di sini"):
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 ke Rainbow Rumpus, Anda harus bergabung ke arena. Buka rainbowrumpus.dev, klik join di arena tempat Anda akan memberikan URL microservice.
5. Membuat & Men-deploy Perubahan
Sebelum dapat melakukan perubahan, Anda perlu menyiapkan beberapa informasi di Cloud Shell tentang project GCP dan contoh 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 dalam perintah berikutnya, 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.
Cloud Shell dengan editor yang membuka project contoh
Setelah menyimpan perubahan, mulai aplikasi di Cloud Shell menggunakan perintah dari file README.md
, tetapi pertama-tama pastikan 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
Jika Anda siap men-deploy perubahan, build project di Cloud Shell menggunakan perintah pack
. Perintah ini menggunakan Buildpack untuk mendeteksi jenis project, mengompilasi, 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:
- [Di Cloud Shell] Kumpulkan sampel dalam file ZIP:
# 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
- [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 komputer Anda] Tetapkan variabel lingkungan
PROJECT_ID
, danSAMPLE
ke nilai yang sama seperti di Cloud Shell. - [Di komputer Anda] Gunakan Cloud Build untuk mem-build container (dari direktori project root):
gcloud alpha builds submit . \ --pack=image=gcr.io/$PROJECT_ID/$SAMPLE \ --project=$PROJECT_ID
- [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 Anda di microservice:
- Login ke GitHub
- Membuat repo baru
- Jika 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 CLI git. Untuk mendapatkan kode microservice di GitHub, ikuti petunjuk CLI atau GitHub Desktop.
Mengirimkan kode dengan git CLI
- Ikuti petunjuk git melalui https dengan token akses pribadi
- Pilih cakupan "repo"
- 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"
- Menetapkan variabel lingkungan untuk organisasi dan repo GitHub (
https://github.com/ORG/REPO
)
export GITHUB_ORG=YOUR_GITHUB_ORG export GITHUB_REPO=YOUR_GITHUB_REPO
- Mengirim kode Anda ke repo 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
- Setelah melakukan perubahan, Anda dapat melakukan commit dan mengirim perubahan ke GitHub:
git add . git status git diff --staged git commit -am "my changes" git push
Mengirimkan kode dengan GitHub desktop
- Download kode Anda menggunakan petunjuk dari lab "Mengembangkan Secara Lokal" sebelumnya
- Instal GitHub Desktop, luncurkan, dan login
- Meng-clone repo yang baru Anda buat
- Buka file explorer dan salin project Anda ke repo baru
- Melakukan commit pada perubahan
- Memublikasikan cabang utama ke GitHub
Menyiapkan Deployment Berkelanjutan Cloud Run
Dengan penyiapan SCM di GitHub, Anda kini dapat menyiapkan Continuous Delivery sehingga setiap kali commit baru didorong ke cabang main
, Cloud Build akan otomatis mem-build dan men-deploy perubahan. Anda juga dapat menambahkan Integrasi Kontinyu yang menjalankan pengujian sebelum men-deploy, tetapi langkah tersebut telah dibiarkan sebagai latihan untuk Anda karena contoh siap pakai tidak berisi pengujian apa pun.
- Di konsol Cloud, buka layanan Cloud Run Anda
- Klik tombol "SET UP CONTINUOUS DEPLOYMENT"
- Lakukan autentikasi dengan GitHub dan pilih repositori layanan mikro Anda
- Pilih repo GitHub Anda dan tetapkan cabang ke:
^main$
- Menetapkan Jenis Build untuk menggunakan Buildpack
- Klik Simpan untuk menyiapkan Continuous Deployment.
8. Kemampuan observasi
Hal-hal bisa rusak. Observabilitas memberi kita kemampuan untuk mengetahui kapan hal itu terjadi dan mendiagnosis penyebabnya. Metrik menunjukkan data tentang kondisi dan penggunaan layanan kami. Log menampilkan informasi yang diinstrumentasikan secara manual yang dikeluarkan dari layanan kami. Pemberitahuan memungkinkan kita mendapatkan notifikasi saat terjadi masalah. Mari kita pelajari lebih lanjut setiap opsi tersebut.
Metrik
- Temukan layanan Anda di daftar layanan Cloud Run
- Klik nama layanan untuk membuka dasbor metriknya
- Klik menu ⋮ metrik, lalu pilih "Lihat di Metrics Explorer"
- Anda kini dapat mengubah metrik, filter, pengelompokan, dan opsi lainnya untuk resource. Misalnya, Anda dapat melihat latensi layanan rata-rata untuk semua layanan:
Log
Output STDOUT dari layanan dikirim ke sistem Google Cloud Logging. Anda dapat mengakses tampilan log dasar dari halaman admin layanan Cloud Run, seperti:
Di log Cloud Run, Anda dapat memfilter menurut tingkat keparahan dan memfilter log. Untuk fleksibilitas yang lebih besar, klik:
Pemberitahuan
- Buat URL healthcheck untuk layanan Anda.
- Untuk Spring Boot, cukup tambahkan dependensi berikut:
org.springframework.boot:spring-boot-starter-actuator
- Buat atau perbarui
src/main/resources/application.properties
dan nonaktifkan pemeriksaan ruang disk:
management.health.diskspace.enabled=false
- Buat pemberitahuan uptime, dengan menentukan protokol, nama host, dan jalur Anda. Untuk Spring Boot, jalurnya adalah:
/actuator/health
- Menguji pemberitahuan
- Membuat pemberitahuan
9. Selamat
Selamat, Anda telah berhasil mem-build dan men-deploy microservice yang dapat bersaing dengan microservice lainnya. Semoga berhasil!