बैटल वन - माइक्रोसर्विस का बैटल ग्राउंड

1. परिचय

पिछली बार अपडेट किए जाने की तारीख: 26-08-2020

माइक्रोसर्विस का बैटल अरीना

क्या आपने कभी बर्फ़ के गोलों की लड़ाई का हिस्सा बनाया है, जहां आप इधर-उधर घूमते हैं और हंसी-मज़ाक़ के साथ दूसरों पर बर्फ़ के गोले फेंकते हैं? अगर नहीं, तो किसी दिन ज़रूर आज़माएं! हालांकि, अब खुद को नुकसान पहुंचाने के बजाय, नेटवर्क को ऐक्सेस करने वाली एक छोटी सी सेवा (माइक्रोसेवा) तैयार की जा सकती है. यह सेवा, अन्य माइक्रोसेवाओं से मुकाबला करने के लिए लड़ेगी. हम इस माइक्रोसर्विस वाले मुकाबले को SpringOne में होस्ट कर रहे हैं. इसलिए, हमारी माइक्रोसर्विस, बर्फ़ के गोलों के बजाय पत्ते फेंक रही हैं.

आपको लग रहा होगा कि... लेकिन एक माइक्रोसर्विस कैसे "थ्रो" करती है अन्य माइक्रोसेवाओं में लीफ़ लीफ़? माइक्रोसर्विस को नेटवर्क के अनुरोध (आम तौर पर, एचटीटीपी पर) मिल सकते हैं और उससे जवाब मिल सकते हैं. एक "अरीना मैनेजर" है जो आपकी माइक्रोसर्विस को अरीना की मौजूदा स्थिति की जानकारी भेजेगा और फिर आपकी माइक्रोसर्विस एक निर्देश के साथ जवाब देगी, जिसमें बताया जाएगा कि क्या करना है.

बेशक, आपका लक्ष्य जीतना होता है, लेकिन इस दौरान आपको Google Cloud पर माइक्रोसर्विस बनाने और उन्हें डिप्लॉय करने के बारे में भी पता चलेगा.

यह सुविधा कैसे काम करती है

आपको अपनी पसंद की टेक्नोलॉजी इस्तेमाल करके, एक माइक्रोसर्विस बनानी होगी. इसके अलावा, Java, Kotlin या Scala स्टार्टर में से कोई भी विकल्प चुना जा सकता है. इसके बाद, Google Cloud पर माइक्रोसर्विस डिप्लॉय की जाएगी. डिप्लॉय होने के बाद, आपको एक फ़ॉर्म भरना होगा और हमें अपनी माइक्रोसर्विस का यूआरएल बताना होगा. इसके बाद, हम उसे अरीना में शामिल कर देंगे.

इस अरीना में तय किए गए हर मुकाबले के लिए, सभी खिलाड़ी मौजूद होते हैं. SpringOne कॉन्फ़्रेंस का अपना अलग अरीना होगा. हर खिलाड़ी एक माइक्रोसर्विस दिखाता है, जो इधर-उधर घूमती है और दूसरे खिलाड़ियों की ओर पत्तियां फेंकती है.

करीब एक बार हमारा क्षेत्र मैनेजर आपकी माइक्रोसर्विस को कॉल करेगा, और मौजूदा अरीना की स्थिति (जहां खिलाड़ी हैं) भेज देगा, और आपकी माइक्रोसर्विस किसी निर्देश के साथ जवाब देगी कि क्या करना है. अरीना में आगे बढ़ सकते हैं, बाएं या दाएं मुड़ सकते हैं या एक पत्ती फेंक सकते हैं. फेंकी गई पत्ती, खिलाड़ी की स्क्रीन के सामने तीन जगहों तक जाएगी. अगर कोई पत्ती "हिट होती है" दूसरा खिलाड़ी, थ्रोअर को एक पॉइंट मिलता है और हिट खिलाड़ी एक पॉइंट हार जाता है. खिलाड़ियों की मौजूदा संख्या के हिसाब से अरीना का साइज़ अपने-आप अडजस्ट हो जाता है.

यहां बताया गया है कि एक पुराना अरीना कैसा दिखता है:

20628e6bd442bd11.png

बैटल वन अरीना का उदाहरण

बदलते हुए विरोध

अरीना में ऐसा हो सकता है कि कई खिलाड़ी विरोधी कार्रवाइयां करने की कोशिश करें. उदाहरण के लिए, हो सकता है कि दो खिलाड़ी एक ही स्पेस पर जाने की कोशिश करें. किसी विवाद की स्थिति में, सबसे कम समय में जवाब देने वाली माइक्रोसर्विस जीत जाती है.

युद्ध देखना

यह देखने के लिए कि आपकी माइक्रोसर्विस मुकाबले में कैसा परफ़ॉर्म कर रही है, लाइव अरीना देखें!

बैटल एपीआई

हमारे अरीना मैनेजर के साथ काम करने के लिए, आपकी माइक्रोसर्विस को इस अरीना में हिस्सा लेने के लिए, एक खास एपीआई लागू करना होगा. अरीना मैनेजर, आपके दिए गए यूआरएल पर एचटीटीपी पीओएसटी में मौजूदा अरीना की जानकारी भेजेगा. इस पोस्ट में, JSON का यह स्ट्रक्चर शामिल होगा:

{
  "_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
    }
  }
}

आपका एचटीटीपी रिस्पॉन्स, स्टेटस कोड 200 (ठीक है) होना चाहिए. इसमें रिस्पॉन्स के मुख्य हिस्से में आपकी अगली मूव शामिल होना चाहिए. इसे इनमें से किसी एक के अपरकेस वर्ण से कोड में बदला जाता है:

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

आपको सिर्फ़ इतना ही करना है! आइए, Cloud Run पर माइक्रोसर्विस को डिप्लॉय करने के बारे में जानें. यह Google Cloud की ऐसी सेवा है जो माइक्रोसर्विस और अन्य ऐप्लिकेशन चलाने के लिए उपलब्ध है.

2. Google Cloud में लॉगिन करें

Cloud Run पर अपनी माइक्रोसेवा डिप्लॉय करने के लिए, आपको Google Cloud में लॉगिन करना होगा. हम आपके खाते में क्रेडिट लागू करेंगे और आपको क्रेडिट कार्ड की जानकारी डालने की ज़रूरत नहीं होगी. आम तौर पर, G Suite खाते के बजाय निजी खाते (जैसे कि gmail.com) का इस्तेमाल करना कम समस्या वाला होता है. ऐसा इसलिए होता है, क्योंकि कभी-कभी G Suite एडमिन अपने उपयोगकर्ताओं को Google Cloud की कुछ सुविधाएं इस्तेमाल करने से रोकते हैं. साथ ही, हम जिस वेब कंसोल का इस्तेमाल करेंगे वह Chrome या Firefox के साथ अच्छा काम करेगा, लेकिन हो सकता है कि Safari में समस्याएं हों.

3. आपकी माइक्रोसेवा को डिप्लॉय किया जा रहा है

अपनी माइक्रोसर्विस को किसी भी टेक्नोलॉजी की मदद से बनाएं और उसे कहीं भी डिप्लॉय करें, बशर्ते वह सार्वजनिक तौर पर उपलब्ध हो और Battle API के नियमों के मुताबिक हो. हालांकि, इस प्रक्रिया को आसान बनाने के लिए हम सैंपल सेवा से शुरुआत करने और इसे Cloud Run पर डिप्लॉय करने में आपकी मदद करेंगे.

शुरुआत करने के लिए अपना सैंपल चुनें

लड़ाई वाले माइक्रोसर्विस के दो सैंपल यहां से शुरू किए जा सकते हैं:

Java और स्प्रिंग बूट

सोर्स

Cloud Run पर डिप्लॉय करना

Kotlin और स्प्रिंग बूट

सोर्स

Cloud Run पर डिप्लॉय करना

यह तय करने के बाद कि किस सैंपल के साथ शुरू करना है, "Cloud Run पर डिप्लॉय करें" पर क्लिक करें बटन ऊपर दिया गया है. इससे Cloud Shell (क्लाउड में वर्चुअल मशीन के लिए वेब आधारित कंसोल) लॉन्च हो जाएगा, जहां सोर्स को क्लोन किया जाएगा और फिर डिप्लॉय किए जा सकने वाले पैकेज (डॉकर कंटेनर इमेज) में बनाया जाएगा. इसके बाद, उसे Google कंटेनर रजिस्ट्री में अपलोड किया जाएगा और फिर Cloud Run पर डिप्लॉय किया जाएगा.

जब कहा जाए, तो us-central1 क्षेत्र के बारे में बताएं.

नीचे दिया गया स्क्रीनशॉट, माइक्रोसर्विस बिल्ड और डिप्लॉयमेंट के लिए Cloud Shell आउटपुट दिखाता है

d88e40430706a32b.png

माइक्रोसर्विस के काम करने की पुष्टि करना

Cloud Shell में, डिप्लॉय की गई नई माइक्रोसर्विस को अनुरोध किया जा सकता है. इसमें YOUR_SERVICE_URL को अपनी सेवा के यूआरएल से बदला जा सकता है (यह "आपका ऐप्लिकेशन अब यहां लाइव है" लाइन के बाद, Cloud Shell में होता है):

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 या T की जवाब स्ट्रिंग दिखेगी.

4. एरिना में शामिल किए जाने का अनुरोध करें

अरीना में शामिल होने के लिए, आपको #3-sponsor-google-cloud Slack चैनल पर अपना नाम, Cloud Run सेवा का यूआरएल, और अवतार / प्रोफ़ाइल फ़ोटो के लिए अपने GitHub उपयोगकर्ता नाम का मैसेज भेजना होगा. जानकारी की पुष्टि होने के बाद, आपका खिलाड़ी अरीना में दिखेगा.

5. बनाएं और बदलावों को डिप्लॉय करें

बदलाव करने से पहले, आपको Cloud Shell में GCP प्रोजेक्ट और इस्तेमाल किए गए सैंपल के बारे में कुछ जानकारी सेटअप करनी होगी. सबसे पहले अपने GCP प्रोजेक्ट की सूची बनाएं:

gcloud projects list

आपके पास सिर्फ़ एक प्रोजेक्ट हो सकता है. पहले कॉलम से PROJECT_ID को कॉपी करें और उसे यहां दिए गए कमांड में चिपकाएं. YOUR_PROJECT_ID को अपने असल प्रोजेक्ट आईडी से बदलें. ऐसा करके, ऐसा एनवायरमेंट वैरिएबल सेट किया जा सकता है जिसका इस्तेमाल हम बाद के निर्देशों में करेंगे:

export PROJECT_ID=YOUR_PROJECT_ID

आपने जो सैंपल इस्तेमाल किया है उसके लिए अब एक और एनवायरमेंट वैरिएबल सेट करें, ताकि बाद के निर्देशों में हम सही डायरेक्ट्री और सेवा का नाम बता सकें:

# Copy and paste ONLY ONE of these
export SAMPLE=java-springboot
export SAMPLE=kotlin-springboot

अब Cloud Shell में जाकर, माइक्रोसर्विस के सोर्स में बदलाव किया जा सकता है. Cloud Shell के वेब पर आधारित एडिटर को खोलने के लिए, यह कमांड चलाएं:

cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md

इसके बाद, आपको बदलाव करने के लिए आगे के निर्देश दिखेंगे.

f910c9ef7b51c406.png

क्लाउड शेल, एडिटर के साथ सैंपल प्रोजेक्ट खुला हुआ है

अपने बदलावों को सेव करने के बाद, ऐप्लिकेशन को Cloud Shell में चालू करें:

cd cloudbowl-microservice-game/samples/$SAMPLE
./mvnw spring-boot:run

ऐप्लिकेशन चलने के बाद, नया Cloud Shell टैब खोलें और कर्ल का इस्तेमाल करके सेवा की जांच करें:

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

जब आप अपने बदलावों को डिप्लॉय करने के लिए तैयार हों, तो pack कमांड का इस्तेमाल करके Cloud Shell में अपना प्रोजेक्ट बनाएं. यह निर्देश, प्रोजेक्ट टाइप का पता लगाने, उसे कंपाइल करने, और डिप्लॉय किया जा सकने वाला आर्टफ़ैक्ट (डॉकर कंटेनर इमेज) बनाने के लिए, Buildpacks का इस्तेमाल करता है.

pack build gcr.io/$PROJECT_ID/$SAMPLE \
  --path ~/cloudbowl-microservice-game/samples/$SAMPLE \
  --builder gcr.io/buildpacks/builder

अब जब आपकी कंटेनर इमेज बन गई है, तो कंटेनर इमेज को Google Container Registry में भेजने के लिए, Docker कमांड (Cloud Shell में) का इस्तेमाल करें. ऐसा करने के बाद, Cloud Run से उसे ऐक्सेस किया जा सकेगा:

docker push gcr.io/$PROJECT_ID/$SAMPLE

अब Cloud Run पर नया वर्शन डिप्लॉय करें:

gcloud run deploy $SAMPLE\
          --project=$PROJECT_ID\
          --platform=managed\
          --region=us-central1\
          --image=gcr.io/$PROJECT_ID/$SAMPLE\
          --memory=512Mi\
          --allow-unauthenticated

अब अरीना आपके नए वर्शन का इस्तेमाल करेगा!

6. स्थानीय रूप से डेवलप करें

अपने प्रोजेक्ट पर स्थानीय आईडीई का इस्तेमाल करके काम करने के लिए, यह तरीका अपनाएं:

  1. [क्लाउड शेल में] सैंपल की ज़िप फ़ाइल बनाएं:

cd ~/cloudbowl-microservice-game/samples; zip -r cloudbowl-sample.zip $SAMPLE

  1. [Cloud Shell में] अपनी मशीन में ZIP फ़ाइल डाउनलोड करें:

cloudshell download-file cloudbowl-sample.zip

  1. [अपनी मशीन पर] फ़ाइल को अनज़िप करें और फिर & अपने बदलावों की जांच करें
  2. [अपनी मशीन पर] gcloud सीएलआई इंस्टॉल करें
  3. [अपनी मशीन पर] Google क्लाउड में लॉगिन करें:

gcloud auth login

  1. [अपनी मशीन पर] एनवायरमेंट वैरिएबल PROJECT_ID और SAMPLE को Cloud Shell की वैल्यू के बराबर ही सेट करें.
  2. [अपनी मशीन पर] कंटेनर बनाने के लिए, Cloud Build का इस्तेमाल करें (रूट प्रोजेक्ट डायरेक्ट्री से):

gcloud alpha builds submit . --pack=image=gcr.io/$PROJECT_ID/$SAMPLE

  1. [अपनी मशीन पर] नया कंटेनर डिप्लॉय करें:

gcloud run deploy $SAMPLE --project=$PROJECT_ID --platform=managed --region=us-central1 --image=gcr.io/$PROJECT_ID/$SAMPLE --memory=512Mi --allow-unauthenticated

7. बधाई हो

बधाई हो, आपने एक ऐसी माइक्रोसर्विस बना ली है और उसे डिप्लॉय कर लिया है जो अन्य माइक्रोसेवाओं से लड़ सकती है! शुभकामनाएं!

सीखना जारी रखें

पहचान फ़ाइलें

8. अक्सर पूछे जाने वाले सवाल

मेरी माइक्रोसर्विस, अरीना में क्यों नहीं दिख रही है?