1. Pengantar
Terakhir diperbarui: 06-05-2021
Rimpus Pelangi 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, alih-alih mengambil risiko dipukul secara fisik, Anda dapat membangun layanan kecil yang dapat diakses jaringan (microservice) yang akan ambil bagian dalam pertempuran epik melawan microservice lainnya, dengan melemparkan pelangi, bukan bola salju.
Anda mungkin bertanya-tanya... Namun, bagaimana microservice "menampilkan" pelangi 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 Go, Java, Kotlin, Scala, NodeJS, atau Python), lalu men-deploy microservice di Google Cloud. Setelah di-deploy, Anda harus memberi tahu kami URL untuk microservice Anda, lalu kami akan menambahkannya ke arena.
Arena berisi semua pemain untuk suatu pertempuran. Rainbow Rumpus akan memiliki arenanya sendiri. Setiap pemain mewakili microservice yang bergerak dan melemparkan pelangi 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 pelangi. Pelangi akan bergerak hingga tiga spasi ke arah yang dihadap pemain. Jika pelangi "mengalami" 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 banyak contoh microservice battle yang dapat Anda mulai:
Kotlin & Sepatu Bot Musim Semi | ||
Kotlin & Micronaut | ||
Kotlin & Kuarkus | ||
Java & Sepatu Bot Musim Semi | ||
Java & Kuarkus | ||
Go | ||
Node.js & Ekspres | ||
Python & Botol Wiski |
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
Untuk bergabung dalam Rainbow Rumpus, kamu harus bergabung di arena. Buka rainbowrumpus.dev klik gabung di arena tempat Anda akan memberikan URL microservice.
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=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
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 menggunakan perintah dari file README.md
. Namun, pastikan terlebih dahulu Anda berada dalam direktori sampel 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 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).
# 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 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 \ --allow-unauthenticated
Sekarang arena akan menggunakan versi barumu!
6. Mengembangkan secara Lokal (Opsional)
Anda dapat mengerjakan project secara lokal menggunakan IDE Anda sendiri dengan mengikuti langkah-langkah berikut:
- [Di Cloud Shell] Siapkan sampel:
# 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 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 \ --project=$PROJECT_ID
- [Di mesin 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
Siapkan SCM
Siapkan GitHub agar Anda dapat berkolaborasi dengan tim di microservice:
- Login ke GitHub
- Membuat repositori baru
- Jika Anda mengerjakan 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 git CLI. Untuk mendapatkan kode microservice di GitHub, ikuti petunjuk CLI atau GitHub Desktop.
Mengirim kode dengan git CLI
- Ikuti git over https dengan petunjuk token akses pribadi
- Pilih "repo" ruang lingkup
- 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"
- Tetapkan env vars untuk org dan repo GitHub (
https://github.com/ORG/REPO
)
export GITHUB_ORG=YOUR_GITHUB_ORG export GITHUB_REPO=YOUR_GITHUB_REPO
- Mengirim kode Anda ke repositori 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 tersebut ke GitHub:
git add . git status git diff --staged git commit -am "my changes" git push
Mengirim kode Anda dengan desktop GitHub
- Download kode Anda menggunakan instruksi dari bagian sebelumnya "Develop Locally" lab
- Instal GitHub Desktop, luncurkan, lalu login
- Meng-clone repo yang baru dibuat
- Buka file explorer dan salin project Anda ke dalam repo baru
- Commit perubahan Anda
- Memublikasikan cabang utama Anda ke GitHub
Menyiapkan Deployment Berkelanjutan Cloud Run
Dengan penyiapan SCM di GitHub, sekarang Anda dapat menyiapkan Continuous Delivery sehingga setiap kali commit baru dikirim ke cabang main
, Cloud Build akan otomatis membangun dan men-deploy perubahan. Anda juga dapat menambahkan Continuous Integration yang menjalankan pengujian sebelum men-deploy, tetapi langkah tersebut merupakan latihan untuk Anda karena sampel siap pakai tidak berisi pengujian apa pun.
- Di konsol Cloud, buka layanan Cloud Run Anda
- Klik "SIAPKAN CONTOH PENEMPATAN" tombol
- Autentikasi dengan GitHub dan pilih repositori microserivce Anda
- Pilih repo GitHub Anda dan tetapkan cabang ke:
^main$
- Menetapkan Build Type untuk menggunakan Buildpacks
- Klik Simpan untuk menyiapkan Continuous Deployment.
8. Kemampuan observasi
Banyak hal rusak. Kemampuan observasi memberi kita kemampuan untuk mengetahui kapan hal itu terjadi dan mendiagnosis alasannya. Metrik menunjukkan data tentang kondisi dan penggunaan layanan kami. Log menunjukkan kepada kami informasi yang diinstrumentasikan secara manual yang dikeluarkan dari layanan kami. Pemberitahuan memungkinkan kami diberi tahu ketika terjadi kesalahan. Mari kita bahas lebih lanjut.
Metrik
- Temukan layanan Anda dalam daftar layanan Cloud Run
- Klik nama layanan Anda untuk membuka dasbor metriknya
- Klik menu ⋮ pada metrik, lalu pilih "Lihat di Metrics Explorer"
- Kini Anda dapat mengubah metrik resource, filter, pengelompokan, dan opsi lainnya. 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 berdasarkan tingkat keparahan dan memfilter log. Untuk fleksibilitas lebih lanjut, klik:
Pemberitahuan
- Buat URL heathcheck untuk layanan Anda.
- Untuk Spring Boot, cukup tambahkan dependensi berikut:
org.springframework.boot:spring-boot-starter-actuator
- Buat atau update
src/main/resources/application.properties
dan nonaktifkan pemeriksaan kapasitas disk:
management.health.diskspace.enabled=false
- Buat notifikasi waktu beroperasi, 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 membangun dan men-deploy microservice yang dapat bersaing dengan microservice lainnya. Semoga berhasil!