Battle Peach - Mikro Hizmetler Savaş Alanı

1. Giriş

Son Güncelleme: 12.02.2020

Mikro Hizmetler Savaş Meydanı

Hiç etrafta dolanıp başkalarına kartopu fırlattığınız bir kartopu savaşı yaptınız mı? Yoksa bir gün tekrar deneyin! Ancak artık fiziksel olarak dövülme riskine girmek yerine, diğer mikro hizmetlere karşı destansı bir savaşta yer alacak küçük, ağa bağlı bir hizmet (mikro hizmet) oluşturabilirsiniz. Bu ilk mikro hizmet savaşını Georgia, Atlanta'da gerçekleştirdiğimiz için mikro hizmetlerimiz size kartopu yerine şeftali atacak.

Merak ediyor olabilirsiniz... Peki bir mikro hizmet nasıl "fırlatıcı" başka mikro hizmetler için kullanıyor olabilir mi? Mikro hizmetler, ağ istekleri (genellikle HTTP üzerinden) alabilir ve yanıtlar döndürebilir. Bir "arena yöneticisi" vardır mikro hizmetinize arenanın mevcut durumunu gönderir ve mikro hizmetiniz ne yapılacağını belirten bir komutla yanıt verir.

Elbette hedefiniz kazanmak olsa da bu süreçte Google Cloud'da mikro hizmetler derleme ve dağıtma hakkında bilgi edineceksiniz.

İşleyiş şekli

İstediğiniz herhangi bir teknolojiyle mikro hizmet derleyecek (veya Java, Kotlin ya da Scala başlatıcılar arasından seçim yapmanız) ve ardından mikro hizmeti Google Cloud'da dağıtacaksınız. Dağıtımdan sonra, mikro hizmetinizin URL'sini bize bildirmek için bir form dolduracaksınız. Ardından, mikro hizmetinizin URL'sini arenaya ekleyeceğiz.

Arenada belirli bir savaştaki tüm oyuncular yer alır. DevNexus konferansı için her gün bir arena olacaktır. Her oyuncu, etrafta dolaşıp diğer oyunculara şeftali fırlatan bir mikro hizmeti temsil eder.

Arena yöneticimiz yaklaşık saniyede bir kez mikro hizmetinizi arayarak mevcut arena durumunu (oyuncuların bulunduğu yer) gönderir ve mikro hizmetiniz, ne yapılması gerektiğine dair bir komutla yanıt verir. Arenada ileri gidebilir, sola veya sağa dönebilir ya da şeftali atabilirsiniz. Fırlatılan şeftali, oyuncunun baktığı yönde en fazla üç boşluk hareket eder. Şeftali "isabet ederse" atış yapan oyuncu bir puan alır ve vuran oyuncu bir puan kaybeder. Arena boyutu, mevcut oyuncu sayısına göre otomatik olarak ayarlanır.

Makyaj yapan üç oyuncuyla arena şu şekilde görünüyor:

9e4775d13ff18d4d.png

Örnek Battle Peach arenası

Dönen Çatışmalar

Arenada birden fazla oyuncu birbiriyle çelişen işlemler gerçekleştirmeye çalışabilir. Örneğin, iki oyuncu aynı alana taşınmaya çalışabilir. Çakışma durumunda, en hızlı yanıt süresine sahip mikro hizmet kazanır.

Savaşı izleme

Mikro hizmetinizin savaşta performansını öğrenmek için canlı arenaya göz atın.

Battle API

Arena yöneticimizle birlikte çalışmak için mikro hizmetinizin arenaya katılmak için belirli bir API uygulaması gerekir. Arena yöneticisi, mevcut arena durumunu HTTP POST'ta bize gönderdiğiniz URL'ye aşağıdaki JSON yapısıyla 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, sonraki taşımanızı içeren ve aşağıdakilerden birinin tek büyük harfli karakteri olarak kodlanmış bir yanıt gövdesine sahip 200 (Tamam) durum kodu olmalıdır:

F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw

Hepsi bu kadar! Mikro hizmetleri ve diğer uygulamaları çalıştırmaya yönelik bir Google Cloud hizmeti olan Cloud Run'da mikro hizmet dağıtmaya göz atalım.

2. Mikro Hizmetinizi Dağıtma

Mikro hizmetinizi dilediğiniz teknolojiyle derleyebilir, herkese açık olduğu 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 İçin Sana Özel içeriklerini seçin

Başlayabileceğiniz üç savaş mikro hizmet örneği bulunur:

Java ve Yazlık Bot

Kaynak

Cloud Run'da dağıtma

Java ve Quarkus

Kaynak

Cloud Run'da dağıtma

Kotlin ve Micronaut

Kaynak

Cloud Run'da dağıtma

Kotlin ve Quarkus

Kaynak

Cloud Run'da dağıtma

Scala ve Play Çerçevesi

Kaynak

Cloud Run'da dağıtma

Go

Kaynak

Cloud Run'da dağıtma

Hangi örnekle başlayacağınıza karar verdikten sonra "Cloud Run'da dağıt"ı tıklayın. düğmesini tıklayın. Bu işlem, kaynağın klonlanacağı, ardından dağıtılabilir bir pakete (bir Docker container görüntüsü) yerleştirileceği ve ardından Google Container Registry'ye yüklenip Cloud Run'a dağıtılacağı Cloud Shell'i (buluttaki bir sanal makineye yönelik web tabanlı bir konsol) başlatacaktır.

Sorulduğunda, us-central1 bölgesini belirtin.

Aşağıdaki ekran görüntüsünde, mikro hizmet derlemesi ve dağıtımı için Cloud Shell çıkışı gösterilmektedir

d88e40430706a32b.png

Mikro hizmetin çalıştığını doğrulama

Cloud Shell'de, yeni dağıtılan mikro hizmetinize YOUR_SERVICE_URL yerine hizmetinizin URL'sini yazarak istek gönderebilirsiniz. Hizmet URL'si, Cloud Shell'de "Uygulamanız artık burada yayında" satırından sonra yer alır:

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örürsünüz.

Arenaya Dahil Olma İsteğinde Bulunma

Arenaya katılmak için kısa bir form doldurmanız gerekir. En zor kısmı, profil resminiz için ne kullanmak istediğinizi belirlemektir. GitHub resminizi veya LinkedIn resminizi kullanabilirsiniz ya da sizin için rastgele bir avatar seçeriz. Gönderiminizi inceledikten sonra oyuncunuz arenada görünür.

Yap ve Değişiklikleri Dağıtma

Değişiklik yapmadan önce, Cloud Shell'de GCP projesi ve kullandığınız örnekle ilgili bazı bilgileri ayarlamanız gerekir. İlk olarak GCP projelerinizi listeleyin:

gcloud projects list

Muhtemelen yalnızca bir projeniz vardır. İlk sütundaki PROJECT_ID değerini kopyalayıp aşağıdaki komuta yapıştırın (YOUR_PROJECT_ID değerini gerçek proje kimliğinizle değiştirin). Böylece, sonraki komutlarda kullanacağımız bir ortam değişkeni belirleyebilirsiniz:

export PROJECT_ID=YOUR_PROJECT_ID

Şimdi, sonraki komutlarda doğru dizini ve hizmet adını belirtebilmemiz için, kullandığınız örnekle ilgili başka bir ortam değişkeni ayarlayın:

# 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 içinden 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.

f910c9ef7b51c406.png

Örnek projenin açık olduğu düzenleyiciyi içeren Cloud Shell

Değişikliklerinizi kaydettikten sonra pack komutunu kullanarak projenizi Cloud Shell'de derleyin. Bu komut, proje türünü algılamak, derlemek ve dağıtılabilir yapıyı (Docker container görüntüsü) oluşturmak için Buildpacks'i 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şturulduğuna göre container görüntüsünü Google Container Registry'ye aktarmak için Docker komutunu (Cloud Shell'de) kullanın. Böylece, Cloud Run bu görüntüye erişebilir:

docker push gcr.io/$PROJECT_ID/$SAMPLE

Şimdi yeni sürümü Cloud Run'da 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 derleyip dağıttınız. İyi şanslar!

Sırada ne var?

Referans belgeler