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

1. परिचय

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

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

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

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

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

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

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

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

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

यहां बताया गया है कि तीन मेक-अप खिलाड़ियों के साथ अरीना कैसा दिखता है:

9e4775d13ff18d4d.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. आपकी माइक्रोसेवा को डिप्लॉय किया जा रहा है

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

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

यहां युद्ध से जुड़ी माइक्रोसर्विस के तीन सैंपल दिए गए हैं:

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

सोर्स

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

Java और क्वार्कस

सोर्स

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

Kotlin और Micronaut

सोर्स

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

Kotlin और क्वार्कस

सोर्स

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

स्काला और Play का फ़्रेमवर्क

सोर्स

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

शुरू करें

सोर्स

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

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

अरीना में शामिल होने के लिए, आपको एक छोटा फ़ॉर्म भरना होगा. सबसे मुश्किल हिस्सा यह तय करना है कि आपको अपनी प्रोफ़ाइल फ़ोटो के लिए किस चीज़ का इस्तेमाल करना है. इसके लिए, GitHub इमेज या LinkedIn इमेज का इस्तेमाल किया जा सकता है. इसके अलावा, हम आपके लिए कोई भी अवतार चुन सकते हैं. सबमिशन की समीक्षा पूरी होने के बाद, आपका खिलाड़ी एरिना में दिखेगा.

बनाएं & बदलावों को लागू करना

बदलाव करने से पहले, आपको 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-micronaut
export SAMPLE=scala-play

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

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

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

f910c9ef7b51c406.png

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

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

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

अब जब आपकी कंटेनर इमेज बन गई है, तो कंटेनर इमेज को 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

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

3. बधाई हो

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

आगे क्या होगा?

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