Battle Jamón - Battle Ground Microservice

1. Pengantar

Terakhir diperbarui: 05-05-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 ini di I/O Spring, microservice kami akan menampilkan jamón, bukan bola salju.

Anda mungkin bertanya-tanya... Namun, bagaimana microservice "menampilkan" jamón 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. Konferensi Spring I/O Bridge akan memiliki arenanya sendiri. Setiap pemain mewakili microservice yang bergerak dan melempar jamón 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 jamón. Jamón yang dilempar akan meluncur hingga tiga spasi ke arah yang dihadap pemain. Jika jamón "mengetuk" 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:

20628e6bd442bd11.pngS

Contoh arena Battle Jamón

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

Sumber

Men-deploy di Cloud Run

Kotlin & Sepatu Bot Musim Semi

Sumber

Men-deploy di Cloud Run

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

d88e40430706a32b.png

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 masuk ke arena, Anda harus mengirim pesan ke channel#battle-jamon 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.

f910c9ef7b51c406.png

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. Selamat

Selamat, Anda telah berhasil membangun dan men-deploy microservice yang dapat bersaing dengan microservice lainnya. Semoga berhasil!

Lanjutkan Belajar

Dokumen Referensi

7. FAQ

Mengapa microservice saya tidak muncul di arena?

Bagaimana pertandingan finalnya?

Bagaimana cara kerja arena sebelum pertarungan terakhir?

Bagaimana cara untuk menang?

Dapatkah saya mengembangkan aplikasi secara lokal?