1. Giriş
Son Güncelleme: 2020-02-12
Microservices Battle Arena
Hiç hareket edip diğerlerine eğlenceli bir şekilde kartopu attığınız bir kartopu savaşına katıldınız mı? Henüz denemediyseniz bir gün mutlaka deneyin. Ancak artık fiziksel olarak tokatlanma riskini almak yerine, diğer mikro hizmetlere karşı destansı bir savaşa katılacak küçük, ağ üzerinden erişilebilen bir hizmet (mikro hizmet) oluşturabilirsiniz. Bu ilk mikro hizmet savaşını Atlanta, Georgia'da düzenlediğimiz için mikro hizmetlerimiz kartopu yerine şeftali atacak.
Şunları merak ediyor olabilirsiniz: Peki bir mikro hizmet, diğer mikro hizmetlere nasıl şeftali "atıyor"? Bir mikro hizmet, ağ istekleri (genellikle HTTP üzerinden) alabilir ve yanıt döndürebilir. Arenanın mevcut durumunu mikro hizmetinize gönderen bir "arena yöneticisi" vardır. Mikro hizmetiniz de ne yapılması gerektiğini belirten bir komutla yanıt verir.
Elbette amaç kazanmak ancak bu süreçte Google Cloud'da mikro hizmetler oluşturma ve dağıtma hakkında bilgi edineceksiniz.
İşleyiş şekli
İstediğiniz bir teknolojiyle mikro hizmet oluşturacak (veya Java, Kotlin ya da Scala başlangıç paketlerinden birini seçecek), ardından mikro hizmeti Google Cloud'da dağıtacaksınız. Dağıtım tamamlandıktan sonra, mikro hizmetinizin URL'sini bize bildirmek için bir form doldurursunuz. Ardından, URL'yi arenaya ekleriz.
Arena, belirli bir savaş için tüm oyuncuları içerir. DevNexus konferansında her gün için bir arena olacak. Her oyuncu, hareket eden ve diğer oyunculara şeftali atan bir mikro hizmeti temsil eder.
Arena yöneticimiz, yaklaşık olarak saniyede bir kez mikro hizmetinizi çağırarak mevcut arena durumunu (oyuncuların bulunduğu yer) gönderir. Mikro hizmetiniz ise ne yapılması gerektiğine dair bir komutla yanıt verir. Arenada ileri gidebilir, sola veya sağa dönebilir ya da şeftali atabilirsiniz. Atılan şeftali, oyuncunun baktığı yönde en fazla üç kare ilerler. Bir şeftali başka bir oyuncuya "isabet ederse" atan oyuncu bir puan kazanır, isabet alan oyuncu ise bir puan kaybeder. Arena boyutu, mevcut oyuncu sayısına göre otomatik olarak ayarlanır.
Üç uydurma oyuncuyla arenanın görünümü aşağıdaki gibidir:
Örnek Battle Peach arenası
Döner Çakışmalar
Arenada birden fazla oyuncu çakışan işlemler yapmaya çalışabilir. Örneğin, iki oyuncu aynı alana gitmeye çalışabilir. Çakışma durumunda en hızlı yanıt süresine sahip mikro hizmet kazanır.
The Battle'ı izleme
Mikro hizmetinizin savaşta nasıl performans gösterdiğini görmek için canlı arenayı inceleyin.
Battle API
Arena yöneticimizle çalışabilmek için mikro hizmetinizin arenaya katılmak üzere belirli bir API'yi uygulaması gerekir. Arena yöneticisi, bize sağladığınız URL'ye aşağıdaki JSON yapısıyla birlikte bir HTTP POST isteğiyle mevcut arena durumunu gönderir:
{
"_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
}
}
}
HTTP yanıtınız, bir sonraki hamlenizi içeren bir yanıt gövdesiyle birlikte 200 (Tamam) durum kodu olmalıdır. Yanıt gövdesi, aşağıdakilerden birinin tek bir büyük harf karakteri olarak kodlanmalıdır:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
Hepsi bu kadar. Mikro hizmetleri ve diğer uygulamaları çalıştırmak için kullanılan bir Google Cloud hizmeti olan Cloud Run'da mikro hizmet dağıtma sürecini inceleyelim.
2. Mikro Hizmetinizi Dağıtma
Mikro hizmetinizi herhangi bir teknolojiyle oluşturabilir ve herkese açık olarak erişilebildiği ve Battle API'ye uygun olduğu sürece istediğiniz yere dağıtabilirsiniz. İşleri kolaylaştırmak için rastgele bir komut seçen örnek bir projeyle başlayabilirsiniz.
Başlamak için örneğinizi seçin
Başlangıç için kullanabileceğiniz üç savaş mikro hizmeti örneği vardır:
Java ve Spring Boot | ||
Java ve Quarkus | ||
Kotlin ve Micronaut | ||
Kotlin ve Quarkus | ||
Scala ve Play Framework | ||
Go |
Hangi örnekle başlayacağınıza karar verdikten sonra yukarıdaki "Cloud Run'da dağıt" düğmesini tıklayın. Bu işlem, kaynağın klonlanacağı, ardından dağıtılabilir bir pakete (Docker container görüntüsü) derleneceği, daha sonra Google Container Registry'ye yükleneceği ve ardından Cloud Run'da dağıtılacağı Cloud Shell'i (buluttaki bir sanal makineye yönelik web tabanlı bir konsol) başlatır.
İstenirse us-central1 bölgesini belirtin.
Aşağıdaki ekran görüntüsünde, mikro hizmet derleme ve dağıtımı için Cloud Shell çıkışı gösterilmektedir

Mikro hizmetin çalıştığını doğrulama
Cloud Shell'de, YOUR_SERVICE_URL kısmını hizmetinizin URL'siyle (Cloud Shell'de "Your application is now live here" satırından sonra yer alır) değiştirerek yeni dağıtılan mikro hizmetinize istekte bulunabilirsiniz:
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
F, L, R veya T yanıt dizesini görmeniz gerekir.
Arena'ya dahil edilme isteğinde bulunma
Arenaya dahil edilmek için kısa bir form doldurmanız gerekir. En zor kısım, profil resminizde ne kullanmak istediğinize karar vermektir. GitHub resminizi, LinkedIn resminizi kullanabilir veya sizin için rastgele bir avatar seçebiliriz. Gönderimi inceledikten sonra oyuncunuz arenada görünür.
Değişiklik Yapma ve Dağıtma
Değişiklik yapabilmek için Cloud Shell'de GCP projesi ve kullandığınız örnek hakkında bazı bilgileri ayarlamanız gerekir. Öncelikle GCP projelerinizi listeleyin:
gcloud projects list
Muhtemelen yalnızca bir projeniz vardır. Daha sonraki komutlarda kullanacağımız bir ortam değişkeni ayarlamak için ilk sütundaki PROJECT_ID değerini kopyalayıp aşağıdaki komuta yapıştırın (YOUR_PROJECT_ID yerine gerçek proje kimliğinizi girin):
export PROJECT_ID=YOUR_PROJECT_ID
Şimdi, kullandığınız örnek için başka bir ortam değişkeni ayarlayın. Böylece sonraki komutlarda doğru dizini ve hizmet adını belirtebiliriz:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-micronaut export SAMPLE=scala-play
Artık mikro hizmetinizin kaynağını Cloud Shell'den düzenleyebilirsiniz. Cloud Shell web tabanlı düzenleyiciyi açmak için şu komutu çalıştırın:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
Ardından değişiklik yapmayla ilgili diğer talimatları görürsünüz.

Örnek proje açıkken düzenleyiciyle Cloud Shell
Değişikliklerinizi kaydettikten sonra pack komutunu kullanarak projenizi Cloud Shell'de oluşturun. Bu komut, proje türünü algılamak, derlemek ve dağıtılabilir yapıyı (bir Docker kapsayıcı görüntüsü) oluşturmak için Buildpack'leri kullanır.
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path cloudbowl-microservice-game/samples/$SAMPLE \ --builder heroku/buildpacks
Container görüntünüz oluşturulduktan sonra, Cloud Run tarafından erişilebilmesi için container görüntüsünü Google Container Registry'ye göndermek üzere docker komutunu (Cloud Shell'de) kullanın:
docker push gcr.io/$PROJECT_ID/$SAMPLE
Şimdi yeni sürümü Cloud Run'a dağıtın:
gcloud run deploy $SAMPLE\
--project=$PROJECT_ID\
--platform=managed\
--region=us-central1\
--image=gcr.io/$PROJECT_ID/$SAMPLE\
--memory=512Mi\
--allow-unauthenticated
Artık arena, yeni sürümünüzü kullanacak.
3. Tebrikler
Tebrikler, diğer mikro hizmetlerle savaşabilecek bir mikro hizmeti başarıyla oluşturup dağıttınız. İyi şanslar!
Yapabilecekleriniz
- Spring Boot uygulamanıza dağıtılmış izleme ekleme
- Mikro hizmetinizi süper akıllı hale getirmek için AI Platform'u kullanma